summaryrefslogtreecommitdiffci
path: root/internal/router/handlers/lang-user.go
diff refs
from: back
to: back
| flip
diff options
context:
space:
mode:
Diffstat (limited to 'internal/router/handlers/lang-user.go')
-rw-r--r--internal/router/handlers/lang-user.go89
1 files changed, 89 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..085a9aa
--- /dev/null
+++ b/internal/router/handlers/lang-user.go
@@ -0,0 +1,89 @@
+package handlers
+
+import (
+ "fmt"
+ "log/slog"
+
+ "github.com/SayaAndy/saya-today-web/internal/mailer"
+ "github.com/SayaAndy/saya-today-web/internal/router"
+ "github.com/SayaAndy/saya-today-web/l10n"
+ "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) AddMeta(c *fiber.Ctx, supplements *router.Supplements, lang string, templateMap fiber.Map) (meta []router.MetaField, err error) {
+ return []router.MetaField{
+ {Name: "robots", Content: "noindex,nofollow"},
+ {Property: "og:title", Content: l10n.T.GetPath(lang, "UserProfile", "Header").(string)},
+ {Property: "og:description", Content: l10n.T.GetPath(lang, "UserProfile", "Description").(string)},
+ {Property: "og:url", Content: fmt.Sprintf("%s/%s/user", templateMap["CanonicalEndpoint"], lang)},
+ {Property: "og:type", Content: "website"},
+ }, nil
+}
+
+func (r *UserHandler) RenderBody(c *fiber.Ctx, supplements *router.Supplements, lang string, templateMap fiber.Map) (statusCode int, err error) {
+ templateMap["Title"] = l10n.T.GetPath(lang, "UserProfile", "Header").(string)
+
+ 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.BlogClient, 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"] = l10n.T.GetPath(lang, "UserProfile", "Header").(string)
+ return fiber.StatusOK, nil
+}