summaryrefslogtreecommitdiff
path: root/internal/router/handlers/lang-user.go
diff options
from:
to:
context:
space:
mode:
authorGravatar Saya Andy <145215889+SayaAndy@users.noreply.github.com> 2025-10-28 23:15:23 +0700
committerGravatar GitHub <noreply@github.com> 2025-10-28 23:15:23 +0700
commitbda4faeeed4d9859cfe8afd7952a751683d74bd8 (patch)
tree464c18fed0c21b63b65425f48a3a790229461058 /internal/router/handlers/lang-user.go
parentdd69b45d3a41be2b5c38892c3b107770a0f859f2 (diff)
parent1862f232eb70105340a91e74a5630c233a411bca (diff)
downloadweb-0.11.1.tar.gz
web-0.11.1.zip
v0.11.1 (#18)v0.11.1
- refactor: make structurized implementation of routes + separate identity of router - feat: update go to 1.25 - feat: update all dependencies - debug: display routes when debug logs turned on
Diffstat (limited to 'internal/router/handlers/lang-user.go')
-rw-r--r--internal/router/handlers/lang-user.go78
1 files changed, 78 insertions, 0 deletions
diff --git a/internal/router/handlers/lang-user.go b/internal/router/handlers/lang-user.go
new file mode 100644
index 0000000..db566fe
--- /dev/null
+++ b/internal/router/handlers/lang-user.go
@@ -0,0 +1,78 @@
+package handlers
+
+import (
+ "fmt"
+ "log/slog"
+
+ "github.com/SayaAndy/saya-today-web/internal/mailer"
+ "github.com/SayaAndy/saya-today-web/internal/router"
+ "github.com/gofiber/fiber/v2"
+)
+
+func init() {
+ router.Routes = append(router.Routes, &UserHandler{})
+}
+
+type UserHandler struct {
+ router.BasicHandler
+}
+
+func (r *UserHandler) Filter() (method string, path string) {
+ return "GET", "/:lang/user"
+}
+
+func (r *UserHandler) IsTemplated() bool {
+ return true
+}
+
+func (r *UserHandler) TemplatesToInject() []string {
+ return []string{"views/pages/user-page.html"}
+}
+
+func (r *UserHandler) ToCache() router.CacheSetting {
+ return router.Disabled
+}
+
+func (r *UserHandler) ToValidateLang() router.LangSetting {
+ return router.InPath
+}
+
+func (r *UserHandler) RenderBody(c *fiber.Ctx, supplements *router.Supplements, lang string, templateMap fiber.Map) (statusCode int, err error) {
+ templateMap["Title"] = supplements.Localization[lang].UserProfile.Header
+
+ email, _, err := supplements.Mailer.GetInfo(supplements.Mailer.GetHash(c.IP()))
+ if err != nil {
+ slog.Error("get info from mailer about a client", slog.String("error", err.Error()))
+ }
+
+ tagsArray, err := getTags(supplements.B2Client, lang)
+ if err != nil {
+ return fiber.ErrInternalServerError.Code, fmt.Errorf("failed to get the available tags")
+ }
+
+ subscriptionType, tags, err := supplements.Mailer.GetSubscriptions(c.IP())
+ if err != nil {
+ return fiber.ErrInternalServerError.Code, fmt.Errorf("failed to get the user subscriptions")
+ }
+
+ switch subscriptionType {
+ case mailer.None:
+ templateMap["TagsPicked"] = "none"
+ case mailer.All:
+ templateMap["TagsPicked"] = "all"
+ case mailer.Specific:
+ templateMap["TagsPicked"] = "specific"
+ }
+
+ templateMap["TagsPickedList"] = tags
+
+ templateMap["Email"] = email
+ templateMap["EmailCode"] = c.Query("email_code")
+ templateMap["ExistingTags"] = tagsArray
+ return fiber.StatusOK, nil
+}
+
+func (r *UserHandler) RenderHeader(c *fiber.Ctx, supplements *router.Supplements, lang string, templateMap fiber.Map) (statusCode int, err error) {
+ templateMap["Title"] = supplements.Localization[lang].UserProfile.Header
+ return fiber.StatusOK, nil
+}