12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152 |
- package handler
- import (
- "database/sql"
- "github.com/dmitriygnatenko/internal/interfaces"
- "github.com/dmitriygnatenko/internal/mapper"
- "github.com/gofiber/fiber/v2"
- )
- const tagParam = "tag"
- const tagCacheKey = "tag"
- func TagHandler(sp interfaces.ServiceProvider) fiber.Handler {
- return func(ctx *fiber.Ctx) error {
- tagReq := ctx.Params(tagParam)
- 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": "Тег<br>" + tag.Tag,
- "articles": articlesDTO,
- }
- sp.GetCacheService().Set(tagCacheKey+tagReq, renderData)
- }
- return ctx.Render("tag", renderData, "_layout")
- }
- }
|