diff --git a/app/author_service.go b/app/author_service.go
index 362d6d9..3a2a9ce 100644
--- a/app/author_service.go
+++ b/app/author_service.go
@@ -4,7 +4,6 @@ import (
"crypto/sha256"
"fmt"
"owl-blogs/app/repository"
- "owl-blogs/config"
"owl-blogs/domain/model"
"strings"
@@ -12,12 +11,12 @@ import (
)
type AuthorService struct {
- repo repository.AuthorRepository
- siteConfigRepo repository.ConfigRepository
+ repo repository.AuthorRepository
+ siteConfigService *SiteConfigService
}
-func NewAuthorService(repo repository.AuthorRepository, siteConfigRepo repository.ConfigRepository) *AuthorService {
- return &AuthorService{repo: repo, siteConfigRepo: siteConfigRepo}
+func NewAuthorService(repo repository.AuthorRepository, siteConfigService *SiteConfigService) *AuthorService {
+ return &AuthorService{repo: repo, siteConfigService: siteConfigService}
}
func hashPassword(password string) (string, error) {
@@ -65,14 +64,13 @@ func (s *AuthorService) Authenticate(name string, password string) bool {
}
func (s *AuthorService) getSecretKey() string {
- siteConfig := model.SiteConfig{}
- err := s.siteConfigRepo.Get(config.SITE_CONFIG, &siteConfig)
+ siteConfig, err := s.siteConfigService.GetSiteConfig()
if err != nil {
panic(err)
}
if siteConfig.Secret == "" {
siteConfig.Secret = RandStringRunes(64)
- err = s.siteConfigRepo.Update(config.SITE_CONFIG, siteConfig)
+ err = s.siteConfigService.UpdateSiteConfig(siteConfig)
if err != nil {
panic(err)
}
diff --git a/app/site_config_service.go b/app/site_config_service.go
new file mode 100644
index 0000000..b433a20
--- /dev/null
+++ b/app/site_config_service.go
@@ -0,0 +1,59 @@
+package app
+
+import (
+ "owl-blogs/app/repository"
+ "owl-blogs/config"
+ "owl-blogs/domain/model"
+ "reflect"
+)
+
+// SiteConfigService is a service to retrieve and store the site config
+// Even though the site config is a standard config, it is handle by an extra service
+// as it is used in many places.
+// The SiteConfig contains global settings require by multiple parts of the app
+type SiteConfigService struct {
+ repo repository.ConfigRepository
+}
+
+func NewSiteConfigService(repo repository.ConfigRepository) *SiteConfigService {
+ return &SiteConfigService{
+ repo: repo,
+ }
+}
+
+func (svc *SiteConfigService) defaultConfig() model.SiteConfig {
+ return model.SiteConfig{
+ Title: "My Owl-Blog",
+ SubTitle: "A freshly created blog",
+ HeaderColor: "#efc48c",
+ PrimaryColor: "#d37f12",
+ AuthorName: "",
+ Me: []model.MeLinks{},
+ Lists: []model.EntryList{},
+ PrimaryListInclude: []string{},
+ HeaderMenu: []model.MenuItem{},
+ FooterMenu: []model.MenuItem{},
+ Secret: "",
+ AvatarUrl: "",
+ FullUrl: "http://localhost:3000",
+ HtmlHeadExtra: "",
+ FooterExtra: "",
+ }
+}
+
+func (svc *SiteConfigService) GetSiteConfig() (model.SiteConfig, error) {
+ siteConfig := model.SiteConfig{}
+ err := svc.repo.Get(config.SITE_CONFIG, &siteConfig)
+ if err != nil {
+ println("ERROR IN SITE CONFIG")
+ return model.SiteConfig{}, err
+ }
+ if reflect.ValueOf(siteConfig).IsZero() {
+ return svc.defaultConfig(), nil
+ }
+ return siteConfig, nil
+}
+
+func (svc *SiteConfigService) UpdateSiteConfig(cfg model.SiteConfig) error {
+ return svc.repo.Update(config.SITE_CONFIG, cfg)
+}
diff --git a/app/webmention_service.go b/app/webmention_service.go
index ba2c2c0..eeeae83 100644
--- a/app/webmention_service.go
+++ b/app/webmention_service.go
@@ -5,28 +5,27 @@ import (
"net/url"
"owl-blogs/app/owlhttp"
"owl-blogs/app/repository"
- "owl-blogs/config"
"owl-blogs/domain/model"
"owl-blogs/interactions"
"time"
)
type WebmentionService struct {
- ConfigRepo repository.ConfigRepository
+ siteConfigService *SiteConfigService
InteractionRepository repository.InteractionRepository
EntryRepository repository.EntryRepository
Http owlhttp.HttpClient
}
func NewWebmentionService(
- configRepo repository.ConfigRepository,
+ siteConfigService *SiteConfigService,
interactionRepository repository.InteractionRepository,
entryRepository repository.EntryRepository,
http owlhttp.HttpClient,
bus *EventBus,
) *WebmentionService {
svc := &WebmentionService{
- ConfigRepo: configRepo,
+ siteConfigService: siteConfigService,
InteractionRepository: interactionRepository,
EntryRepository: entryRepository,
Http: http,
@@ -104,8 +103,7 @@ func (s *WebmentionService) ScanForLinks(entry model.Entry) ([]string, error) {
}
func (s *WebmentionService) FullEntryUrl(entry model.Entry) string {
- siteConfig := model.SiteConfig{}
- s.ConfigRepo.Get(config.SITE_CONFIG, &siteConfig)
+ siteConfig, _ := s.siteConfigService.GetSiteConfig()
url, _ := url.JoinPath(
siteConfig.FullUrl,
diff --git a/cmd/owl/main.go b/cmd/owl/main.go
index 39bea94..8b0304b 100644
--- a/cmd/owl/main.go
+++ b/cmd/owl/main.go
@@ -8,6 +8,7 @@ import (
"owl-blogs/infra"
"owl-blogs/interactions"
"owl-blogs/plugings"
+ "owl-blogs/render"
"owl-blogs/web"
"github.com/spf13/cobra"
@@ -57,13 +58,17 @@ func App(db infra.Database) *web.WebApp {
eventBus := app.NewEventBus()
// Create Services
+ siteConfigService := app.NewSiteConfigService(configRepo)
entryService := app.NewEntryService(entryRepo, eventBus)
binaryService := app.NewBinaryFileService(binRepo)
- authorService := app.NewAuthorService(authorRepo, configRepo)
+ authorService := app.NewAuthorService(authorRepo, siteConfigService)
webmentionService := app.NewWebmentionService(
- configRepo, interactionRepo, entryRepo, httpClient, eventBus,
+ siteConfigService, interactionRepo, entryRepo, httpClient, eventBus,
)
+ // setup render functions
+ render.SiteConfigService = siteConfigService
+
// plugins
plugings.NewEcho(eventBus)
plugings.RegisterInstagram(
@@ -74,7 +79,7 @@ func App(db infra.Database) *web.WebApp {
return web.NewWebApp(
entryService, entryRegister, binaryService,
authorService, configRepo, configRegister,
- webmentionService, interactionRepo,
+ siteConfigService, webmentionService, interactionRepo,
)
}
diff --git a/domain/model/siteconfig_service.go b/domain/model/siteconfig_service.go
new file mode 100644
index 0000000..321c926
--- /dev/null
+++ b/domain/model/siteconfig_service.go
@@ -0,0 +1,6 @@
+package model
+
+type SiteConfigInterface interface {
+ GetSiteConfig() (SiteConfig, error)
+ UpdateSiteConfig(cfg SiteConfig) error
+}
diff --git a/render/templates.go b/render/templates.go
index 6166919..181037d 100644
--- a/render/templates.go
+++ b/render/templates.go
@@ -21,6 +21,7 @@ type TemplateData struct {
//go:embed templates
var templates embed.FS
+var SiteConfigService model.SiteConfigInterface
var funcMap = template.FuncMap{
"markdown": func(text string) string {
@@ -45,7 +46,7 @@ func CreateTemplateWithBase(templateName string) (*template.Template, error) {
)
}
-func RenderTemplateWithBase(w io.Writer, siteConfig model.SiteConfig, templateName string, data interface{}) error {
+func RenderTemplateWithBase(w io.Writer, templateName string, data interface{}) error {
t, err := CreateTemplateWithBase(templateName)
@@ -53,6 +54,11 @@ func RenderTemplateWithBase(w io.Writer, siteConfig model.SiteConfig, templateNa
return err
}
+ siteConfig, err := SiteConfigService.GetSiteConfig()
+ if err != nil {
+ return err
+ }
+
err = t.ExecuteTemplate(w, "base", TemplateData{
Data: data,
SiteConfig: siteConfig,
diff --git a/render/templates/views/entry.tmpl b/render/templates/views/entry.tmpl
index 03df916..1cd67d2 100644
--- a/render/templates/views/entry.tmpl
+++ b/render/templates/views/entry.tmpl
@@ -6,7 +6,9 @@
{{ if .Data.Entry.ImageUrl}}
{{ end }}
+{{ if .Data.Entry.PublishedAt }}
+{{ end }}
{{end}}
{{define "main"}}
diff --git a/web/admin_handler.go b/web/admin_handler.go
index e516123..f718d98 100644
--- a/web/admin_handler.go
+++ b/web/admin_handler.go
@@ -36,7 +36,6 @@ func NewAdminHandler(
func (h *adminHandler) Handle(c *fiber.Ctx) error {
c.Set(fiber.HeaderContentType, fiber.MIMETextHTML)
- siteConfig := getSiteConfig(h.configRepo)
configs := h.configRegister.Configs()
types := h.typeRegistry.Types()
@@ -53,8 +52,7 @@ func (h *adminHandler) Handle(c *fiber.Ctx) error {
})
return render.RenderTemplateWithBase(
- c, siteConfig,
- "views/admin", &adminContet{
+ c, "views/admin", &adminContet{
Configs: configs,
Types: typeNames,
},
@@ -73,14 +71,13 @@ func (h *adminHandler) HandleConfigGet(c *fiber.Ctx) error {
if err != nil {
return err
}
- siteConfig := getSiteConfig(h.configRepo)
htmlForm := config.Form(h.binSvc)
if err != nil {
return err
}
- return render.RenderTemplateWithBase(c, siteConfig, "views/admin_config", htmlForm)
+ return render.RenderTemplateWithBase(c, "views/admin_config", htmlForm)
}
func (h *adminHandler) HandleConfigPost(c *fiber.Ctx) error {
diff --git a/web/admin_interaction_handler.go b/web/admin_interaction_handler.go
index 6fe06ae..82ed46b 100644
--- a/web/admin_interaction_handler.go
+++ b/web/admin_interaction_handler.go
@@ -20,8 +20,6 @@ func NewAdminInteractionHandler(configRepo repository.ConfigRepository, interact
}
func (h *AdminInteractionHandler) HandleGet(c *fiber.Ctx) error {
- siteConfig := getSiteConfig(h.configRepo)
-
filter := c.Query("filter", "")
interactions, err := h.interactionRepo.ListAllInteractions()
@@ -31,7 +29,7 @@ func (h *AdminInteractionHandler) HandleGet(c *fiber.Ctx) error {
pageData := paginate(c, interactions, 50)
c.Set(fiber.HeaderContentType, fiber.MIMETextHTML)
- return render.RenderTemplateWithBase(c, siteConfig, "views/interaction_manager", fiber.Map{
+ return render.RenderTemplateWithBase(c, "views/interaction_manager", fiber.Map{
"Interactions": pageData.items,
"Page": pageData.page,
"NextPage": pageData.page + 1,
diff --git a/web/app.go b/web/app.go
index a604cd4..695f5f9 100644
--- a/web/app.go
+++ b/web/app.go
@@ -7,8 +7,6 @@ import (
"net/url"
"owl-blogs/app"
"owl-blogs/app/repository"
- "owl-blogs/config"
- "owl-blogs/domain/model"
"owl-blogs/web/middleware"
"github.com/gofiber/fiber/v2"
@@ -34,17 +32,18 @@ func NewWebApp(
authorService *app.AuthorService,
configRepo repository.ConfigRepository,
configRegister *app.ConfigRegister,
+ siteConfigService *app.SiteConfigService,
webmentionService *app.WebmentionService,
interactionRepo repository.InteractionRepository,
) *WebApp {
app := fiber.New()
app.Use(middleware.NewUserMiddleware(authorService).Handle)
- indexHandler := NewIndexHandler(entryService, configRepo)
- listHandler := NewListHandler(entryService, configRepo)
+ indexHandler := NewIndexHandler(entryService, siteConfigService)
+ listHandler := NewListHandler(entryService, siteConfigService)
entryHandler := NewEntryHandler(entryService, typeRegistry, authorService, configRepo, interactionRepo)
mediaHandler := NewMediaHandler(binService)
- rssHandler := NewRSSHandler(entryService, configRepo)
+ rssHandler := NewRSSHandler(entryService, siteConfigService)
loginHandler := NewLoginHandler(authorService, configRepo)
editorHandler := NewEditorHandler(entryService, typeRegistry, binService, configRepo)
webmentionHandler := NewWebmentionHandler(webmentionService, configRepo)
@@ -55,7 +54,7 @@ func NewWebApp(
// admin
adminHandler := NewAdminHandler(configRepo, configRegister, typeRegistry)
- draftHandler := NewDraftHandler(entryService, configRepo)
+ draftHandler := NewDraftHandler(entryService, siteConfigService)
binaryManageHandler := NewBinaryManageHandler(configRepo, binService)
adminInteractionHandler := NewAdminInteractionHandler(configRepo, interactionRepo)
admin := app.Group("/admin")
@@ -87,21 +86,21 @@ func NewWebApp(
siteConfig := app.Group("/site-config")
siteConfig.Use(middleware.NewAuthMiddleware(authorService).Handle)
- siteConfigHandler := NewSiteConfigHandler(configRepo)
+ siteConfigHandler := NewSiteConfigHandler(siteConfigService)
siteConfig.Get("/", siteConfigHandler.HandleGet)
siteConfig.Post("/", siteConfigHandler.HandlePost)
- siteConfigMeHandler := NewSiteConfigMeHandler(configRepo)
+ siteConfigMeHandler := NewSiteConfigMeHandler(siteConfigService)
siteConfig.Get("/me", siteConfigMeHandler.HandleGet)
siteConfig.Post("/me/create/", siteConfigMeHandler.HandleCreate)
siteConfig.Post("/me/delete/", siteConfigMeHandler.HandleDelete)
- siteConfigListHandler := NewSiteConfigListHandler(configRepo, typeRegistry)
+ siteConfigListHandler := NewSiteConfigListHandler(siteConfigService, typeRegistry)
siteConfig.Get("/lists", siteConfigListHandler.HandleGet)
siteConfig.Post("/lists/create/", siteConfigListHandler.HandleCreate)
siteConfig.Post("/lists/delete/", siteConfigListHandler.HandleDelete)
- siteConfigMenusHandler := NewSiteConfigMenusHandler(configRepo)
+ siteConfigMenusHandler := NewSiteConfigMenusHandler(siteConfigService)
siteConfig.Get("/menus", siteConfigMenusHandler.HandleGet)
siteConfig.Post("/menus/create/", siteConfigMenusHandler.HandleCreate)
siteConfig.Post("/menus/delete/", siteConfigMenusHandler.HandleDelete)
@@ -124,14 +123,13 @@ func NewWebApp(
app.Post("/webmention/", webmentionHandler.Handle)
// robots.txt
app.Get("/robots.txt", func(c *fiber.Ctx) error {
- siteConfig := model.SiteConfig{}
- configRepo.Get(config.SITE_CONFIG, &siteConfig)
+ siteConfig, _ := siteConfigService.GetSiteConfig()
sitemapUrl, _ := url.JoinPath(siteConfig.FullUrl, "/sitemap.xml")
c.Set("Content-Type", "text/plain")
return c.SendString(fmt.Sprintf("User-agent: GPTBot\nDisallow: /\n\nUser-agent: *\nAllow: /\n\nSitemap: %s\n", sitemapUrl))
})
// sitemap.xml
- app.Get("/sitemap.xml", NewSiteMapHandler(entryService, configRepo).Handle)
+ app.Get("/sitemap.xml", NewSiteMapHandler(entryService, siteConfigService).Handle)
// ActivityPub
activityPubServer := NewActivityPubServer(configRepo, entryService)
diff --git a/web/binary_manager_handler.go b/web/binary_manager_handler.go
index 3b4c8ff..2362629 100644
--- a/web/binary_manager_handler.go
+++ b/web/binary_manager_handler.go
@@ -24,8 +24,6 @@ func NewBinaryManageHandler(configRepo repository.ConfigRepository, service *app
}
func (h *BinaryManageHandler) Handle(c *fiber.Ctx) error {
- siteConfig := getSiteConfig(h.configRepo)
-
filter := c.Query("filter", "")
allIds, err := h.service.ListIds(filter)
@@ -38,7 +36,7 @@ func (h *BinaryManageHandler) Handle(c *fiber.Ctx) error {
pageData := paginate(c, allIds, 50)
c.Set(fiber.HeaderContentType, fiber.MIMETextHTML)
- return render.RenderTemplateWithBase(c, siteConfig, "views/binary_manager", fiber.Map{
+ return render.RenderTemplateWithBase(c, "views/binary_manager", fiber.Map{
"Binaries": pageData.items,
"Page": pageData.page,
"NextPage": pageData.page + 1,
diff --git a/web/draft_handler.go b/web/draft_handler.go
index 448cfb0..dbf0e45 100644
--- a/web/draft_handler.go
+++ b/web/draft_handler.go
@@ -2,7 +2,6 @@ package web
import (
"owl-blogs/app"
- "owl-blogs/app/repository"
"owl-blogs/domain/model"
"owl-blogs/render"
"sort"
@@ -12,17 +11,17 @@ import (
)
type DraftHandler struct {
- configRepo repository.ConfigRepository
- entrySvc *app.EntryService
+ siteConfigService *app.SiteConfigService
+ entrySvc *app.EntryService
}
func NewDraftHandler(
entryService *app.EntryService,
- configRepo repository.ConfigRepository,
+ siteConfigService *app.SiteConfigService,
) *DraftHandler {
return &DraftHandler{
- entrySvc: entryService,
- configRepo: configRepo,
+ entrySvc: entryService,
+ siteConfigService: siteConfigService,
}
}
@@ -38,7 +37,10 @@ type DraftRenderData struct {
func (h *DraftHandler) Handle(c *fiber.Ctx) error {
c.Set(fiber.HeaderContentType, fiber.MIMETextHTML)
- siteConfig := getSiteConfig(h.configRepo)
+ siteConfig, err := h.siteConfigService.GetSiteConfig()
+ if err != nil {
+ return err
+ }
entries, err := h.entrySvc.FindAllByType(&siteConfig.PrimaryListInclude, false, true)
if err != nil {
@@ -76,7 +78,7 @@ func (h *DraftHandler) Handle(c *fiber.Ctx) error {
return err
}
- return render.RenderTemplateWithBase(c, siteConfig, "views/draft_list", DraftRenderData{
+ return render.RenderTemplateWithBase(c, "views/draft_list", DraftRenderData{
Entries: entries,
Page: pageNum,
NextPage: pageNum + 1,
diff --git a/web/editor_handler.go b/web/editor_handler.go
index 8043554..e43a770 100644
--- a/web/editor_handler.go
+++ b/web/editor_handler.go
@@ -48,7 +48,7 @@ func (h *EditorHandler) HandleGetNew(c *fiber.Ctx) error {
return err
}
htmlForm := entryType.MetaData().Form(h.binSvc)
- return render.RenderTemplateWithBase(c, getSiteConfig(h.configRepo), "views/editor", htmlForm)
+ return render.RenderTemplateWithBase(c, "views/editor", htmlForm)
}
func (h *EditorHandler) HandlePostNew(c *fiber.Ctx) error {
@@ -94,7 +94,7 @@ func (h *EditorHandler) HandleGetEdit(c *fiber.Ctx) error {
}
htmlForm := entry.MetaData().Form(h.binSvc)
- return render.RenderTemplateWithBase(c, getSiteConfig(h.configRepo), "views/editor", htmlForm)
+ return render.RenderTemplateWithBase(c, "views/editor", htmlForm)
}
func (h *EditorHandler) HandlePostEdit(c *fiber.Ctx) error {
diff --git a/web/entry_handler.go b/web/entry_handler.go
index 0f24ff5..f02bf5f 100644
--- a/web/entry_handler.go
+++ b/web/entry_handler.go
@@ -72,7 +72,6 @@ func (h *EntryHandler) Handle(c *fiber.Ctx) error {
return render.RenderTemplateWithBase(
c,
- getSiteConfig(h.configRepo),
"views/entry",
entryData{
Entry: entry,
diff --git a/web/index_handler.go b/web/index_handler.go
index 459d183..11c2143 100644
--- a/web/index_handler.go
+++ b/web/index_handler.go
@@ -2,7 +2,6 @@ package web
import (
"owl-blogs/app"
- "owl-blogs/app/repository"
"owl-blogs/domain/model"
"owl-blogs/render"
"sort"
@@ -12,17 +11,17 @@ import (
)
type IndexHandler struct {
- configRepo repository.ConfigRepository
- entrySvc *app.EntryService
+ siteConfigService *app.SiteConfigService
+ entrySvc *app.EntryService
}
func NewIndexHandler(
entryService *app.EntryService,
- configRepo repository.ConfigRepository,
+ siteConfigService *app.SiteConfigService,
) *IndexHandler {
return &IndexHandler{
- entrySvc: entryService,
- configRepo: configRepo,
+ entrySvc: entryService,
+ siteConfigService: siteConfigService,
}
}
@@ -38,7 +37,10 @@ type indexRenderData struct {
func (h *IndexHandler) Handle(c *fiber.Ctx) error {
c.Set(fiber.HeaderContentType, fiber.MIMETextHTML)
- siteConfig := getSiteConfig(h.configRepo)
+ siteConfig, err := h.siteConfigService.GetSiteConfig()
+ if err != nil {
+ return err
+ }
entries, err := h.entrySvc.FindAllByType(&siteConfig.PrimaryListInclude, true, false)
if err != nil {
@@ -76,7 +78,7 @@ func (h *IndexHandler) Handle(c *fiber.Ctx) error {
return err
}
- return render.RenderTemplateWithBase(c, siteConfig, "views/index", indexRenderData{
+ return render.RenderTemplateWithBase(c, "views/index", indexRenderData{
Entries: entries,
Page: pageNum,
NextPage: pageNum + 1,
diff --git a/web/list_handler.go b/web/list_handler.go
index 221b033..048712d 100644
--- a/web/list_handler.go
+++ b/web/list_handler.go
@@ -2,7 +2,6 @@ package web
import (
"owl-blogs/app"
- "owl-blogs/app/repository"
"owl-blogs/domain/model"
"owl-blogs/render"
"sort"
@@ -12,17 +11,17 @@ import (
)
type ListHandler struct {
- configRepo repository.ConfigRepository
- entrySvc *app.EntryService
+ siteConfigService *app.SiteConfigService
+ entrySvc *app.EntryService
}
func NewListHandler(
entryService *app.EntryService,
- configRepo repository.ConfigRepository,
+ siteConfigService *app.SiteConfigService,
) *ListHandler {
return &ListHandler{
- entrySvc: entryService,
- configRepo: configRepo,
+ entrySvc: entryService,
+ siteConfigService: siteConfigService,
}
}
@@ -39,7 +38,10 @@ type listRenderData struct {
func (h *ListHandler) Handle(c *fiber.Ctx) error {
c.Set(fiber.HeaderContentType, fiber.MIMETextHTML)
- siteConfig := getSiteConfig(h.configRepo)
+ siteConfig, err := h.siteConfigService.GetSiteConfig()
+ if err != nil {
+ return err
+ }
listId := c.Params("list")
list := model.EntryList{}
for _, l := range siteConfig.Lists {
@@ -87,7 +89,7 @@ func (h *ListHandler) Handle(c *fiber.Ctx) error {
return err
}
- return render.RenderTemplateWithBase(c, siteConfig, "views/list", listRenderData{
+ return render.RenderTemplateWithBase(c, "views/list", listRenderData{
List: list,
Entries: entries,
Page: pageNum,
diff --git a/web/login_handler.go b/web/login_handler.go
index a2caa49..d86045e 100644
--- a/web/login_handler.go
+++ b/web/login_handler.go
@@ -26,7 +26,7 @@ func NewLoginHandler(
func (h *LoginHandler) HandleGet(c *fiber.Ctx) error {
c.Set(fiber.HeaderContentType, fiber.MIMETextHTML)
- return render.RenderTemplateWithBase(c, getSiteConfig(h.configRepo), "views/login", nil)
+ return render.RenderTemplateWithBase(c, "views/login", nil)
}
func (h *LoginHandler) HandlePost(c *fiber.Ctx) error {
diff --git a/web/rss_handler.go b/web/rss_handler.go
index 5adaf3e..dfbe7a3 100644
--- a/web/rss_handler.go
+++ b/web/rss_handler.go
@@ -5,7 +5,6 @@ import (
"encoding/xml"
"net/url"
"owl-blogs/app"
- "owl-blogs/app/repository"
"owl-blogs/domain/model"
"sort"
"time"
@@ -104,18 +103,21 @@ func RenderRSSFeed(config model.SiteConfig, entries []model.Entry) (string, erro
}
type RSSHandler struct {
- configRepo repository.ConfigRepository
- entrySvc *app.EntryService
+ siteConfigService *app.SiteConfigService
+ entrySvc *app.EntryService
}
-func NewRSSHandler(entryService *app.EntryService, configRepo repository.ConfigRepository) *RSSHandler {
- return &RSSHandler{entrySvc: entryService, configRepo: configRepo}
+func NewRSSHandler(entryService *app.EntryService, siteConfigService *app.SiteConfigService) *RSSHandler {
+ return &RSSHandler{entrySvc: entryService, siteConfigService: siteConfigService}
}
func (h *RSSHandler) Handle(c *fiber.Ctx) error {
c.Set(fiber.HeaderContentType, fiber.MIMEApplicationXML)
- siteConfig := getSiteConfig(h.configRepo)
+ siteConfig, err := h.siteConfigService.GetSiteConfig()
+ if err != nil {
+ return err
+ }
entries, err := h.entrySvc.FindAllByType(&siteConfig.PrimaryListInclude, true, false)
if err != nil {
diff --git a/web/siteconfig_handler.go b/web/siteconfig_handler.go
index 8865e9d..07807a6 100644
--- a/web/siteconfig_handler.go
+++ b/web/siteconfig_handler.go
@@ -1,42 +1,37 @@
package web
import (
- "owl-blogs/app/repository"
- "owl-blogs/config"
- "owl-blogs/domain/model"
+ "owl-blogs/app"
"owl-blogs/render"
"github.com/gofiber/fiber/v2"
)
type SiteConfigHandler struct {
- siteConfigRepo repository.ConfigRepository
+ svc *app.SiteConfigService
}
-func NewSiteConfigHandler(siteConfigRepo repository.ConfigRepository) *SiteConfigHandler {
+func NewSiteConfigHandler(svc *app.SiteConfigService) *SiteConfigHandler {
return &SiteConfigHandler{
- siteConfigRepo: siteConfigRepo,
+ svc: svc,
}
}
func (h *SiteConfigHandler) HandleGet(c *fiber.Ctx) error {
c.Set(fiber.HeaderContentType, fiber.MIMETextHTML)
- siteConfig := model.SiteConfig{}
- err := h.siteConfigRepo.Get(config.SITE_CONFIG, &siteConfig)
+ siteConfig, err := h.svc.GetSiteConfig()
if err != nil {
return err
}
- return render.RenderTemplateWithBase(c, getSiteConfig(h.siteConfigRepo), "views/site_config", siteConfig)
+ return render.RenderTemplateWithBase(c, "views/site_config", siteConfig)
}
func (h *SiteConfigHandler) HandlePost(c *fiber.Ctx) error {
c.Set(fiber.HeaderContentType, fiber.MIMETextHTML)
- siteConfig := model.SiteConfig{}
- err := h.siteConfigRepo.Get(config.SITE_CONFIG, &siteConfig)
-
+ siteConfig, err := h.svc.GetSiteConfig()
if err != nil {
return err
}
@@ -51,7 +46,7 @@ func (h *SiteConfigHandler) HandlePost(c *fiber.Ctx) error {
siteConfig.HtmlHeadExtra = c.FormValue("HtmlHeadExtra")
siteConfig.FooterExtra = c.FormValue("FooterExtra")
- err = h.siteConfigRepo.Update(config.SITE_CONFIG, siteConfig)
+ err = h.svc.UpdateSiteConfig(siteConfig)
if err != nil {
return err
}
diff --git a/web/siteconfig_list_handler.go b/web/siteconfig_list_handler.go
index 963e3e5..51fb768 100644
--- a/web/siteconfig_list_handler.go
+++ b/web/siteconfig_list_handler.go
@@ -2,8 +2,6 @@ package web
import (
"owl-blogs/app"
- "owl-blogs/app/repository"
- "owl-blogs/config"
"owl-blogs/domain/model"
"owl-blogs/render"
"strconv"
@@ -12,8 +10,8 @@ import (
)
type SiteConfigListHandler struct {
- siteConfigRepo repository.ConfigRepository
- typeRegistry *app.EntryTypeRegistry
+ siteConfigService *app.SiteConfigService
+ typeRegistry *app.EntryTypeRegistry
}
type siteConfigListTemplateData struct {
@@ -22,21 +20,19 @@ type siteConfigListTemplateData struct {
}
func NewSiteConfigListHandler(
- siteConfigRepo repository.ConfigRepository,
+ siteConfigService *app.SiteConfigService,
typeRegistry *app.EntryTypeRegistry,
) *SiteConfigListHandler {
return &SiteConfigListHandler{
- siteConfigRepo: siteConfigRepo,
- typeRegistry: typeRegistry,
+ siteConfigService: siteConfigService,
+ typeRegistry: typeRegistry,
}
}
func (h *SiteConfigListHandler) HandleGet(c *fiber.Ctx) error {
c.Set(fiber.HeaderContentType, fiber.MIMETextHTML)
- siteConfig := model.SiteConfig{}
- err := h.siteConfigRepo.Get(config.SITE_CONFIG, &siteConfig)
-
+ siteConfig, err := h.siteConfigService.GetSiteConfig()
if err != nil {
return err
}
@@ -51,7 +47,7 @@ func (h *SiteConfigListHandler) HandleGet(c *fiber.Ctx) error {
}
return render.RenderTemplateWithBase(
- c, getSiteConfig(h.siteConfigRepo), "views/site_config_list", siteConfigListTemplateData{
+ c, "views/site_config_list", siteConfigListTemplateData{
Lists: siteConfig.Lists,
Types: types,
})
@@ -60,8 +56,7 @@ func (h *SiteConfigListHandler) HandleGet(c *fiber.Ctx) error {
func (h *SiteConfigListHandler) HandleCreate(c *fiber.Ctx) error {
c.Set(fiber.HeaderContentType, fiber.MIMETextHTML)
- siteConfig := model.SiteConfig{}
- err := h.siteConfigRepo.Get(config.SITE_CONFIG, &siteConfig)
+ siteConfig, err := h.siteConfigService.GetSiteConfig()
if err != nil {
return err
@@ -79,7 +74,7 @@ func (h *SiteConfigListHandler) HandleCreate(c *fiber.Ctx) error {
ListType: c.FormValue("ListType"),
})
- err = h.siteConfigRepo.Update(config.SITE_CONFIG, siteConfig)
+ err = h.siteConfigService.UpdateSiteConfig(siteConfig)
if err != nil {
return err
}
@@ -90,8 +85,7 @@ func (h *SiteConfigListHandler) HandleCreate(c *fiber.Ctx) error {
func (h *SiteConfigListHandler) HandleDelete(c *fiber.Ctx) error {
c.Set(fiber.HeaderContentType, fiber.MIMETextHTML)
- siteConfig := model.SiteConfig{}
- err := h.siteConfigRepo.Get(config.SITE_CONFIG, &siteConfig)
+ siteConfig, err := h.siteConfigService.GetSiteConfig()
if err != nil {
return err
@@ -104,7 +98,7 @@ func (h *SiteConfigListHandler) HandleDelete(c *fiber.Ctx) error {
siteConfig.Lists = append(siteConfig.Lists[:id], siteConfig.Lists[id+1:]...)
- err = h.siteConfigRepo.Update(config.SITE_CONFIG, siteConfig)
+ err = h.siteConfigService.UpdateSiteConfig(siteConfig)
if err != nil {
return err
}
diff --git a/web/siteconfig_me_handler.go b/web/siteconfig_me_handler.go
index 3fdad35..0035487 100644
--- a/web/siteconfig_me_handler.go
+++ b/web/siteconfig_me_handler.go
@@ -1,8 +1,7 @@
package web
import (
- "owl-blogs/app/repository"
- "owl-blogs/config"
+ "owl-blogs/app"
"owl-blogs/domain/model"
"owl-blogs/render"
"strconv"
@@ -11,34 +10,31 @@ import (
)
type SiteConfigMeHandler struct {
- siteConfigRepo repository.ConfigRepository
+ siteConfigService *app.SiteConfigService
}
-func NewSiteConfigMeHandler(siteConfigRepo repository.ConfigRepository) *SiteConfigMeHandler {
+func NewSiteConfigMeHandler(siteConfigService *app.SiteConfigService) *SiteConfigMeHandler {
return &SiteConfigMeHandler{
- siteConfigRepo: siteConfigRepo,
+ siteConfigService: siteConfigService,
}
}
func (h *SiteConfigMeHandler) HandleGet(c *fiber.Ctx) error {
c.Set(fiber.HeaderContentType, fiber.MIMETextHTML)
- siteConfig := model.SiteConfig{}
- err := h.siteConfigRepo.Get(config.SITE_CONFIG, &siteConfig)
-
+ siteConfig, err := h.siteConfigService.GetSiteConfig()
if err != nil {
return err
}
return render.RenderTemplateWithBase(
- c, getSiteConfig(h.siteConfigRepo), "views/site_config_me", siteConfig.Me)
+ c, "views/site_config_me", siteConfig.Me)
}
func (h *SiteConfigMeHandler) HandleCreate(c *fiber.Ctx) error {
c.Set(fiber.HeaderContentType, fiber.MIMETextHTML)
- siteConfig := model.SiteConfig{}
- err := h.siteConfigRepo.Get(config.SITE_CONFIG, &siteConfig)
+ siteConfig, err := h.siteConfigService.GetSiteConfig()
if err != nil {
return err
@@ -49,7 +45,7 @@ func (h *SiteConfigMeHandler) HandleCreate(c *fiber.Ctx) error {
Url: c.FormValue("Url"),
})
- err = h.siteConfigRepo.Update(config.SITE_CONFIG, siteConfig)
+ err = h.siteConfigService.UpdateSiteConfig(siteConfig)
if err != nil {
return err
}
@@ -60,8 +56,7 @@ func (h *SiteConfigMeHandler) HandleCreate(c *fiber.Ctx) error {
func (h *SiteConfigMeHandler) HandleDelete(c *fiber.Ctx) error {
c.Set(fiber.HeaderContentType, fiber.MIMETextHTML)
- siteConfig := model.SiteConfig{}
- err := h.siteConfigRepo.Get(config.SITE_CONFIG, &siteConfig)
+ siteConfig, err := h.siteConfigService.GetSiteConfig()
if err != nil {
return err
@@ -73,7 +68,7 @@ func (h *SiteConfigMeHandler) HandleDelete(c *fiber.Ctx) error {
}
siteConfig.Me = append(siteConfig.Me[:idx], siteConfig.Me[idx+1:]...)
- err = h.siteConfigRepo.Update(config.SITE_CONFIG, siteConfig)
+ err = h.siteConfigService.UpdateSiteConfig(siteConfig)
if err != nil {
return err
}
diff --git a/web/siteconfig_menus_handler.go b/web/siteconfig_menus_handler.go
index 3babe6b..041550b 100644
--- a/web/siteconfig_menus_handler.go
+++ b/web/siteconfig_menus_handler.go
@@ -1,8 +1,7 @@
package web
import (
- "owl-blogs/app/repository"
- "owl-blogs/config"
+ "owl-blogs/app"
"owl-blogs/domain/model"
"owl-blogs/render"
"strconv"
@@ -11,7 +10,7 @@ import (
)
type SiteConfigMenusHandler struct {
- siteConfigRepo repository.ConfigRepository
+ siteConfigService *app.SiteConfigService
}
type siteConfigMenusTemplateData struct {
@@ -19,24 +18,23 @@ type siteConfigMenusTemplateData struct {
FooterMenu []model.MenuItem
}
-func NewSiteConfigMenusHandler(siteConfigRepo repository.ConfigRepository) *SiteConfigMenusHandler {
+func NewSiteConfigMenusHandler(siteConfigService *app.SiteConfigService) *SiteConfigMenusHandler {
return &SiteConfigMenusHandler{
- siteConfigRepo: siteConfigRepo,
+ siteConfigService: siteConfigService,
}
}
func (h *SiteConfigMenusHandler) HandleGet(c *fiber.Ctx) error {
c.Set(fiber.HeaderContentType, fiber.MIMETextHTML)
- siteConfig := model.SiteConfig{}
- err := h.siteConfigRepo.Get(config.SITE_CONFIG, &siteConfig)
+ siteConfig, err := h.siteConfigService.GetSiteConfig()
if err != nil {
return err
}
return render.RenderTemplateWithBase(
- c, getSiteConfig(h.siteConfigRepo), "views/site_config_menus", siteConfigMenusTemplateData{
+ c, "views/site_config_menus", siteConfigMenusTemplateData{
HeaderMenu: siteConfig.HeaderMenu,
FooterMenu: siteConfig.FooterMenu,
})
@@ -45,8 +43,7 @@ func (h *SiteConfigMenusHandler) HandleGet(c *fiber.Ctx) error {
func (h *SiteConfigMenusHandler) HandleCreate(c *fiber.Ctx) error {
c.Set(fiber.HeaderContentType, fiber.MIMETextHTML)
- siteConfig := model.SiteConfig{}
- err := h.siteConfigRepo.Get(config.SITE_CONFIG, &siteConfig)
+ siteConfig, err := h.siteConfigService.GetSiteConfig()
if err != nil {
return err
@@ -65,7 +62,7 @@ func (h *SiteConfigMenusHandler) HandleCreate(c *fiber.Ctx) error {
siteConfig.FooterMenu = append(siteConfig.FooterMenu, menuItem)
}
- err = h.siteConfigRepo.Update(config.SITE_CONFIG, siteConfig)
+ err = h.siteConfigService.UpdateSiteConfig(siteConfig)
if err != nil {
return err
}
@@ -76,8 +73,7 @@ func (h *SiteConfigMenusHandler) HandleCreate(c *fiber.Ctx) error {
func (h *SiteConfigMenusHandler) HandleDelete(c *fiber.Ctx) error {
c.Set(fiber.HeaderContentType, fiber.MIMETextHTML)
- siteConfig := model.SiteConfig{}
- err := h.siteConfigRepo.Get(config.SITE_CONFIG, &siteConfig)
+ siteConfig, err := h.siteConfigService.GetSiteConfig()
if err != nil {
return err
@@ -95,7 +91,7 @@ func (h *SiteConfigMenusHandler) HandleDelete(c *fiber.Ctx) error {
siteConfig.FooterMenu = append(siteConfig.FooterMenu[:idx], siteConfig.FooterMenu[idx+1:]...)
}
- err = h.siteConfigRepo.Update(config.SITE_CONFIG, siteConfig)
+ err = h.siteConfigService.UpdateSiteConfig(siteConfig)
if err != nil {
return err
}
diff --git a/web/sitemap_handler.go b/web/sitemap_handler.go
index 869dae0..461c5dc 100644
--- a/web/sitemap_handler.go
+++ b/web/sitemap_handler.go
@@ -5,14 +5,13 @@ import (
"encoding/xml"
"net/url"
"owl-blogs/app"
- "owl-blogs/app/repository"
"github.com/gofiber/fiber/v2"
)
type SiteMapHandler struct {
- entryService *app.EntryService
- configRepo repository.ConfigRepository
+ entryService *app.EntryService
+ siteConfigService *app.SiteConfigService
}
type Sitemap struct {
@@ -25,15 +24,18 @@ type SitemapUrl struct {
Loc string `xml:"loc"`
}
-func NewSiteMapHandler(entryService *app.EntryService, configRepo repository.ConfigRepository) *SiteMapHandler {
- return &SiteMapHandler{entryService: entryService, configRepo: configRepo}
+func NewSiteMapHandler(entryService *app.EntryService, siteConfigService *app.SiteConfigService) *SiteMapHandler {
+ return &SiteMapHandler{entryService: entryService, siteConfigService: siteConfigService}
}
// Handle handles GET /sitemap.xml
func (h *SiteMapHandler) Handle(c *fiber.Ctx) error {
c.Set(fiber.HeaderContentType, fiber.MIMEApplicationXML)
- siteConfig := getSiteConfig(h.configRepo)
+ siteConfig, err := h.siteConfigService.GetSiteConfig()
+ if err != nil {
+ return err
+ }
entries, err := h.entryService.FindAllByType(nil, true, false)
if err != nil {
return err
diff --git a/web/utils.go b/web/utils.go
index 3c9a0d6..cf7a032 100644
--- a/web/utils.go
+++ b/web/utils.go
@@ -1,23 +1,11 @@
package web
import (
- "owl-blogs/app/repository"
- "owl-blogs/config"
- "owl-blogs/domain/model"
"strconv"
"github.com/gofiber/fiber/v2"
)
-func getSiteConfig(repo repository.ConfigRepository) model.SiteConfig {
- siteConfig := model.SiteConfig{}
- err := repo.Get(config.SITE_CONFIG, &siteConfig)
- if err != nil {
- panic(err)
- }
- return siteConfig
-}
-
type paginationData[T any] struct {
items []T
page uint