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)); } }