public ActionResult <CourseDto> CreateCourseForAuthor(
            [FromRoute] Guid authorId,
            [FromBody] CreateCourseDto courseDto
            )
        {
            if (!AuthorRepository.Exists(authorId))
            {
                return(NotFound());
            }

            if (courseDto == null)
            {
                return(BadRequest());
            }

            var course = CourseMapper.ToCourse(courseDto, authorId);

            CourseRepository.Create(course);
            _unitOfWork.Commit();

            return(CreatedAtRoute(
                       "GetCourseForAuthor",
                       new { authorId, id = course.Id },
                       CourseMapper.ToCourseDto(course)
                       ));
        }
        public ActionResult PartiallyUpdateCourseForAuthor(Guid authorId, Guid id,
                                                           JsonPatchDocument <UpdateCourseDto> patchDocument)
        {
            if (!AuthorRepository.Exists(authorId))
            {
                return(NotFound());
            }

            var course = CourseRepository.GetAuthorCourse(authorId, id);

            if (course == null)
            {
                var courseDto = new UpdateCourseDto();
                patchDocument.ApplyTo(courseDto, ModelState);
                if (!TryValidateModel(courseDto))
                {
                    return(ValidationProblem(ModelState));
                }

                var courseToAdd = CourseMapper.ToCourse(courseDto, authorId);
                courseToAdd.Id = id;
                CourseRepository.Create(courseToAdd);
                _unitOfWork.Commit();

                return(CreatedAtRoute(
                           "GetCourseForAuthor",
                           new { authorId, id = courseToAdd.Id },
                           CourseMapper.ToCourseDto(courseToAdd)
                           ));
            }

            var courseToPatch = new UpdateCourseDto()
            {
                Description = course.Description,
                Title       = course.Title,
            };

            patchDocument.ApplyTo(courseToPatch, ModelState);

            if (!TryValidateModel(courseToPatch))
            {
                return(ValidationProblem(ModelState));
            }

            CourseMapper.ToCourse(courseToPatch, authorId, course);
            CourseRepository.Update(course);
            _unitOfWork.Commit();

            return(NoContent());
        }
        public IActionResult UpdateCourseForAuthor(
            [FromRoute] Guid authorId,
            [FromRoute] Guid id,
            [FromBody] UpdateCourseDto courseDto
            )
        {
            if (!AuthorRepository.Exists(authorId))
            {
                return(NotFound());
            }

            if (courseDto == null)
            {
                return(BadRequest());
            }

            var course = CourseRepository.GetAuthorCourse(authorId, id);

            if (course == null)
            {
                var courseToAdd = CourseMapper.ToCourse(courseDto, authorId);
                courseToAdd.Id = id;

                CourseRepository.Create(courseToAdd);

                return(CreatedAtRoute(
                           "GetCourseForAuthor",
                           new { authorId, id = courseToAdd.Id },
                           CourseMapper.ToCourseDto(courseToAdd)
                           ));
            }

            CourseMapper.ToCourse(courseDto, authorId, course);

            CourseRepository.Update(course);
            _unitOfWork.Commit();

            return(NoContent());
        }