public async Task <IActionResult> Update(int id, [FromBody] PostEditViewModel postEditModel) { if (postEditModel == null) { return(BadRequest()); } if (!ModelState.IsValid) { return(BadRequest()); } var post = await _postService.GetAsync(id); if (post == null) { return(NotFound()); } if (!HasCurrentUserEditRights(post)) { return(StatusCode(403)); } var editPostDto = MapToEditPostDTO(postEditModel); var updatedPost = await _postService.Update(id, editPostDto); var postViewModel = PostMapper.ConvertToPostViewModel(updatedPost); return(Ok(postViewModel)); }
public async Task <IActionResult> GetPageAsync(InputPageData inputData) { if (!ModelState.IsValid) { return(BadRequest("Count of posts must be less than 100 and more than 0")); } int currentUserId = _userContext.CurrentUser.Id; var pagedResultDto = await _postService.GetPageAsync(currentUserId, inputData.PageNum, inputData.PageSize, inputData.JustMyPosts, inputData.SearchStr); var posts = new List <PostViewModel>(); pagedResultDto.Data.ForEach((p) => { var filesViewModelCollection = p.Files.Select(FileMapper.ConvertToFileInfoViewModel); var usersLikes = p.UsersLikes.Select(UserMapper.ConvertToUserLikeViewModel); var postViewModel = PostMapper.ConvertToPostViewModel(p); postViewModel.Files = filesViewModelCollection.ToList(); postViewModel.UsersLikes = usersLikes.ToList(); posts.Add(postViewModel); }); return(Ok(new { Paging = pagedResultDto.Paging, Data = posts })); }
public async Task <IActionResult> CreateAsync([FromBody] PostCreateViewModel postCreateModel) { if (postCreateModel == null) { return(BadRequest()); } if (!ModelState.IsValid) { return(BadRequest()); } List <FileInfoDTO> filesDTO = new List <FileInfoDTO>(); postCreateModel.VideoUrl = string.IsNullOrEmpty(postCreateModel.VideoUrl) ? null : postCreateModel.VideoUrl; var offset = TimeZoneInfo.Local.GetUtcOffset(DateTime.UtcNow); postCreateModel.StartDate = postCreateModel.StartDate.AddHours(offset.TotalHours); postCreateModel.EndDate = postCreateModel.EndDate.AddHours(offset.TotalHours); foreach (var file in postCreateModel.Files) { var createRequestFile = FileMapper.ConvertToCreateFileRequest(file); using (var stream = _fileManager.GetFileStream(file)) { var createdPostFileDTO = await _fileService.CreateAsync(createRequestFile, stream); filesDTO.Add(createdPostFileDTO); } } var post = PostMapper.ConvertToPostDTO(postCreateModel); post.Files = filesDTO; var createdPostDTO = await _postService.CreateAsync(post); var currentUser = _userContext.CurrentUser; var postViewModel = PostMapper.ConvertToPostViewModel(createdPostDTO); if (currentUser.RoleId != (int)Roles.Moderator) { _emailService.PostCreatedNotificationAsync(postViewModel); } return(Ok(createdPostDTO)); }