private void MapRequestToCourseItemProperties(UpdateCourseItemByTeacherCommand request, CourseItem item)
 {
     item.Order = request.Order;
     item.Title = request.Title;
     item.TeacherMessageForAdmin = request.TeacherMessageForAdmin;
     item.State     = CourseItemApprovalState.PendingToApproveByAdmin;
     item.IsPreview = request.IsPreview;
 }
        private async Task HandleUploadedFileAndItemFilePath(UpdateCourseItemByTeacherCommand request, CourseItem item)
        {
            if (request.File != null)
            {
                _coursesFileManager.DeleteFile(item.FilePath);
                var course = _courseRepository.GetQueryable().Include(x => x.Teacher).First(x => x.Id == request.Id);
                await _coursesFileManager.SaveFile(request.File, course.Teacher.UserName, item.CourseId);

                item.FilePath =
                    _coursesFileManager.GetFilePathForDownload(request.File, course.Teacher.UserName, item.CourseId);
                item.ContentType = GetContentType(request.File.ContentType);
            }
        }
        public async Task <Response <CourseItemViewModel> > Handle(UpdateCourseItemByTeacherCommand request,
                                                                   CancellationToken cancellationToken)
        {
            var item = await _courseItemRepository.GetById(request.Id);

            var course = await _courseRepository.GetById(item.CourseId);

            course.HasPendingItemToApprove = true;
            MapRequestToCourseItemProperties(request, item);
            try
            {
                await HandleUploadedFileAndItemFilePath(request, item);
                await UpdateData(course, item);
            }
            catch (Exception e)
            {
                _unitOfWork.RollBack();
                return(Response <CourseItemViewModel> .Failed());
            }

            return(Response <CourseItemViewModel> .Success(_mapper.Map <CourseItemViewModel>(item)));
        }