예제 #1
0
        public async Task <ActionResult> Post([FromBody] CreateCourseRequest request)
        {
            try {
                var command = _mapper.Map <CreateCourseCommand>(request);
                await _commandHandler.HandleAsync(command);

                var query = new GetCourseDetailQuery {
                    Code = command.Code
                };
                var course = await _queryHandler.HandleAsync(query);

                return(CreatedAtAction(nameof(Get), new { code = course.Code }, course));
            } catch (Exception ex) {
                // Check if exception is cause of duplicated key
                if (ex.InnerException.Message.Contains("duplicate key"))
                {
                    return(BadRequest(new {
                        title = $"Course with code '{request.Code.ToUpper()}' already exists.",
                        status = HttpStatusCode.BadRequest,
                    }));
                }

                return(BadRequest());
            }
        }
예제 #2
0
        public async Task <CourseDetail> HandleAsync(GetCourseDetailQuery query)
        {
            var course = await _repository.GetByCode(query.Code);

            if (course == null)
            {
                throw new EntityNotFoundException($"Course with code '{query.Code}' Not Found.");
            }

            return(_mapper.Map <CourseDetail>(course));
        }
예제 #3
0
        public async Task <ActionResult> Get(string code)
        {
            try {
                var query = new GetCourseDetailQuery {
                    Code = code
                };
                var course = await _queryHandler.HandleAsync(query);

                return(Ok(course));
            } catch (EntityNotFoundException ex) {
                return(NotFound(ex.Message));
            }
        }
예제 #4
0
        public async Task <ActionResult> Put([FromBody] UpdateCourseRequest request, string code)
        {
            try {
                var command = _mapper.Map <UpdateCourseCommand>(request);
                command.Code = code;
                await _commandHandler.HandleAsync(command);

                var query = new GetCourseDetailQuery {
                    Code = code
                };
                var course = await _queryHandler.HandleAsync(query);

                return(Ok(course));
            } catch (EntityNotFoundException ex) {
                return(NotFound(ex.Message));
            } catch (Exception) {
                return(BadRequest());
            }
        }