public async Task <IActionResult> CreateTopic(ForumIndexViewModel model) { model.TopicGroups = topicGroupsRepository.FindAll(); if (string.IsNullOrWhiteSpace(model.NewTopic.Title)) { ModelState.AddModelError <ForumIndexViewModel>(m => m.NewTopic.Title, "Zadejte název tématu."); return(View("Index", model)); } if (string.IsNullOrWhiteSpace(model.NewTopic.Info)) { ModelState.AddModelError <ForumIndexViewModel>(m => m.NewTopic.Info, "Zadejte informace o novém tématu."); return(View("Index", model)); } if (string.IsNullOrWhiteSpace(model.SelectedTopicGroup)) { ModelState.AddModelError <ForumIndexViewModel>(m => m.SelectedTopicGroup, "Vyberte skupinu témat."); return(View("Index", model)); } int id = Convert.ToInt32(model.SelectedTopicGroup); var topicGroup = await topicGroupsRepository.FindByIdAsync(id); if (topicGroup == null) { Console.WriteLine("GroupNull"); TempData.AddErrorMessage("Do této skupiny nemůžete přidat nové téma."); return(View("Index", model)); } if (topicGroup.Topics.Any(t => t.Title.Trim() == model.NewTopic.Title.Trim())) { ModelState.AddModelError <ForumIndexViewModel>(m => m.NewTopic.Title, "Téma s tímto názvem již v této skupině existuje."); return(View("Index", model)); } Console.WriteLine("Creating"); model.NewTopic.Created = DateTime.Now; model.NewTopic.User = await userManager.GetUserAsync(User); model.NewTopic.TopicGroup = topicGroup; await topicsRepository.CreateAsync(model.NewTopic); return(RedirectToAction("Index")); }
public async Task <Guid> Handle(CreateTopicCommand request, CancellationToken cancellationToken) { var topic = _mapper.Map <Topic>(request); var options = _mapper.Map <List <Option> >(request.AddOptionModels); try { var _ = options.ToDictionary(k => k.Name, v => string.Empty); } catch (ArgumentException) { throw new ArgumentException("Each option should be different"); } foreach (var opt in options) { opt.TopicId = topic.Id; } await using var transaction = _databaseTransaction.BeginTransaction(); try { await _topicsRepository.CreateAsync(topic); await _optionsRepository.CreateRangeAsync(options); transaction.Commit(); _logger.LogInformation("{Message} {TopicId} {TopicName} {CreatedBy}", "Created topic", topic.Id, topic.Title, topic.User.UserName); return(topic.Id); } catch (Exception) { transaction.Rollback(); throw; } }