package handler import ( "database/sql" "github.com/gofiber/fiber/v2" "git.dmitriygnatenko.ru/dima/dmitriygnatenko-v2/internal/mapper" ) const tagParam = "tag" const tagCacheKey = "tag" func TagHandler( cacheService CacheService, articleRepository ArticleRepository, tagRepository TagRepository, ) fiber.Handler { return func(fctx *fiber.Ctx) error { ctx := fctx.Context() tagReq := fctx.Params(tagParam) renderData, found := cacheService.Get(tagCacheKey + tagReq) if !found { tag, err := tagRepository.GetByURL(ctx, tagReq) if err != nil { if err == sql.ErrNoRows { return fiber.ErrNotFound } return err } articles, err := articleRepository.GetPreviewByTagID(ctx, tag.ID) if err != nil { return err } renderData = fiber.Map{ "headTitle": "От слона к суслику - статьи про PHP, Go, алгоритмы", "headDescription": "статьи с тегом " + tag.Tag, "headKeywords": "программирование, статьи, блог, " + tag.Tag, "pageTitle": "Тег
" + tag.Tag, "articles": mapper.ToArticlePreviewDTOList(articles), } cacheService.Set(tagCacheKey+tagReq, renderData) } return fctx.Render("tag", renderData, "_layout") } }