main_page.go 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839
  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. articlesDTO, err := mapper.ConvertArticlePreviewModelsToDTO(articles)
  17. if err != nil {
  18. return err
  19. }
  20. renderData = fiber.Map{
  21. "headTitle": "От слона к суслику - статьи про PHP, Go, алгоритмы",
  22. "headDescription": "список статей",
  23. "headKeywords": "Дмитрий Гнатенко, программист, PHP, Go, Golang, программирование, статьи, блог",
  24. "pageTitle": "Список статей",
  25. "articles": articlesDTO,
  26. }
  27. sp.GetCacheService().Set(allPreviewArticlesCacheKey, renderData)
  28. }
  29. return ctx.Render("index", renderData, "_layout")
  30. }
  31. }