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