Diffstat (limited to 'internal/router/handlers')
| -rw-r--r-- | internal/router/handlers/lang-blog-title.go | 51 | ||||
| -rw-r--r-- | internal/router/handlers/lang-blog.go | 17 | ||||
| -rw-r--r-- | internal/router/handlers/lang-map.go | 16 | ||||
| -rw-r--r-- | internal/router/handlers/lang-user.go | 10 | ||||
| -rw-r--r-- | internal/router/handlers/lang.go | 18 | ||||
| -rw-r--r-- | internal/router/handlers/robots.txt.go | 48 | ||||
| -rw-r--r-- | internal/router/handlers/root.go | 14 | ||||
| -rw-r--r-- | internal/router/handlers/sitemap.xml.go | 79 |
8 files changed, 1 insertions, 252 deletions
diff --git a/internal/router/handlers/lang-blog-title.go b/internal/router/handlers/lang-blog-title.go index 5bfc6e7..0f4f564 100644 --- a/internal/router/handlers/lang-blog-title.go +++ b/internal/router/handlers/lang-blog-title.go @@ -46,57 +46,6 @@ func (r *BlogPageHandler) ToValidateLang() router.LangSetting { return router.InPath } -func (r *BlogPageHandler) SitemapInfo(supplements *router.Supplements) []router.SitemapInfo { - sitemapInfo := []router.SitemapInfo{} - - pages, err := supplements.B2Client.Scan("") - if err != nil { - return sitemapInfo - } - - for _, page := range pages { - sitemapInfo = append(sitemapInfo, router.SitemapInfo{ - Loc: "/" + page.Lang + "/blog/" + page.FileName, - LastModified: page.ModifiedTime, - Priority: 1.0, - }) - } - - return sitemapInfo -} - -func (r *BlogPageHandler) AddMeta(c *fiber.Ctx, supplements *router.Supplements, lang string, templateMap fiber.Map) (meta []router.MetaField, err error) { - metadata, _, err := supplements.B2Client.ReadFrontmatter(lang + "/" + c.Params("title") + ".md") - if err != nil { - return nil, fmt.Errorf("failed to read frontmatter of the desired blog post: %w", err) - } - - return []router.MetaField{ - {Property: "og:title", Content: metadata.Title}, - {Property: "og:description", Content: fmt.Sprintf("%s [%s]", metadata.ShortDescription, metadata.ActionDate)}, - {Property: "og:image", Content: fmt.Sprintf("https://f003.backblazeb2.com/file/sayana-photos/webp-320p/%s.webp", metadata.Thumbnail)}, - {Property: "og:url", Content: fmt.Sprintf("%s/%s/blog/%s", templateMap["CanonicalEndpoint"], lang, c.Params("title"))}, - {Property: "og:type", Content: "website"}, - {Name: "twitter:card", Content: "summary_large_image"}, - }, nil -} - -func (r *BlogPageHandler) AddLinkedData(c *fiber.Ctx, supplements *router.Supplements, lang string, templateMap fiber.Map) (ld map[string]any, err error) { - metadata, _, err := supplements.B2Client.ReadFrontmatter(lang + "/" + c.Params("title") + ".md") - if err != nil { - return nil, fmt.Errorf("failed to read frontmatter of the desired blog post: %w", err) - } - - return map[string]any{ - "@context": "https://schema.org", - "@type": "Article", - "headline": metadata.Title, - "description": fmt.Sprintf("%s [%s]", metadata.ShortDescription, metadata.ActionDate), - "author": map[string]string{"@type": "Person", "name": "Saya Andy"}, - "datePublished": metadata.PublishedTime.UTC().Format(time.RFC3339), - }, nil -} - func (r *BlogPageHandler) RenderBody(c *fiber.Ctx, supplements *router.Supplements, lang string, templateMap fiber.Map) (statusCode int, err error) { _, pathParts, _, err := router.GetPathFromReferer(c) if err != nil { diff --git a/internal/router/handlers/lang-blog.go b/internal/router/handlers/lang-blog.go index 709d3dc..e4c20c6 100644 --- a/internal/router/handlers/lang-blog.go +++ b/internal/router/handlers/lang-blog.go @@ -47,23 +47,6 @@ func (r *CatalogueHandler) ToValidateLang() router.LangSetting { return router.InPath } -func (r *CatalogueHandler) SitemapInfo(supplements *router.Supplements) []router.SitemapInfo { - sitemapInfo := []router.SitemapInfo{} - for _, lang := range supplements.AvailableLanguages { - sitemapInfo = append(sitemapInfo, router.SitemapInfo{Loc: "/" + lang.Name + "/blog", Priority: 0.3}) - } - return sitemapInfo -} - -func (r *CatalogueHandler) AddMeta(c *fiber.Ctx, supplements *router.Supplements, lang string, templateMap fiber.Map) (meta []router.MetaField, err error) { - return []router.MetaField{ - {Property: "og:title", Content: supplements.Localization[lang].BlogSearch.Header}, - {Property: "og:description", Content: supplements.Localization[lang].BlogSearch.Description}, - {Property: "og:url", Content: fmt.Sprintf("%s/%s/blog", templateMap["CanonicalEndpoint"], lang)}, - {Property: "og:type", Content: "website"}, - }, nil -} - func (r *CatalogueHandler) RenderBody(c *fiber.Ctx, supplements *router.Supplements, lang string, templateMap fiber.Map) (statusCode int, err error) { querySort := c.Query("sort") if querySort == "" { diff --git a/internal/router/handlers/lang-map.go b/internal/router/handlers/lang-map.go index 551b485..dbf1437 100644 --- a/internal/router/handlers/lang-map.go +++ b/internal/router/handlers/lang-map.go @@ -3,7 +3,6 @@ package handlers import ( "fmt" "log/slog" - "slices" "strconv" "strings" @@ -40,19 +39,8 @@ func (r *MapHandler) ToValidateLang() router.LangSetting { return router.InPath } -func (r *MapHandler) SitemapInfo(supplements *router.Supplements) []router.SitemapInfo { - sitemapInfo := []router.SitemapInfo{} - for _, lang := range supplements.AvailableLanguages { - sitemapInfo = append(sitemapInfo, router.SitemapInfo{Loc: "/" + lang.Name + "/map", Priority: 0.3}) - } - return sitemapInfo -} - func (r *MapHandler) Render(c *fiber.Ctx, supplements *router.Supplements, lang string, templateMap fiber.Map) (statusCode int, err error) { pages, err := supplements.B2Client.Scan(lang + "/") - slices.SortFunc(pages, func(a *b2.BlogPage, b *b2.BlogPage) int { - return a.Metadata.PublishedTime.Compare(b.Metadata.PublishedTime) - }) status := fiber.StatusOK if err != nil { slog.Error("received an error while scanning b2 pages", @@ -64,7 +52,6 @@ func (r *MapHandler) Render(c *fiber.Ctx, supplements *router.Supplements, lang } type MapMarker struct { - Index int `json:"Index"` Title string `json:"Title"` PageLink string `json:"PageLink"` Lat float64 `json:"Lat"` @@ -74,7 +61,7 @@ func (r *MapHandler) Render(c *fiber.Ctx, supplements *router.Supplements, lang } mapMarkers := make([]*MapMarker, 0, len(pages)) - for i, page := range pages { + for _, page := range pages { geolocationParts := strings.Split(page.Metadata.Geolocation, " ") if len(geolocationParts) < 2 { continue @@ -91,7 +78,6 @@ func (r *MapHandler) Render(c *fiber.Ctx, supplements *router.Supplements, lang } mapMarkers = append(mapMarkers, &MapMarker{ - Index: i, Title: page.Metadata.Title, PageLink: fmt.Sprintf("/%s/blog/%s", lang, page.FileName), Lat: x, diff --git a/internal/router/handlers/lang-user.go b/internal/router/handlers/lang-user.go index eae1685..db566fe 100644 --- a/internal/router/handlers/lang-user.go +++ b/internal/router/handlers/lang-user.go @@ -37,16 +37,6 @@ 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: supplements.Localization[lang].UserProfile.Header}, - {Property: "og:description", Content: supplements.Localization[lang].UserProfile.Description}, - {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"] = supplements.Localization[lang].UserProfile.Header diff --git a/internal/router/handlers/lang.go b/internal/router/handlers/lang.go index c618353..fc4deb6 100644 --- a/internal/router/handlers/lang.go +++ b/internal/router/handlers/lang.go @@ -41,24 +41,6 @@ func (r *HomeHandler) ToValidateLang() router.LangSetting { return router.InPath } -func (r *HomeHandler) SitemapInfo(supplements *router.Supplements) []router.SitemapInfo { - sitemapInfo := []router.SitemapInfo{} - for _, lang := range supplements.AvailableLanguages { - sitemapInfo = append(sitemapInfo, router.SitemapInfo{Loc: "/" + lang.Name, Priority: 0.7}) - } - return sitemapInfo -} - -func (r *HomeHandler) AddMeta(c *fiber.Ctx, supplements *router.Supplements, lang string, templateMap fiber.Map) (meta []router.MetaField, err error) { - return []router.MetaField{ - {Property: "og:title", Content: supplements.Localization[lang].HomePage.Header}, - {Property: "og:description", Content: supplements.Localization[lang].HomePage.HomePageDescription}, - {Property: "og:image", Content: fmt.Sprintf("https://f003.backblazeb2.com/file/sayana-static/home-page-gifs/otter-%d.gif", rand.Int()%3+1)}, - {Property: "og:url", Content: fmt.Sprintf("%s/%s", templateMap["CanonicalEndpoint"], lang)}, - {Property: "og:type", Content: "website"}, - }, nil -} - func (r *HomeHandler) RenderBody(c *fiber.Ctx, supplements *router.Supplements, lang string, templateMap fiber.Map) (statusCode int, err error) { templateMap["Title"] = supplements.Localization[lang].HomePage.Header templateMap["FilledHeartCount"] = uint(40) diff --git a/internal/router/handlers/robots.txt.go b/internal/router/handlers/robots.txt.go deleted file mode 100644 index fc60af4..0000000 --- a/internal/router/handlers/robots.txt.go +++ /dev/null @@ -1,48 +0,0 @@ -package handlers - -import ( - "time" - - "github.com/SayaAndy/saya-today-web/internal/router" - "github.com/gofiber/fiber/v2" -) - -type RobotsTxtHandler struct { - router.BasicHandler -} - -func init() { - router.Routes = append(router.Routes, &RobotsTxtHandler{}) -} - -func (r *RobotsTxtHandler) Filter() (method string, path string) { - return "GET", "/robots.txt" -} - -func (r *RobotsTxtHandler) IsTemplated() bool { - return false -} - -func (r *RobotsTxtHandler) TemplatesToInject() []string { - return []string{"views/pages/robots.txt"} -} - -func (r *RobotsTxtHandler) ToCache() router.CacheSetting { - return router.ByUrlOnly -} - -func (r *RobotsTxtHandler) CacheDuration() time.Duration { - return time.Hour -} - -func (r *RobotsTxtHandler) ToValidateLang() router.LangSetting { - return router.NotRequired -} - -func (r *RobotsTxtHandler) ContentType() string { - return fiber.MIMETextPlainCharsetUTF8 -} - -func (r *RobotsTxtHandler) Render(c *fiber.Ctx, supplements *router.Supplements, lang string, templateMap fiber.Map) (statusCode int, err error) { - return fiber.StatusOK, nil -} diff --git a/internal/router/handlers/root.go b/internal/router/handlers/root.go index cd01fcd..c8c4cd4 100644 --- a/internal/router/handlers/root.go +++ b/internal/router/handlers/root.go @@ -1,7 +1,6 @@ package handlers import ( - "fmt" "time" "github.com/SayaAndy/saya-today-web/internal/router" @@ -36,19 +35,6 @@ func (r *RootHandler) CacheDuration() time.Duration { return 24 * time.Hour } -func (r *RootHandler) SitemapInfo(_ *router.Supplements) []router.SitemapInfo { - return []router.SitemapInfo{{Loc: "/", Priority: 0.7}} -} - -func (r *RootHandler) AddMeta(c *fiber.Ctx, supplements *router.Supplements, lang string, templateMap fiber.Map) (meta []router.MetaField, err error) { - return []router.MetaField{ - {Property: "og:title", Content: "Saya Blog"}, - {Property: "og:description", Content: "The blog of a 25 years old, travelling God knows where, proud to be not mainstream // Личный блог 25-летки, странствующего по ебеням, зато не мейнстрим"}, - {Property: "og:url", Content: fmt.Sprint(templateMap["CanonicalEndpoint"]) + "/"}, - {Property: "og:type", Content: "website"}, - }, nil -} - func (r *RootHandler) RenderBody(c *fiber.Ctx, supplements *router.Supplements, _ string, templateMap fiber.Map) (statusCode int, err error) { templateMap["Title"] = "Choose Your Language" templateMap["AvailableLanguages"] = supplements.AvailableLanguages diff --git a/internal/router/handlers/sitemap.xml.go b/internal/router/handlers/sitemap.xml.go deleted file mode 100644 index bb1df93..0000000 --- a/internal/router/handlers/sitemap.xml.go +++ /dev/null @@ -1,79 +0,0 @@ -package handlers - -import ( - "log/slog" - "time" - - "github.com/SayaAndy/saya-today-web/internal/router" - "github.com/gofiber/fiber/v2" -) - -type SitemapXmlHandler struct { - router.BasicHandler -} - -func init() { - router.Routes = append(router.Routes, &SitemapXmlHandler{}) -} - -func (r *SitemapXmlHandler) Filter() (method string, path string) { - return "GET", "/sitemap.xml" -} - -func (r *SitemapXmlHandler) IsTemplated() bool { - return false -} - -func (r *SitemapXmlHandler) TemplatesToInject() []string { - return []string{"views/pages/sitemap.xml"} -} - -func (r *SitemapXmlHandler) ToCache() router.CacheSetting { - return router.ByUrlOnly -} - -func (r *SitemapXmlHandler) CacheDuration() time.Duration { - return time.Hour -} - -func (r *SitemapXmlHandler) ToValidateLang() router.LangSetting { - return router.NotRequired -} - -func (r *SitemapXmlHandler) ContentType() string { - return fiber.MIMEApplicationXMLCharsetUTF8 -} - -func (r *SitemapXmlHandler) Render(c *fiber.Ctx, supplements *router.Supplements, lang string, templateMap fiber.Map) (statusCode int, err error) { - urls := []router.SitemapInfo{} - for _, route := range router.Routes { - sitemapInfo := route.SitemapInfo(supplements) - if sitemapInfo == nil { - continue - } - - method, match := route.Filter() - lastMod, err := supplements.TemplateManager.GetLastModified(method + " " + match) - if err != nil { - slog.Warn("failed to get last modified for a route", - slog.String("error", err.Error()), - slog.String("method", method), - slog.String("match", match)) - lastMod = time.Now() - } - - for i := range sitemapInfo { - if sitemapInfo[i].LastModified.Before(lastMod) { - sitemapInfo[i].LastModified = lastMod - } - if sitemapInfo[i].ChangeFreq == "" { - sitemapInfo[i].ChangeFreq = "monthly" - } - urls = append(urls, sitemapInfo[i]) - } - } - - templateMap["URLs"] = urls - - return fiber.StatusOK, nil -} |