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()); } }
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)); }
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)); } }
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()); } }