public async Task <IActionResult> Create(string categoryAlias) { var category = await _categoryService.GetAsync(categoryAlias); var threadAnonymousCreateViewModel = new ThreadAnonymousCreateViewModel { CategoryAlias = category.Alias, CategoryName = category.Name, }; return(View(threadAnonymousCreateViewModel)); }
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(ThreadAnonymousCreateViewModel viewModel) { if (ModelState.IsValid) { var category = await _categoryService.GetAsync(viewModel.CategoryAlias); var threadDto = _mapper.Map <ThreadDto>(viewModel); threadDto.BumpLimit = category.DefaultBumpLimit; threadDto.ShowThreadLocalUserHash = category.DefaultShowThreadLocalUserHash; threadDto.CategoryId = category.Id; var threadId = await _threadService.CreateAsync(threadDto); var postDto = _mapper.Map <PostDto>(viewModel); postDto.ThreadId = threadId; postDto.UserIpAddress = UserIpAddress.ToString(); postDto.UserAgent = UserAgent; try { var postId = await _postService.CreateAsync(viewModel.Attachments, postDto); } catch (Exception ex) { _logger.LogError($"Can't create new post due to exception: {ex}. Thread creation failed."); await _threadService.DeleteAsync(threadId); throw; } return(RedirectToAction("Details", "Threads", new { categoryAlias = viewModel.CategoryAlias, threadId = threadId })); } else { ViewBag.ErrorMessage = ModelState.ModelErrorsToString(); return(View(viewModel)); } }