public async Task <IActionResult> Create(ThreadAnonymousCreateViewModel viewModel) { if (ModelState.IsValid) { try { var categoryDto = await _categoryService.GetAsync(viewModel.CategoryAlias); var threadDto = _mapper.Map <ThreadDto>(viewModel); threadDto.BumpLimit = categoryDto.DefaultBumpLimit; threadDto.ShowThreadLocalUserHash = categoryDto.DefaultShowThreadLocalUserHash; threadDto.CategoryId = categoryDto.Id; var postDto = _mapper.Map <PostDto>(viewModel); postDto.UserIpAddress = UserIpAddress.ToString(); postDto.UserAgent = UserAgent; var threadCreateDto = new ThreadPostCreateDto { Category = categoryDto, Thread = threadDto, Post = postDto, }; var createResultDto = await _threadService.CreateThreadPostAsync(viewModel.Attachments, threadCreateDto, true); return(RedirectToAction("Details", "Threads", new { categoryAlias = viewModel.CategoryAlias, threadId = createResultDto.ThreadId })); } catch (Exception ex) { _logger.LogError(EventIdentifiers.ThreadCreateError.ToEventId(), ex, $"Can't create new thread due to exception"); ViewBag.ErrorMessage = "Can't create new thread"; return(View(viewModel)); } } else { ViewBag.ErrorMessage = ModelState.ModelErrorsToString(); return(View(viewModel)); } }
public async Task <IActionResult> Create(PostAnonymousCreateViewModel viewModel) { if (ModelState.IsValid) { var categoryDto = await _categoryService.GetAsync(viewModel.CategoryAlias); var threadDto = await _threadService.GetAsync(viewModel.ThreadId); if (!threadDto.IsClosed) { var postDto = _mapper.Map <PostDto>(viewModel); postDto.UserIpAddress = UserIpAddress.ToString(); postDto.UserAgent = UserAgent; var threadPostCreateDto = new ThreadPostCreateDto { Category = categoryDto, Thread = threadDto, Post = postDto, }; var createResultDto = await _threadService.CreateThreadPostAsync(viewModel.Attachments, threadPostCreateDto, false); return(Redirect(Url.Action("Details", "Threads", new { categoryAlias = viewModel.CategoryAlias, threadId = createResultDto.ThreadId, }) + "#" + createResultDto.PostId)); } else { throw new HttpResponseException(HttpStatusCode.Forbidden, $"Thread {threadDto.Id} is closed."); } } else { ViewBag.ErrorMessage = ModelState.ModelErrorsToString(); return(View(viewModel)); } }