Exemplo n.º 1
0
        public CommentEditReturnModel EditComment(int commentId, string content, string currUserId)
        {
            CommentEditReturnModel ret = new CommentEditReturnModel();
            Comment cmd = _dbSet.FirstOrDefault(p => p.Id == commentId && p.AuthorId == currUserId);

            if (cmd == null)
            {
                ret.IsActionSucceed = false;
                return(ret);
            }
            else
            {
                cmd.Content = content;
                _dbSet.Update(cmd);
                if (_context.SaveChanges() != 0)
                {
                    // return necessary information
                    ret.Comment = new ReviewCommentDTO()
                    {
                        Id      = cmd.Id,
                        Content = TagHelpers.RemoveUnwantedTags(cmd.Content)
                    };
                    ret.IsActionSucceed = true;
                }
                return(ret);
            }
        }
Exemplo n.º 2
0
        public override string RenderMjml()
        {
            var height = GetAttribute("height");

            if (string.IsNullOrWhiteSpace(height))
            {
                return(RenderContent());
            }

            return($@"
                {TagHelpers.ConditionalTag($@"
                    <table role=""presentation"" border=""0"" cellpadding=""0"" cellspacing=""0"">
                        <tr>
                            <td height=""{height}"" style=""vertical-align:top;height:{height};"">
                ")}

                {this.RenderContent()}

                {TagHelpers.ConditionalTag($@"
                            </td>
                        </tr>
                    </table>
                ")}
            ");
        }
Exemplo n.º 3
0
        async public void Has_Relations()
        {
            // Assign
            var result = true;
            var tag    = new Tag
            {
                FaqTags = new List <FaqTag>
                {
                    new FaqTag(),
                },
            };

            DbContextFake.SeedDb <IntranetApiContext>(c => c.Tags.Add(tag));

            using (var context = DbContextFake.GetDbContext <IntranetApiContext>())
            {
                // Act
                result = await TagHelpers.HasNoRelatedEntities(context.Tags.SingleOrDefault(), context);
            }

            using (var context = DbContextFake.GetDbContext <IntranetApiContext>())
            {
                // Assert
                Assert.False(result);
            }
        }
Exemplo n.º 4
0
        public MemoryCacheBenchmark()
        {
            var current = new DirectoryInfo(AppContext.BaseDirectory);

            while (current != null && !File.Exists(Path.Combine(current.FullName, "taghelpers.json")))
            {
                current = current.Parent;
            }

            var tagHelperFilePath = Path.Combine(current.FullName, "taghelpers.json");
            var tagHelperBuffer   = File.ReadAllBytes(tagHelperFilePath);

            // Deserialize from json file.
            var serializer = new JsonSerializer();

            serializer.Converters.Add(new TagHelperDescriptorJsonConverter());
            using (var stream = new MemoryStream(tagHelperBuffer))
                using (var reader = new JsonTextReader(new StreamReader(stream)))
                {
                    TagHelpers      = serializer.Deserialize <IReadOnlyList <TagHelperDescriptor> >(reader);
                    TagHelperHashes = TagHelpers.Select(th => th.GetHashCode()).ToList();
                }

            // Set cache size to 400 so anything more then that will force compacts
            Cache = new MemoryCache <int, TagHelperDescriptor>(400);
        }
Exemplo n.º 5
0
        public override string RenderMjml()
        {
            var height = GetAttribute("height");

            if (string.IsNullOrWhiteSpace(height))
            {
                height = "20px";
            }

            return($@"
                {TagHelpers.ConditionalTag($@"
                    <table role=""presentation"" border=""0"" cellpadding=""0"" cellspacing=""0"">
                        <tr>
                            <td height=""{CssUnitParser.Parse(height).Value}"" style=""vertical-align:top;height:{height};"">
                ")}

                <div {HtmlAttributes(new Dictionary<string, string> {
                        { "style", "div"}
                     })}
                >
                    &nbsp;
                </div>

                {TagHelpers.ConditionalTag($@"
                            </td>
                        </tr>
                    </table>
                ")}
            ");
        }
Exemplo n.º 6
0
        public async Task <IActionResult> DeleteConfirmed(int id)
        {
            var faq = await _context.Faqs
                      .Include(f => f.FaqTags)
                      .ThenInclude(ft => ft.Tag)
                      .Include(f => f.Category)
                      .ThenInclude(c => c.Faqs)
                      .SingleOrDefaultAsync(f => f.Id == id);

            if (faq.IsNull())
            {
                return(NotFound());
            }

            _context.Remove(faq);

            // If the category has no more related entities then delete the category as well
            if (await CategoryHelpers.HasNoRelatedEntities(faq.Category, _context, ignore: faq))
            {
                _context.Remove(faq.Category);
            }

            // If the tags has no more related entities then delete the category as well
            foreach (var tag in faq.FaqTags.Select(ft => ft.Tag))
            {
                if (await TagHelpers.HasNoRelatedEntities(tag, _context, ignore: faq.FaqTags))
                {
                    _context.Remove(tag);
                }
            }

            await _context.SaveChangesAsync();

            return(RedirectToAction("Index"));
        }
Exemplo n.º 7
0
        protected override DriverResult Editor(TagsPart part, IUpdateModel updater, dynamic shapeHelper)
        {
            var model = new EditTagsViewModel();

            updater.TryUpdateModel(model, Prefix, null, null);

            var tagNames = TagHelpers.ParseCommaSeparatedTagNames(model.Tags);

            // as the tag names are used in the route directly, prevent them from having ASP.NET disallowed chars
            // c.f., http://www.hanselman.com/blog/ExperimentsInWackinessAllowingPercentsAnglebracketsAndOtherNaughtyThingsInTheASPNETIISRequestURL.aspx

            var disallowedTags = tagNames.Where(x => DisalowedChars.Intersect(x).Any()).ToList();

            if (disallowedTags.Any())
            {
                _notifier.Warning(T("The tags \"{0}\" could not be added because they contain forbidden chars: {1}", String.Join(", ", disallowedTags), String.Join(", ", DisalowedChars)));
                tagNames = tagNames.Where(x => !disallowedTags.Contains(x)).ToList();
            }

            if (part.ContentItem.Id != 0)
            {
                _tagService.UpdateTagsForContentItem(part.ContentItem, tagNames);
            }

            return(ContentShape("Parts_Tags_Edit",
                                () => shapeHelper.EditorTemplate(TemplateName: TemplateName, Model: model, Prefix: Prefix)));
        }
Exemplo n.º 8
0
        public async Task <Post> Create(CreatePostDto dto)
        {
            User user = await _sessionService.GetUser();

            Validate("create", dto.Content, dto.Title, user);

            var post = new Post
            {
                Title          = dto.Title,
                Content        = dto.Content,
                CreationTime   = DateTime.Now,
                LastUpdateTime = DateTime.Now,
                AuthorId       = user.Id,
                Likes          = 0,
                Dislikes       = 0,
                Tags           = TagHelpers.GetTagsFromText(dto.Content),
                Id             = Guid.NewGuid().ToString()
            };

            await _postRepository.Create(post);

            _logger.LogInformation($"Post {post.Id} has been created");

            await _tagRepository.Create(post.Tags.Select(x => new Tag
            {
                Name = x,
                PostsNumber = 1
            }).ToArray());

            _logger.LogInformation("Tags have been added");

            return(post);
        }
Exemplo n.º 9
0
        public void Attach_Old_Tag()
        {
            // Assign
            var tags = new[] { "Test" };
            var tag  = new Tag
            {
                Id   = 65,
                Name = "Test",
            };

            var news = new News();
            var faq  = new Faq();

            // Act
            TagHelpers.SetTags <News, NewsTag>(tags, news, new List <Tag> {
                tag
            });
            TagHelpers.SetTags <Faq, FaqTag>(tags, faq, new List <Tag> {
                tag
            });

            // Assert
            Assert.Equal(0, news.NewsTags.Single().NewsId);
            Assert.Equal(0, faq.FaqTags.Single().FaqId);
            Assert.Equal(65, news.NewsTags.Single().Tag.Id);
            Assert.Equal(65, faq.FaqTags.Single().Tag.Id);
        }
Exemplo n.º 10
0
    public override void FormatNode(IntermediateNodeFormatter formatter)
    {
        formatter.WriteContent(TagName);

        formatter.WriteProperty(nameof(TagHelpers), string.Join(", ", TagHelpers.Select(t => t.DisplayName)));
        formatter.WriteProperty(nameof(TagMode), TagMode.ToString());
        formatter.WriteProperty(nameof(TagName), TagName);
    }
Exemplo n.º 11
0
        public async Task <IActionResult> Edit(int id, [Bind("Id,Category,Title,Description,Tags")] PolicyViewModel policyVM)
        {
            if (id != policyVM?.Id)
            {
                return(NotFound());
            }

            if (ModelState.IsValid)
            {
                var entity = await _context.Policies
                             .Include(f => f.Category)
                             .SingleOrDefaultAsync(c => c.Id == id);

                if (entity.IsNull())
                {
                    return(NotFound());
                }

                if (!entity.Category.Title.Equals(policyVM.Category.Title, StringComparison.OrdinalIgnoreCase))
                {
                    var category = await _context.Categories.SingleOrDefaultAsync(c => c.Title.Equals(policyVM.Category.Title, StringComparison.OrdinalIgnoreCase));

                    if (category.IsNotNull())
                    {
                        entity.Category = category;
                    }
                    else
                    {
                        entity.Category = new Category
                        {
                            Title = policyVM.Category.Title,
                            Url   = CustomUrlHelper.URLFriendly(policyVM.Category.Title),
                        };
                    }
                }

                entity.Title       = policyVM.Title;
                entity.Description = policyVM.Description;

                var file = Request.Form.Files.SingleOrDefault();

                if (file.IsNotNull())
                {
                    var filename = await _fileStorageService.SetBlobAsync(file);

                    entity.FileUrl = filename;
                }

                var tags           = TagHelpers.GetTagsFromString(policyVM.Tags);
                var allTagEntities = GetAllTagEntitiesInternal(policyVM, tags);
                TagHelpers.SetTags <Policy, PolicyTag>(tags, entity, allTagEntities);

                await _context.SaveChangesAsync();

                return(RedirectToAction("Details", new { Id = entity.Id }));
            }
            return(View(policyVM));
        }
            public bool TryWrite(object obj, Span <byte> span, bool _, out int bytesWritten)
            {
                if (!(_property.GetValue(obj) is CustomObject co))
                {
                    bytesWritten = 0;
                    return(true);
                }

                return(TagHelpers.TryWriteString(ThingEquals, co.Thing, span, out bytesWritten));
            }
Exemplo n.º 13
0
        public void Dont_Throw_On_Null()
        {
            // Assign

            // Act
            TagHelpers.SetTags <News, NewsTag>(null, null, null);
            TagHelpers.GetTagsFromString(null);

            // Assert
        }
    public void ToBytesHelperTest()
    {
        var tag   = new ILTagILInt(23);
        var bytes = TagHelpers.ToBytesHelper((s) => s.EncodeILInt(23));

        Assert.IsNotNull(bytes);
        Assert.That(tag.EncodedBytes, Is.EquivalentTo(bytes));
        var e = Assert.Throws <ArgumentException>(() => TagHelpers.ToBytesHelper(null));

        Assert.AreEqual("serialize", e.ParamName);
    }
 protected override byte[] ToBytes(Dictionary <string, T> value)
 => TagHelpers.ToBytesHelper(s => {
     if (value != null)
     {
         s.ILIntEncode((ulong)value.Count);
         foreach (var pair in value)
         {
             s.EncodeString(pair.Key);
             EncodeValue(s, pair.Value);
         }
     }
 });
Exemplo n.º 16
0
        public async Task <IActionResult> Create([Bind("Id,Category,Title,Description,Tags")] PolicyViewModel policyVM)
        {
            if (ModelState.IsValid)
            {
                var category = await _context
                               .Categories
                               .SingleOrDefaultAsync(c => c.Title.Equals(policyVM.Category.Title, StringComparison.OrdinalIgnoreCase));

                if (category.IsNotNull())
                {
                    policyVM.Category = category;
                }
                else
                {
                    policyVM.Category = new Category
                    {
                        Title = policyVM.Category.Title,
                        Url   = CustomUrlHelper.URLFriendly(policyVM.Category.Title),
                    };
                }

                var policy = new Policy
                {
                    Category    = policyVM.Category,
                    Description = policyVM.Description,
                    FileUrl     = policyVM.FileUrl,
                    Title       = policyVM.Title,
                    Url         = CustomUrlHelper.URLFriendly(policyVM.Title),
                };

                var file = Request.Form.Files.SingleOrDefault();

                if (file.IsNotNull())
                {
                    var filename = await _fileStorageService.SetBlobAsync(file);

                    policy.FileUrl = filename;
                }

                var tags           = TagHelpers.GetTagsFromString(policyVM.Tags);
                var allTagEntities = GetAllTagEntitiesInternal(policyVM, tags);
                TagHelpers.SetTags <Policy, PolicyTag>(tags, policy, allTagEntities);

                await _context.AddAsync(policy);

                await _context.SaveChangesAsync();

                return(RedirectToAction("Details", new { Id = policy.Id }));
            }
            ViewData["Categories"] = new SelectList(_context.Categories, nameof(Category.Id), nameof(Category.Title));
            return(View(policyVM));
        }
Exemplo n.º 17
0
        public CommentAddReturnModel PublishComment(string content, string currUserId, int reviewId = -1)
        {
            CommentAddReturnModel ret = new CommentAddReturnModel();

            if (reviewId == -1)
            {
                ret.IsActionSucceed = false;
                return(ret);
            }
            Review review = _context.Set <Review>().FirstOrDefault(f => f.Id == reviewId);

            if (review == null)
            {
                ret.IsActionSucceed = false;
                return(ret);
            }
            ret.PostId         = review.PostId.Value;
            ret.ReviewAuthorId = review.UserId;
            Comment comment = new Comment()
            {
                DateUtcAdd      = DateTime.UtcNow,
                DateUtcModified = DateTime.UtcNow,
                ReviewId        = reviewId,
                AuthorId        = currUserId,
                Content         = TagHelpers.RemoveUnwantedTags(content),
            };

            _dbSet.Add(comment);
            if (_context.SaveChanges() != 0)
            {
                ret.Comment = new ReviewCommentDTO
                {
                    Id = comment.Id,
                    DateUtcPublished = comment.DateUtcAdd,
                    Content          = comment.Content,
                    DislikeCount     = 0,
                    LikeCount        = 0,
                    ReviewId         = reviewId,
                    UserInfo         = new UserInfoExtraSmall()
                    {
                        AppUserId    = currUserId,
                        ProfileImage = _userImageSettings.UserImageUrlTemplate.Replace("{#appUserId}", currUserId)
                    },
                    LikeStatus = LikeStatus.None,
                    AuthorId   = currUserId
                };
                ret.IsActionSucceed = true;
                return(ret);
            }
            ret.IsActionSucceed = false;
            return(ret);
        }
Exemplo n.º 18
0
        public void Return_Array()
        {
            // Assign
            var tagsInput = "Test, test2; test-again";

            // Act
            var tags = TagHelpers.GetTagsFromString(tagsInput);

            // Assert
            Assert.Contains("Test", tags);
            Assert.Contains("test2", tags);
            Assert.Contains("test-again", tags);
        }
Exemplo n.º 19
0
        public void Attach_Old_Relationship_And_Create_New_Tags()
        {
            // Assign
            var tags = new[] { "Test", "Test2" };

            var faq = new Faq {
                Id = 77
            };
            var news = new News {
                Id = 33
            };

            var faqTag = new FaqTag {
                FaqId = 77, Faq = faq, TagId = 65
            };
            var newsTag = new NewsTag {
                NewsId = 33, News = news, TagId = 65
            };

            var tag = new Tag
            {
                Id       = 65,
                Name     = "Test",
                NewsTags = new List <NewsTag> {
                    newsTag
                },
                FaqTags = new List <FaqTag> {
                    faqTag
                },
            };

            faqTag.Tag  = tag;
            newsTag.Tag = tag;

            // Act
            TagHelpers.SetTags <News, NewsTag>(tags, news, new List <Tag> {
                tag
            });
            TagHelpers.SetTags <Faq, FaqTag>(tags, faq, new List <Tag> {
                tag
            });

            // Assert
            Assert.Equal(33, news.NewsTags.Single(nt => nt.Tag.Name == "Test").NewsId);
            Assert.Equal(77, faq.FaqTags.Single(nt => nt.Tag.Name == "Test").FaqId);
            Assert.Equal(65, faq.FaqTags.Single(nt => nt.Tag.Name == "Test").TagId);
            Assert.Equal(65, news.NewsTags.Single(nt => nt.Tag.Name == "Test").TagId);
            Assert.Equal(0, faq.FaqTags.Single(nt => nt.Tag.Name == "Test2").Tag.Id);
            Assert.Equal(0, news.NewsTags.Single(nt => nt.Tag.Name == "Test2").Tag.Id);
        }
Exemplo n.º 20
0
        public async Task <IActionResult> Edit(int id, [Bind("Id,Category,Question,Answer,Url")] FaqViewModel faqVM)
        {
            if (id != faqVM?.Id)
            {
                return(NotFound());
            }

            if (ModelState.IsValid)
            {
                var entity = await _context.Faqs
                             .Include(f => f.Category)
                             .SingleOrDefaultAsync(c => c.Id == id);

                if (entity.IsNull())
                {
                    return(NotFound());
                }

                if (!entity.Category.Title.Equals(faqVM.Category.Title, StringComparison.OrdinalIgnoreCase))
                {
                    var category = await _context.Categories.SingleOrDefaultAsync(c => c.Title.Equals(faqVM.Category.Title, StringComparison.OrdinalIgnoreCase));

                    if (category.IsNotNull())
                    {
                        entity.Category = category;
                    }
                    else
                    {
                        entity.Category = new Category
                        {
                            Title = faqVM.Category.Title,
                            Url   = CustomUrlHelper.URLFriendly(faqVM.Category.Title),
                        };
                    }
                }

                entity.Answer   = faqVM.Answer;
                entity.Question = faqVM.Question;

                var tags           = TagHelpers.GetTagsFromString(faqVM.Tags);
                var allTagEntities = GetAllTagEntitiesInternal(faqVM, tags);
                TagHelpers.SetTags <Faq, FaqTag>(tags, entity, allTagEntities);

                await _context.SaveChangesAsync();

                return(RedirectToAction("Details", new { Id = entity.Id }));
            }
            return(View(faqVM));
        }
Exemplo n.º 21
0
        public void ProcessTags()
        {
            var jobsWithNoTags = _repository.GetAll()
                                 .Where(j => !j.Tags.Any() && !string.IsNullOrEmpty(j.Html)).ToList();

            var tags = _repository.GetAllTags().ToList();

            foreach (var job in jobsWithNoTags)
            {
                var html          = job.Html;
                var extractedTags = TagHelpers.ExtractTags(html, tags);

                _repository.UpdateTags(job.Id, extractedTags);
            }
        }
Exemplo n.º 22
0
        public void Create_New_Relationship()
        {
            // Assign
            var tags = new[] { "Test" };
            var news = new News();
            var faq  = new Faq();

            // Act
            TagHelpers.SetTags <News, NewsTag>(tags, news, null);
            TagHelpers.SetTags <Faq, FaqTag>(tags, faq, null);

            // Assert
            Assert.Contains("Test", news.NewsTags.Select(nt => nt.Tag.Name));
            Assert.Contains("Test", faq.FaqTags.Select(nt => nt.Tag.Name));
        }
 protected override byte[] ToBytes(DataField value)
 => TagHelpers.ToBytesHelper(s => {
     s.EncodeUShort(Value.Version);
     s.EncodeILInt(Value.TagId);
     s.EncodeString(Value.Name);
     s.EncodeBool(false);
     s.EncodeBool(Value.IsOpaque.GetValueOrDefault());
     s.EncodeILInt(Value.ElementTagId.GetValueOrDefault());
     s.EncodeTagArray(Value.SubDataFields?.Select(df => new ILTagDataField(df)));
     s.EncodeByte((byte)value.Cast.GetValueOrDefault());
     s.EncodeUShort(Value.SerializationVersion);
     s.EncodeString(Value.Description);
     EncodeEnumeration(s, value.EnumerationDefinition);
     s.EncodeBool(Value.EnumerationAsFlags.GetValueOrDefault());
     s.EncodeBool(Value.IsDeprecated.GetValueOrDefault());
 });
Exemplo n.º 24
0
        public async Task <IActionResult> Add(TagView result)
        {
            if (await _tagService.CheckIfTagExist(result.Name))
            {
                ModelState.AddModelError("", "Tag o tej nazwie już istnieje");
            }

            if (!ModelState.IsValid)
            {
                return(View(result));
            }

            await _tagService.Create(TagHelpers.ConvertToModel(result));

            return(RedirectToAction("List"));
        }
Exemplo n.º 25
0
        protected override DriverResult Editor(TagsPart part, IUpdateModel updater, dynamic shapeHelper)
        {
            var model = new EditTagsViewModel();

            updater.TryUpdateModel(model, Prefix, null, null);

            var tagNames = TagHelpers.ParseCommaSeparatedTagNames(model.Tags);

            if (part.ContentItem.Id != 0)
            {
                _tagService.UpdateTagsForContentItem(part.ContentItem, tagNames);
            }

            return(ContentShape("Parts_Tags_Edit",
                                () => shapeHelper.EditorTemplate(TemplateName: TemplateName, Model: model, Prefix: Prefix)));
        }
Exemplo n.º 26
0
        public override string RenderMjml()
        {
            return($@"
                {TagHelpers.ConditionalTag($@"
                    <td {HtmlAttributes(new Dictionary<string, string> {
                        { "style", "td" },
                        { "class", CssHelper.SuffixCssClasses(GetAttribute("css-class"), "outlook") }
                    })}>
                ")}

                {RenderContent()}

                {TagHelpers.ConditionalTag($@"
                    </td>
                ")}
            ");
        }
Exemplo n.º 27
0
        public BaseReturnModel SaveUserSettings(ProfileSettingsPostViewModel model, string currUserId)
        {
            BaseReturnModel ret   = new BaseReturnModel();
            UserInfo        uInfo = _dbSet.FirstOrDefault(p => p.AppUserId == currUserId);

            uInfo.PrivacySetting = (UserPrivacySetting)model.SelectedPrivacySettings;
            uInfo.FollowSetting  = (UserFollowSetting)model.SelectedFollowSettings;
            uInfo.Name           = TagHelpers.RemoveUnwantedTags(model.Name);
            uInfo.Status         = TagHelpers.RemoveUnwantedTags(model.Status);
            // uInfo.UName = model.UName;
            uInfo.Surname = TagHelpers.RemoveUnwantedTags(model.Surname);
            _dbSet.Update(uInfo);
            if (!(_entityContext.SaveChanges() == 0))
            {
                ret.IsActionSucceed = true;
            }
            return(ret);
        }
Exemplo n.º 28
0
        async public void No_Relations()
        {
            // Assign
            var result = false;

            DbContextFake.SeedDb <IntranetApiContext>(c => c.Add(new Tag()));

            using (var context = DbContextFake.GetDbContext <IntranetApiContext>())
            {
                // Act
                result = await TagHelpers.HasNoRelatedEntities(context.Tags.SingleOrDefault(), context);
            }

            using (var context = DbContextFake.GetDbContext <IntranetApiContext>())
            {
                // Assert
                Assert.True(result);
            }
        }
Exemplo n.º 29
0
        public async Task <IActionResult> Create([Bind("Category,Question,Answer,Tags")] FaqViewModel faqVM)
        {
            if (ModelState.IsValid)
            {
                var category = await _context
                               .Categories
                               .SingleOrDefaultAsync(c => c.Title.Equals(faqVM.Category.Title, StringComparison.OrdinalIgnoreCase));

                if (category.IsNotNull())
                {
                    faqVM.Category = category;
                }
                else
                {
                    faqVM.Category = new Category
                    {
                        Title = faqVM.Category.Title,
                        Url   = CustomUrlHelper.URLFriendly(faqVM.Category.Title),
                    };
                }

                var faq = new Faq
                {
                    Answer   = faqVM.Answer,
                    Category = faqVM.Category,
                    Question = faqVM.Question,
                    Url      = CustomUrlHelper.URLFriendly(faqVM.Question),
                };

                var tags           = TagHelpers.GetTagsFromString(faqVM.Tags);
                var allTagEntities = GetAllTagEntitiesInternal(faqVM, tags);
                TagHelpers.SetTags <Faq, FaqTag>(tags, faq, allTagEntities);

                await _context.AddAsync(faq);

                await _context.SaveChangesAsync();

                return(RedirectToAction("Details", new { Id = faq.Id }));
            }
            ViewData["Categories"] = new SelectList(_context.Categories, nameof(Category.Id), nameof(Category.Title));
            return(View(faqVM));
        }
Exemplo n.º 30
0
        public async Task Update(string id, UpdatePostDto dto)
        {
            User user = await _sessionService.GetUser();

            Validate("modify", dto.Content, dto.Title, user);

            Post post = await _postRepository.GetById(id);

            if (post == null)
            {
                _logger.LogWarning($"Post {id} does not exist");
                throw HttpError.NotFound($"Post {id} does not exist");
            }

            if (post.AuthorId != user.Id)
            {
                _logger.LogWarning($"Post {id} does not belong to user");
                throw HttpError.Forbidden($"Post {id} does not belong to user");
            }

            post.Title          = dto.Title;
            post.Content        = dto.Content;
            post.LastUpdateTime = DateTime.Now;
            post.Tags           = TagHelpers.GetTagsFromText(dto.Content);

            bool success = await _postRepository.Update(post);

            if (!success)
            {
                _logger.LogWarning("Error during update post");
                throw HttpError.InternalServerError("");
            }

            await _tagRepository.Create(post.Tags.Select(x => new Tag
            {
                Name = x,
                PostsNumber = 1
            }).ToArray());

            _logger.LogInformation("Tags have been added");
        }