main_page.go 1.1 KB

12345678910111213141516171819202122232425262728293031323334
  1. package handler
  2. import (
  3. "github.com/dmitriygnatenko/internal/interfaces"
  4. "github.com/dmitriygnatenko/internal/mapper"
  5. "github.com/gofiber/fiber/v2"
  6. )
  7. const allPreviewArticlesCacheKey = "all-preview-articles"
  8. func MainPageHandler(sp interfaces.ServiceProvider) fiber.Handler {
  9. return func(ctx *fiber.Ctx) error {
  10. renderData, found := sp.GetCacheService().Get(allPreviewArticlesCacheKey)
  11. if !found {
  12. articles, err := sp.GetArticleRepository().GetAllPreview(ctx.Context())
  13. if err != nil {
  14. return err
  15. }
  16. renderData = fiber.Map{
  17. "headTitle": "От слона к суслику - статьи про PHP, Go, алгоритмы",
  18. "headDescription": "список статей",
  19. "headKeywords": "Дмитрий Гнатенко, программист, PHP, Go, Golang, программирование, статьи, блог",
  20. "pageTitle": "Список статей",
  21. "articles": mapper.ConvertArticlePreviewModelsToDTO(articles),
  22. }
  23. sp.GetCacheService().Set(allPreviewArticlesCacheKey, renderData)
  24. }
  25. return ctx.Render("index", renderData, "_layout")
  26. }
  27. }