コード例 #1
0
        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"));
        }
コード例 #2
0
        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;
            }
        }