diff options
| author | 2025-08-19 01:54:14 +0700 | |
|---|---|---|
| committer | 2025-08-19 01:54:14 +0700 | |
| commit | 53923cf49f46041c82bbb0cbc155e4bdcc9e1a5d (patch) | |
| tree | 0b3ed0e352836ede51e82ceaff8c9386e934802c | |
| parent | dbf896340e38332cbd9a51a9622ab6ceeb8de257 (diff) | |
| download | web-53923cf49f46041c82bbb0cbc155e4bdcc9e1a5d.tar.gz web-53923cf49f46041c82bbb0cbc155e4bdcc9e1a5d.zip | |
refactor: move template manager definition to router package
| -rw-r--r-- | internal/router/api-v1-blog-search.go | 7 | ||||
| -rw-r--r-- | internal/router/lang-blog-title.go | 7 | ||||
| -rw-r--r-- | internal/router/lang-blog.go | 7 | ||||
| -rw-r--r-- | internal/router/lang-map.go | 7 | ||||
| -rw-r--r-- | internal/router/root.go | 7 | ||||
| -rw-r--r-- | internal/router/tm.go | 18 | ||||
| -rw-r--r-- | internal/templatemanager/templatemanager.go | 24 | ||||
| -rw-r--r-- | main.go | 23 |
8 files changed, 70 insertions, 30 deletions
diff --git a/internal/router/api-v1-blog-search.go b/internal/router/api-v1-blog-search.go index 2997407..51ace85 100644 --- a/internal/router/api-v1-blog-search.go +++ b/internal/router/api-v1-blog-search.go @@ -10,12 +10,15 @@ import ( "time" "github.com/SayaAndy/saya-today-web/internal/b2" - "github.com/SayaAndy/saya-today-web/internal/templatemanager" "github.com/SayaAndy/saya-today-web/locale" "github.com/gofiber/fiber/v2" ) -func Api_V1_BlogSearch(tm *templatemanager.TemplateManager, l map[string]*locale.LocaleConfig, langs []string, b2Client *b2.B2Client) func(c *fiber.Ctx) error { +func init() { + tm.Add("catalogue-blog-cards", "views/partials/catalogue-blog-cards.html", "views/partials/catalogue-blog-card-tags.html") +} + +func Api_V1_BlogSearch(l map[string]*locale.LocaleConfig, langs []string, b2Client *b2.B2Client) func(c *fiber.Ctx) error { return func(c *fiber.Ctx) error { sort := c.Query("sort") lang := c.Query("lang") diff --git a/internal/router/lang-blog-title.go b/internal/router/lang-blog-title.go index 39d4252..b7b5d7e 100644 --- a/internal/router/lang-blog-title.go +++ b/internal/router/lang-blog-title.go @@ -11,13 +11,16 @@ import ( "github.com/SayaAndy/saya-today-web/internal/b2" "github.com/SayaAndy/saya-today-web/internal/frontmatter" - "github.com/SayaAndy/saya-today-web/internal/templatemanager" "github.com/SayaAndy/saya-today-web/locale" "github.com/gofiber/fiber/v2" "github.com/yuin/goldmark" ) -func Lang_Blog_Title(tm *templatemanager.TemplateManager, l map[string]*locale.LocaleConfig, langs []string, b2Client *b2.B2Client, md goldmark.Markdown) func(c *fiber.Ctx) error { +func init() { + tm.Add("blog-page", "views/layouts/general-page.html", "views/pages/blog-page.html") +} + +func Lang_Blog_Title(l map[string]*locale.LocaleConfig, langs []string, b2Client *b2.B2Client, md goldmark.Markdown) func(c *fiber.Ctx) error { return func(c *fiber.Ctx) error { lang := c.Params("lang") if !slices.Contains(langs, lang) { diff --git a/internal/router/lang-blog.go b/internal/router/lang-blog.go index 1a7cbca..650c4b1 100644 --- a/internal/router/lang-blog.go +++ b/internal/router/lang-blog.go @@ -9,12 +9,15 @@ import ( "strings" "github.com/SayaAndy/saya-today-web/internal/b2" - "github.com/SayaAndy/saya-today-web/internal/templatemanager" "github.com/SayaAndy/saya-today-web/locale" "github.com/gofiber/fiber/v2" ) -func Lang_Blog(tm *templatemanager.TemplateManager, l map[string]*locale.LocaleConfig, langs []string, b2Client *b2.B2Client) func(c *fiber.Ctx) error { +func init() { + tm.Add("blog-catalogue", "views/layouts/general-page.html", "views/pages/blog-catalogue.html") +} + +func Lang_Blog(l map[string]*locale.LocaleConfig, langs []string, b2Client *b2.B2Client) func(c *fiber.Ctx) error { return func(c *fiber.Ctx) error { lang := c.Params("lang") if !slices.Contains(langs, lang) { diff --git a/internal/router/lang-map.go b/internal/router/lang-map.go index 8cc070a..e94d756 100644 --- a/internal/router/lang-map.go +++ b/internal/router/lang-map.go @@ -8,12 +8,15 @@ import ( "strings" "github.com/SayaAndy/saya-today-web/internal/b2" - "github.com/SayaAndy/saya-today-web/internal/templatemanager" "github.com/SayaAndy/saya-today-web/locale" "github.com/gofiber/fiber/v2" ) -func Lang_Map(tm *templatemanager.TemplateManager, l map[string]*locale.LocaleConfig, langs []string, b2Client *b2.B2Client) func(c *fiber.Ctx) error { +func init() { + tm.Add("global-map", "views/pages/global-map.html") +} + +func Lang_Map(l map[string]*locale.LocaleConfig, langs []string, b2Client *b2.B2Client) func(c *fiber.Ctx) error { return func(c *fiber.Ctx) error { lang := c.Params("lang") if !slices.Contains(langs, lang) { diff --git a/internal/router/root.go b/internal/router/root.go index f5be6cb..f4a0692 100644 --- a/internal/router/root.go +++ b/internal/router/root.go @@ -4,11 +4,14 @@ import ( "log/slog" "github.com/SayaAndy/saya-today-web/config" - "github.com/SayaAndy/saya-today-web/internal/templatemanager" "github.com/gofiber/fiber/v2" ) -func Root(tm *templatemanager.TemplateManager, localeCfg []config.AvailableLanguageConfig) func(c *fiber.Ctx) error { +func init() { + tm.Add("index", "views/index.html") +} + +func Root(localeCfg []config.AvailableLanguageConfig) func(c *fiber.Ctx) error { return func(c *fiber.Ctx) error { content, err := tm.Render("index", fiber.Map{ "AvailableLanguages": localeCfg, diff --git a/internal/router/tm.go b/internal/router/tm.go new file mode 100644 index 0000000..e8095ee --- /dev/null +++ b/internal/router/tm.go @@ -0,0 +1,18 @@ +package router + +import ( + "log/slog" + "os" + + "github.com/SayaAndy/saya-today-web/internal/templatemanager" +) + +var tm = assert(templatemanager.NewTemplateManager()) + +func assert[T any](t T, err error) T { + if err != nil { + slog.Error("fail to initialize template manager", slog.String("error", err.Error())) + os.Exit(1) + } + return t +} diff --git a/internal/templatemanager/templatemanager.go b/internal/templatemanager/templatemanager.go index 5effcb3..f89d0c8 100644 --- a/internal/templatemanager/templatemanager.go +++ b/internal/templatemanager/templatemanager.go @@ -22,7 +22,7 @@ type TemplateManagerTemplates struct { Files []string } -func NewTemplateManager(templates []TemplateManagerTemplates) (*TemplateManager, error) { +func NewTemplateManager(templates ...TemplateManagerTemplates) (*TemplateManager, error) { templateMap := make(map[string]templateManagerRender) for _, tmplStruct := range templates { @@ -37,7 +37,6 @@ func NewTemplateManager(templates []TemplateManagerTemplates) (*TemplateManager, Main: filepath.Base(tmplStruct.Files[0]), Tmpl: tmpl, } - } return &TemplateManager{ @@ -55,3 +54,24 @@ func (tm *TemplateManager) Render(name string, data interface{}) ([]byte, error) err := tmpl.Tmpl.ExecuteTemplate(&buf, tmpl.Main, data) return buf.Bytes(), err } + +func (tm *TemplateManager) Add(name string, files ...string) error { + if len(files) == 0 { + return fmt.Errorf("you can't add template without any files") + } + + tmpl := template.New("").Funcs(template.FuncMap{ + "contains": strings.Contains, + }) + + tmpl, err := tmpl.ParseFiles(files...) + if err != nil { + return fmt.Errorf("failed to add template into manager: %w", err) + } + + tm.templates[name] = templateManagerRender{ + Main: filepath.Base(files[0]), + Tmpl: tmpl, + } + return nil +} @@ -11,7 +11,6 @@ import ( "github.com/SayaAndy/saya-today-web/internal/lightgallery" "github.com/SayaAndy/saya-today-web/internal/router" "github.com/SayaAndy/saya-today-web/internal/tailwind" - "github.com/SayaAndy/saya-today-web/internal/templatemanager" "github.com/SayaAndy/saya-today-web/locale" "github.com/gofiber/fiber/v2" "github.com/gofiber/fiber/v2/middleware/redirect" @@ -69,18 +68,6 @@ func main() { localization[lang.Name] = localeCfg } - tm, err := templatemanager.NewTemplateManager([]templatemanager.TemplateManagerTemplates{ - {Name: "blog-page", Files: []string{"views/layouts/general-page.html", "views/pages/blog-page.html"}}, - {Name: "blog-catalogue", Files: []string{"views/layouts/general-page.html", "views/pages/blog-catalogue.html"}}, - {Name: "index", Files: []string{"views/index.html"}}, - {Name: "catalogue-blog-cards", Files: []string{"views/partials/catalogue-blog-cards.html", "views/partials/catalogue-blog-card-tags.html"}}, - {Name: "global-map", Files: []string{"views/pages/global-map.html"}}, - }) - if err != nil { - slog.Error("fail to initialize template manager", slog.String("error", err.Error())) - os.Exit(1) - } - app := fiber.New(fiber.Config{}) app.Use(redirect.New(redirect.Config{ @@ -91,12 +78,12 @@ func main() { StatusCode: 301, })) - app.Get("/", router.Root(tm, cfg.AvailableLanguages)) - app.Get("/:lang/map", router.Lang_Map(tm, localization, availableLanguages, b2Client)) - app.Get("/:lang/blog", router.Lang_Blog(tm, localization, availableLanguages, b2Client)) - app.Get("/:lang/blog/:title", router.Lang_Blog_Title(tm, localization, availableLanguages, b2Client, md)) + app.Get("/", router.Root(cfg.AvailableLanguages)) + app.Get("/:lang/map", router.Lang_Map(localization, availableLanguages, b2Client)) + app.Get("/:lang/blog", router.Lang_Blog(localization, availableLanguages, b2Client)) + app.Get("/:lang/blog/:title", router.Lang_Blog_Title(localization, availableLanguages, b2Client, md)) app.Get("/api/v1/tz", router.Api_V1_TZ()) - app.Get("/api/v1/blog-search", router.Api_V1_BlogSearch(tm, localization, availableLanguages, b2Client)) + app.Get("/api/v1/blog-search", router.Api_V1_BlogSearch(localization, availableLanguages, b2Client)) app.Static("/", "./static") |