Esempio n. 1
0
        public void UpdateThreadTags(ThreadUpdateTags input)
        {
            // check user and permissions
            Session.EnsureAuthenticated();

            var threadModel = _threadRepository.Find(input.Id);
            var tags        = _threadRepository.GetAll().Where(x => x.Id == input.Id)
                              .SelectMany(x => x.Tags).ToList();

            // tags
            if (input.Tags != null && input.Tags.Length > 0)
            {
                // remove removed tags
                tags.RemoveAll(x => input.Tags.Select(y => y.Id).Contains(x.TagId) == false);

                // add new existing tags
                var newExistingTags = input.Tags.Where(x => x.Id.HasValue && tags.Select(y => y.TagId).Contains(x.Id.Value) == false);
                tags.AddRange(newExistingTags.Select(x => new Entities.ThreadTag
                {
                    Id    = Guid.NewGuid(),
                    TagId = x.Id.Value,
                }));

                // add new not-existing tags
                var newNotExistingTags        = input.Tags.Where(x => x.Id.HasValue == false);
                var newNotExistingTagEntities = newNotExistingTags
                                                .Select(x => new Entities.Tag
                {
                    Id              = Guid.NewGuid(),
                    CreatedAt       = DateTime.UtcNow,
                    CreatedByUserId = Session.AuthenticatedUserId.Value,
                    Name            = x.Name
                })
                                                .ToArray();
                _tagRepository.BatchInsert(newNotExistingTagEntities);
                tags.AddRange(newNotExistingTagEntities.Select(x => new Entities.ThreadTag
                {
                    Id    = Guid.NewGuid(),
                    TagId = x.Id,
                }));
            }
            else
            {
                tags.RemoveAll(x => true);
            }

            threadModel.Tags            = tags;
            threadModel.UpdatedAt       = DateTime.UtcNow;
            threadModel.UpdatedByUserId = Session.AuthenticatedUserId.Value;
            _threadRepository.Update(threadModel);
        }
Esempio n. 2
0
 public IActionResult UpdateThreadTags([FromBody] ThreadUpdateTags input)
 {
     _threadService.UpdateThreadTags(input);
     return(Ok());
 }