reprogl

Форк
0
/
esi.go 
75 строк · 1.9 Кб
1
package handlers
2

3
import (
4
	"fmt"
5
	"net/http"
6
	"strconv"
7
	"time"
8

9
	"github.com/go-chi/chi/v5"
10
	"xelbot.com/reprogl/container"
11
	"xelbot.com/reprogl/models/repositories"
12
	"xelbot.com/reprogl/views"
13
)
14

15
func CategoriesFragment(app *container.Application) http.HandlerFunc {
16
	return func(w http.ResponseWriter, _ *http.Request) {
17
		categoryRepo := repositories.CategoryRepository{DB: app.DB}
18
		categories, err := categoryRepo.GetCategoryTree()
19
		if err != nil {
20
			app.ServerError(w, err)
21

22
			return
23
		}
24

25
		templateData := &views.FragmentCategoriesData{Categories: categories}
26

27
		cacheControl(w, container.DefaultEsiTTL)
28
		err = views.WriteTemplate(w, "categories.gohtml", templateData)
29
		if err != nil {
30
			app.ServerError(w, err)
31
		}
32
	}
33
}
34

35
func RecentPostsFragment(app *container.Application) http.HandlerFunc {
36
	return func(w http.ResponseWriter, r *http.Request) {
37
		articleId, err := strconv.Atoi(chi.URLParam(r, "article_id"))
38
		if err != nil {
39
			app.ServerError(w, err)
40

41
			return
42
		}
43

44
		repo := repositories.ArticleRepository{DB: app.DB}
45
		articles, err := repo.GetRecentPostsCollection(articleId)
46
		if err != nil {
47
			app.ServerError(w, err)
48

49
			return
50
		}
51

52
		templateData := &views.FragmentRecentPostsData{RecentPosts: articles}
53

54
		cacheControl(w, container.DefaultEsiTTL)
55
		err = views.WriteTemplate(w, "recent-posts.gohtml", templateData)
56
		if err != nil {
57
			app.ServerError(w, err)
58
		}
59
	}
60
}
61

62
func DaysOfWarCounter(w http.ResponseWriter, r *http.Request) {
63
	start, _ := time.ParseInLocation("2006-01-02", "2022-02-24", time.Local)
64
	now := time.Now()
65

66
	days := 1 + (now.Unix()-start.Unix())/(24*3600)
67
	response := fmt.Sprintf("<!-- War in Ukraine: Thu, 24 Feb 2022 05:00:00 +0200, %d days of war -->", days)
68

69
	w.Header().Set("Cache-Control", "public")
70

71
	expires, _ := time.ParseInLocation(time.DateTime, now.Format(time.DateOnly)+" 23:59:59", time.Local)
72
	setExpires(w, expires)
73
	w.Header().Set("Content-Type", "text/plain")
74
	w.Write([]byte(response))
75
}
76

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.