From b488f9b0325b9d775ada9c7db6231ec6aa7a404b Mon Sep 17 00:00:00 2001 From: Niko Abeler Date: Wed, 19 Jul 2023 20:25:42 +0200 Subject: [PATCH] refactor site config repo to general config repo --- app/author_service.go | 16 ++--- app/author_service_test.go | 9 +-- app/repository/interfaces.go | 6 +- cmd/owl/import_v1.go | 9 ++- cmd/owl/main.go | 2 +- config/config.go | 4 ++ infra/config_repository.go | 60 ++++++++++++++++++ ...tory_test.go => config_repository_test.go} | 29 +++++---- infra/site_config_repository.go | 62 ------------------- web/app.go | 4 +- web/editor_handler.go | 6 +- web/editor_list_handler.go | 6 +- web/entry_handler.go | 6 +- web/index_handler.go | 6 +- web/login_handler.go | 6 +- web/siteconfig_handler.go | 27 ++++---- web/siteconfig_list_handler.go | 29 +++++---- web/siteconfig_me_handler.go | 27 +++++--- web/siteconfig_menus_handler.go | 35 ++++++----- web/utils.go | 8 ++- 20 files changed, 199 insertions(+), 158 deletions(-) create mode 100644 infra/config_repository.go rename infra/{site_config_repository_test.go => config_repository_test.go} (67%) delete mode 100644 infra/site_config_repository.go diff --git a/app/author_service.go b/app/author_service.go index 835749a..93d52c8 100644 --- a/app/author_service.go +++ b/app/author_service.go @@ -4,6 +4,7 @@ import ( "crypto/sha256" "fmt" "owl-blogs/app/repository" + "owl-blogs/config" "owl-blogs/domain/model" "strings" @@ -12,10 +13,10 @@ import ( type AuthorService struct { repo repository.AuthorRepository - siteConfigRepo repository.SiteConfigRepository + siteConfigRepo repository.ConfigRepository } -func NewAuthorService(repo repository.AuthorRepository, siteConfigRepo repository.SiteConfigRepository) *AuthorService { +func NewAuthorService(repo repository.AuthorRepository, siteConfigRepo repository.ConfigRepository) *AuthorService { return &AuthorService{repo: repo, siteConfigRepo: siteConfigRepo} } @@ -49,18 +50,19 @@ func (s *AuthorService) Authenticate(name string, password string) bool { } func (s *AuthorService) getSecretKey() string { - config, err := s.siteConfigRepo.Get() + siteConfig := model.SiteConfig{} + err := s.siteConfigRepo.Get(config.SITE_CONFIG, &siteConfig) if err != nil { panic(err) } - if config.Secret == "" { - config.Secret = RandStringRunes(64) - err = s.siteConfigRepo.Update(config) + if siteConfig.Secret == "" { + siteConfig.Secret = RandStringRunes(64) + err = s.siteConfigRepo.Update(config.SITE_CONFIG, siteConfig) if err != nil { panic(err) } } - return config.Secret + return siteConfig.Secret } func (s *AuthorService) CreateToken(name string) (string, error) { diff --git a/app/author_service_test.go b/app/author_service_test.go index 409ea49..856a920 100644 --- a/app/author_service_test.go +++ b/app/author_service_test.go @@ -16,13 +16,14 @@ type testConfigRepo struct { } // Get implements repository.SiteConfigRepository. -func (c *testConfigRepo) Get() (model.SiteConfig, error) { - return c.config, nil +func (c *testConfigRepo) Get(name string, result interface{}) error { + *result.(*model.SiteConfig) = c.config + return nil } // Update implements repository.SiteConfigRepository. -func (c *testConfigRepo) Update(siteConfig model.SiteConfig) error { - c.config = siteConfig +func (c *testConfigRepo) Update(name string, result interface{}) error { + c.config = result.(model.SiteConfig) return nil } diff --git a/app/repository/interfaces.go b/app/repository/interfaces.go index d0294c4..f57c5b7 100644 --- a/app/repository/interfaces.go +++ b/app/repository/interfaces.go @@ -30,7 +30,7 @@ type AuthorRepository interface { FindByName(name string) (*model.Author, error) } -type SiteConfigRepository interface { - Get() (model.SiteConfig, error) - Update(siteConfig model.SiteConfig) error +type ConfigRepository interface { + Get(name string, config interface{}) error + Update(name string, siteConfig interface{}) error } diff --git a/cmd/owl/import_v1.go b/cmd/owl/import_v1.go index ee811ba..8604a49 100644 --- a/cmd/owl/import_v1.go +++ b/cmd/owl/import_v1.go @@ -3,6 +3,7 @@ package main import ( "fmt" "os" + "owl-blogs/config" "owl-blogs/domain/model" entrytypes "owl-blogs/entry_types" "owl-blogs/importer" @@ -84,7 +85,11 @@ var importCmd = &cobra.Command{ }) } - v2Config, _ := app.SiteConfigRepo.Get() + v2Config := &model.SiteConfig{} + err = app.SiteConfigRepo.Get(config.SITE_CONFIG, v2Config) + if err != nil { + panic(err) + } v2Config.Title = v1Config.Title v2Config.SubTitle = v1Config.SubTitle v2Config.HeaderColor = v1Config.HeaderColor @@ -95,7 +100,7 @@ var importCmd = &cobra.Command{ v2Config.HeaderMenu = headerMenu v2Config.FooterMenu = footerMenu - err = app.SiteConfigRepo.Update(v2Config) + err = app.SiteConfigRepo.Update(config.SITE_CONFIG, v2Config) if err != nil { panic(err) } diff --git a/cmd/owl/main.go b/cmd/owl/main.go index 0d6406b..3f244c3 100644 --- a/cmd/owl/main.go +++ b/cmd/owl/main.go @@ -38,7 +38,7 @@ func App(db infra.Database) *web.WebApp { entryRepo := infra.NewEntryRepository(db, registry) binRepo := infra.NewBinaryFileRepo(db) authorRepo := infra.NewDefaultAuthorRepo(db) - siteConfigRepo := infra.NewSiteConfigRepo(db) + siteConfigRepo := infra.NewConfigRepo(db) entryService := app.NewEntryService(entryRepo) binaryService := app.NewBinaryFileService(binRepo) diff --git a/config/config.go b/config/config.go index 1d0eedb..b7ce95d 100644 --- a/config/config.go +++ b/config/config.go @@ -2,6 +2,10 @@ package config import "os" +const ( + SITE_CONFIG = "site_config" +) + type Config interface { } diff --git a/infra/config_repository.go b/infra/config_repository.go new file mode 100644 index 0000000..c9e6e60 --- /dev/null +++ b/infra/config_repository.go @@ -0,0 +1,60 @@ +package infra + +import ( + "encoding/json" + "owl-blogs/app/repository" + + "github.com/jmoiron/sqlx" +) + +type DefaultConfigRepo struct { + db *sqlx.DB +} + +func NewConfigRepo(db Database) repository.ConfigRepository { + sqlxdb := db.Get() + + sqlxdb.MustExec(` + CREATE TABLE IF NOT EXISTS site_config ( + name TEXT PRIMARY KEY, + config TEXT + ); + `) + + return &DefaultConfigRepo{ + db: sqlxdb, + } +} + +// Get implements repository.SiteConfigRepository. +func (r *DefaultConfigRepo) Get(name string, result interface{}) error { + data := []byte{} + err := r.db.Get(&data, "SELECT config FROM site_config WHERE name = ?", name) + if err != nil { + if err.Error() == "sql: no rows in result set" { + return nil + } + return err + } + if len(data) == 0 { + return nil + } + return json.Unmarshal(data, result) +} + +// Update implements repository.SiteConfigRepository. +func (r *DefaultConfigRepo) Update(name string, siteConfig interface{}) error { + jsonData, err := json.Marshal(siteConfig) + if err != nil { + return err + } + res, err := r.db.Exec("UPDATE site_config SET config = ? WHERE name = ?", jsonData, name) + if err != nil { + return err + } + rows, err := res.RowsAffected() + if rows == 0 { + _, err = r.db.Exec("INSERT INTO site_config (name, config) VALUES (?, ?)", name, jsonData) + } + return err +} diff --git a/infra/site_config_repository_test.go b/infra/config_repository_test.go similarity index 67% rename from infra/site_config_repository_test.go rename to infra/config_repository_test.go index b16641c..db4e24e 100644 --- a/infra/site_config_repository_test.go +++ b/infra/config_repository_test.go @@ -2,6 +2,7 @@ package infra_test import ( "owl-blogs/app/repository" + "owl-blogs/domain/model" "owl-blogs/infra" "owl-blogs/test" "testing" @@ -9,16 +10,17 @@ import ( "github.com/stretchr/testify/require" ) -func setupSiteConfigRepo() repository.SiteConfigRepository { +func setupSiteConfigRepo() repository.ConfigRepository { db := test.NewMockDb() - repo := infra.NewSiteConfigRepo(db) + repo := infra.NewConfigRepo(db) return repo } func TestSiteConfigRepo(t *testing.T) { repo := setupSiteConfigRepo() - config, err := repo.Get() + config := model.SiteConfig{} + err := repo.Get("test", &config) require.NoError(t, err) require.Equal(t, "", config.Title) require.Equal(t, "", config.SubTitle) @@ -26,10 +28,11 @@ func TestSiteConfigRepo(t *testing.T) { config.Title = "title" config.SubTitle = "SubTitle" - err = repo.Update(config) + err = repo.Update("test", config) require.NoError(t, err) - config2, err := repo.Get() + config2 := model.SiteConfig{} + err = repo.Get("test", &config2) require.NoError(t, err) require.Equal(t, "title", config2.Title) require.Equal(t, "SubTitle", config2.SubTitle) @@ -37,8 +40,8 @@ func TestSiteConfigRepo(t *testing.T) { func TestSiteConfigUpdates(t *testing.T) { repo := setupSiteConfigRepo() - - config, err := repo.Get() + config := model.SiteConfig{} + err := repo.Get("test", &config) require.NoError(t, err) require.Equal(t, "", config.Title) require.Equal(t, "", config.SubTitle) @@ -46,10 +49,10 @@ func TestSiteConfigUpdates(t *testing.T) { config.Title = "title" config.SubTitle = "SubTitle" - err = repo.Update(config) + err = repo.Update("test", config) require.NoError(t, err) - - config2, err := repo.Get() + config2 := model.SiteConfig{} + err = repo.Get("test", &config2) require.NoError(t, err) require.Equal(t, "title", config2.Title) require.Equal(t, "SubTitle", config2.SubTitle) @@ -57,10 +60,10 @@ func TestSiteConfigUpdates(t *testing.T) { config2.Title = "title2" config2.SubTitle = "SubTitle2" - err = repo.Update(config2) + err = repo.Update("test", config2) require.NoError(t, err) - - config3, err := repo.Get() + config3 := model.SiteConfig{} + err = repo.Get("test", &config3) require.NoError(t, err) require.Equal(t, "title2", config3.Title) require.Equal(t, "SubTitle2", config3.SubTitle) diff --git a/infra/site_config_repository.go b/infra/site_config_repository.go deleted file mode 100644 index 0d302f3..0000000 --- a/infra/site_config_repository.go +++ /dev/null @@ -1,62 +0,0 @@ -package infra - -import ( - "encoding/json" - "owl-blogs/app/repository" - "owl-blogs/domain/model" - - "github.com/jmoiron/sqlx" -) - -type DefaultSiteConfigRepo struct { - db *sqlx.DB -} - -func NewSiteConfigRepo(db Database) repository.SiteConfigRepository { - sqlxdb := db.Get() - - sqlxdb.MustExec(` - CREATE TABLE IF NOT EXISTS site_config ( - config TEXT - ); - `) - - return &DefaultSiteConfigRepo{ - db: sqlxdb, - } -} - -// Get implements repository.SiteConfigRepository. -func (r *DefaultSiteConfigRepo) Get() (model.SiteConfig, error) { - data := []byte{} - err := r.db.Get(&data, "SELECT config FROM site_config LIMIT 1") - if err != nil { - if err.Error() == "sql: no rows in result set" { - return model.SiteConfig{}, nil - } - return model.SiteConfig{}, err - } - if len(data) == 0 { - return model.SiteConfig{}, nil - } - config := model.SiteConfig{} - err = json.Unmarshal(data, &config) - return config, err -} - -// Update implements repository.SiteConfigRepository. -func (r *DefaultSiteConfigRepo) Update(siteConfig model.SiteConfig) error { - jsonData, err := json.Marshal(siteConfig) - if err != nil { - return err - } - res, err := r.db.Exec("UPDATE site_config SET config = ?", jsonData) - if err != nil { - return err - } - rows, err := res.RowsAffected() - if rows == 0 { - _, err = r.db.Exec("INSERT INTO site_config (config) VALUES (?)", jsonData) - } - return err -} diff --git a/web/app.go b/web/app.go index 0c12859..3ec68fc 100644 --- a/web/app.go +++ b/web/app.go @@ -20,7 +20,7 @@ type WebApp struct { BinaryService *app.BinaryService Registry *app.EntryTypeRegistry AuthorService *app.AuthorService - SiteConfigRepo repository.SiteConfigRepository + SiteConfigRepo repository.ConfigRepository } func NewWebApp( @@ -28,7 +28,7 @@ func NewWebApp( typeRegistry *app.EntryTypeRegistry, binService *app.BinaryService, authorService *app.AuthorService, - siteConfigRepo repository.SiteConfigRepository, + siteConfigRepo repository.ConfigRepository, ) *WebApp { app := fiber.New() diff --git a/web/editor_handler.go b/web/editor_handler.go index 7335713..9c83504 100644 --- a/web/editor_handler.go +++ b/web/editor_handler.go @@ -12,7 +12,7 @@ import ( ) type EditorHandler struct { - configRepo repository.SiteConfigRepository + configRepo repository.ConfigRepository entrySvc *app.EntryService binSvc *app.BinaryService registry *app.EntryTypeRegistry @@ -22,7 +22,7 @@ func NewEditorHandler( entryService *app.EntryService, registry *app.EntryTypeRegistry, binService *app.BinaryService, - configRepo repository.SiteConfigRepository, + configRepo repository.ConfigRepository, ) *EditorHandler { return &EditorHandler{ entrySvc: entryService, @@ -54,7 +54,7 @@ func (h *EditorHandler) HandleGet(c *fiber.Ctx) error { if err != nil { return err } - return render.RenderTemplateWithBase(c, getConfig(h.configRepo), "views/editor", htmlForm) + return render.RenderTemplateWithBase(c, getSiteConfig(h.configRepo), "views/editor", htmlForm) } func (h *EditorHandler) HandlePost(c *fiber.Ctx) error { diff --git a/web/editor_list_handler.go b/web/editor_list_handler.go index 8218b16..dc66a0d 100644 --- a/web/editor_list_handler.go +++ b/web/editor_list_handler.go @@ -9,7 +9,7 @@ import ( ) type EditorListHandler struct { - configRepo repository.SiteConfigRepository + configRepo repository.ConfigRepository registry *app.EntryTypeRegistry } @@ -18,7 +18,7 @@ type EditorListContext struct { } func NewEditorListHandler(registry *app.EntryTypeRegistry, - configRepo repository.SiteConfigRepository) *EditorListHandler { + configRepo repository.ConfigRepository) *EditorListHandler { return &EditorListHandler{ registry: registry, configRepo: configRepo, @@ -37,5 +37,5 @@ func (h *EditorListHandler) Handle(c *fiber.Ctx) error { typeNames = append(typeNames, name) } - return render.RenderTemplateWithBase(c, getConfig(h.configRepo), "views/editor_list", &EditorListContext{Types: typeNames}) + return render.RenderTemplateWithBase(c, getSiteConfig(h.configRepo), "views/editor_list", &EditorListContext{Types: typeNames}) } diff --git a/web/entry_handler.go b/web/entry_handler.go index 4c7dd32..2a94070 100644 --- a/web/entry_handler.go +++ b/web/entry_handler.go @@ -10,7 +10,7 @@ import ( ) type EntryHandler struct { - configRepo repository.SiteConfigRepository + configRepo repository.ConfigRepository entrySvc *app.EntryService authorSvc *app.AuthorService registry *app.EntryTypeRegistry @@ -25,7 +25,7 @@ func NewEntryHandler( entryService *app.EntryService, registry *app.EntryTypeRegistry, authorService *app.AuthorService, - configRepo repository.SiteConfigRepository, + configRepo repository.ConfigRepository, ) *EntryHandler { return &EntryHandler{ entrySvc: entryService, @@ -49,5 +49,5 @@ func (h *EntryHandler) Handle(c *fiber.Ctx) error { author = &model.Author{} } - return render.RenderTemplateWithBase(c, getConfig(h.configRepo), "views/entry", entryData{Entry: entry, Author: author}) + return render.RenderTemplateWithBase(c, getSiteConfig(h.configRepo), "views/entry", entryData{Entry: entry, Author: author}) } diff --git a/web/index_handler.go b/web/index_handler.go index 29b6ad8..59551ba 100644 --- a/web/index_handler.go +++ b/web/index_handler.go @@ -12,13 +12,13 @@ import ( ) type IndexHandler struct { - configRepo repository.SiteConfigRepository + configRepo repository.ConfigRepository entrySvc *app.EntryService } func NewIndexHandler( entryService *app.EntryService, - configRepo repository.SiteConfigRepository, + configRepo repository.ConfigRepository, ) *IndexHandler { return &IndexHandler{ entrySvc: entryService, @@ -73,7 +73,7 @@ func (h *IndexHandler) Handle(c *fiber.Ctx) error { return err } - return render.RenderTemplateWithBase(c, getConfig(h.configRepo), "views/index", indexRenderData{ + return render.RenderTemplateWithBase(c, getSiteConfig(h.configRepo), "views/index", indexRenderData{ Entries: entries, Page: pageNum, NextPage: pageNum + 1, diff --git a/web/login_handler.go b/web/login_handler.go index 43262a3..11ae56d 100644 --- a/web/login_handler.go +++ b/web/login_handler.go @@ -10,13 +10,13 @@ import ( ) type LoginHandler struct { - configRepo repository.SiteConfigRepository + configRepo repository.ConfigRepository authorService *app.AuthorService } func NewLoginHandler( authorService *app.AuthorService, - configRepo repository.SiteConfigRepository, + configRepo repository.ConfigRepository, ) *LoginHandler { return &LoginHandler{ authorService: authorService, @@ -26,7 +26,7 @@ func NewLoginHandler( func (h *LoginHandler) HandleGet(c *fiber.Ctx) error { c.Set(fiber.HeaderContentType, fiber.MIMETextHTML) - return render.RenderTemplateWithBase(c, getConfig(h.configRepo), "views/login", nil) + return render.RenderTemplateWithBase(c, getSiteConfig(h.configRepo), "views/login", nil) } func (h *LoginHandler) HandlePost(c *fiber.Ctx) error { diff --git a/web/siteconfig_handler.go b/web/siteconfig_handler.go index c3c3cbc..0e62e25 100644 --- a/web/siteconfig_handler.go +++ b/web/siteconfig_handler.go @@ -2,16 +2,18 @@ package web import ( "owl-blogs/app/repository" + "owl-blogs/config" + "owl-blogs/domain/model" "owl-blogs/render" "github.com/gofiber/fiber/v2" ) type SiteConfigHandler struct { - siteConfigRepo repository.SiteConfigRepository + siteConfigRepo repository.ConfigRepository } -func NewSiteConfigHandler(siteConfigRepo repository.SiteConfigRepository) *SiteConfigHandler { +func NewSiteConfigHandler(siteConfigRepo repository.ConfigRepository) *SiteConfigHandler { return &SiteConfigHandler{ siteConfigRepo: siteConfigRepo, } @@ -20,29 +22,32 @@ func NewSiteConfigHandler(siteConfigRepo repository.SiteConfigRepository) *SiteC func (h *SiteConfigHandler) HandleGet(c *fiber.Ctx) error { c.Set(fiber.HeaderContentType, fiber.MIMETextHTML) - config, err := h.siteConfigRepo.Get() + siteConfig := model.SiteConfig{} + err := h.siteConfigRepo.Get(config.SITE_CONFIG, &siteConfig) if err != nil { return err } - return render.RenderTemplateWithBase(c, getConfig(h.siteConfigRepo), "views/site_config", config) + return render.RenderTemplateWithBase(c, getSiteConfig(h.siteConfigRepo), "views/site_config", siteConfig) } func (h *SiteConfigHandler) HandlePost(c *fiber.Ctx) error { c.Set(fiber.HeaderContentType, fiber.MIMETextHTML) - config, err := h.siteConfigRepo.Get() + siteConfig := model.SiteConfig{} + err := h.siteConfigRepo.Get(config.SITE_CONFIG, &siteConfig) + if err != nil { return err } - config.Title = c.FormValue("Title") - config.SubTitle = c.FormValue("SubTitle") - config.HeaderColor = c.FormValue("HeaderColor") - config.AuthorName = c.FormValue("AuthorName") - config.AvatarUrl = c.FormValue("AvatarUrl") + siteConfig.Title = c.FormValue("Title") + siteConfig.SubTitle = c.FormValue("SubTitle") + siteConfig.HeaderColor = c.FormValue("HeaderColor") + siteConfig.AuthorName = c.FormValue("AuthorName") + siteConfig.AvatarUrl = c.FormValue("AvatarUrl") - err = h.siteConfigRepo.Update(config) + err = h.siteConfigRepo.Update(config.SITE_CONFIG, siteConfig) if err != nil { return err } diff --git a/web/siteconfig_list_handler.go b/web/siteconfig_list_handler.go index d5f746e..963e3e5 100644 --- a/web/siteconfig_list_handler.go +++ b/web/siteconfig_list_handler.go @@ -3,6 +3,7 @@ package web import ( "owl-blogs/app" "owl-blogs/app/repository" + "owl-blogs/config" "owl-blogs/domain/model" "owl-blogs/render" "strconv" @@ -11,7 +12,7 @@ import ( ) type SiteConfigListHandler struct { - siteConfigRepo repository.SiteConfigRepository + siteConfigRepo repository.ConfigRepository typeRegistry *app.EntryTypeRegistry } @@ -21,7 +22,7 @@ type siteConfigListTemplateData struct { } func NewSiteConfigListHandler( - siteConfigRepo repository.SiteConfigRepository, + siteConfigRepo repository.ConfigRepository, typeRegistry *app.EntryTypeRegistry, ) *SiteConfigListHandler { return &SiteConfigListHandler{ @@ -33,7 +34,9 @@ func NewSiteConfigListHandler( func (h *SiteConfigListHandler) HandleGet(c *fiber.Ctx) error { c.Set(fiber.HeaderContentType, fiber.MIMETextHTML) - config, err := h.siteConfigRepo.Get() + siteConfig := model.SiteConfig{} + err := h.siteConfigRepo.Get(config.SITE_CONFIG, &siteConfig) + if err != nil { return err } @@ -48,8 +51,8 @@ func (h *SiteConfigListHandler) HandleGet(c *fiber.Ctx) error { } return render.RenderTemplateWithBase( - c, getConfig(h.siteConfigRepo), "views/site_config_list", siteConfigListTemplateData{ - Lists: config.Lists, + c, getSiteConfig(h.siteConfigRepo), "views/site_config_list", siteConfigListTemplateData{ + Lists: siteConfig.Lists, Types: types, }) } @@ -57,7 +60,9 @@ func (h *SiteConfigListHandler) HandleGet(c *fiber.Ctx) error { func (h *SiteConfigListHandler) HandleCreate(c *fiber.Ctx) error { c.Set(fiber.HeaderContentType, fiber.MIMETextHTML) - config, err := h.siteConfigRepo.Get() + siteConfig := model.SiteConfig{} + err := h.siteConfigRepo.Get(config.SITE_CONFIG, &siteConfig) + if err != nil { return err } @@ -67,14 +72,14 @@ func (h *SiteConfigListHandler) HandleCreate(c *fiber.Ctx) error { return err } - config.Lists = append(config.Lists, model.EntryList{ + siteConfig.Lists = append(siteConfig.Lists, model.EntryList{ Id: c.FormValue("Id"), Title: c.FormValue("Title"), Include: form.Value["Include"], ListType: c.FormValue("ListType"), }) - err = h.siteConfigRepo.Update(config) + err = h.siteConfigRepo.Update(config.SITE_CONFIG, siteConfig) if err != nil { return err } @@ -85,7 +90,9 @@ func (h *SiteConfigListHandler) HandleCreate(c *fiber.Ctx) error { func (h *SiteConfigListHandler) HandleDelete(c *fiber.Ctx) error { c.Set(fiber.HeaderContentType, fiber.MIMETextHTML) - config, err := h.siteConfigRepo.Get() + siteConfig := model.SiteConfig{} + err := h.siteConfigRepo.Get(config.SITE_CONFIG, &siteConfig) + if err != nil { return err } @@ -95,9 +102,9 @@ func (h *SiteConfigListHandler) HandleDelete(c *fiber.Ctx) error { return err } - config.Lists = append(config.Lists[:id], config.Lists[id+1:]...) + siteConfig.Lists = append(siteConfig.Lists[:id], siteConfig.Lists[id+1:]...) - err = h.siteConfigRepo.Update(config) + err = h.siteConfigRepo.Update(config.SITE_CONFIG, siteConfig) if err != nil { return err } diff --git a/web/siteconfig_me_handler.go b/web/siteconfig_me_handler.go index 3fdcf26..3fdad35 100644 --- a/web/siteconfig_me_handler.go +++ b/web/siteconfig_me_handler.go @@ -2,6 +2,7 @@ package web import ( "owl-blogs/app/repository" + "owl-blogs/config" "owl-blogs/domain/model" "owl-blogs/render" "strconv" @@ -10,10 +11,10 @@ import ( ) type SiteConfigMeHandler struct { - siteConfigRepo repository.SiteConfigRepository + siteConfigRepo repository.ConfigRepository } -func NewSiteConfigMeHandler(siteConfigRepo repository.SiteConfigRepository) *SiteConfigMeHandler { +func NewSiteConfigMeHandler(siteConfigRepo repository.ConfigRepository) *SiteConfigMeHandler { return &SiteConfigMeHandler{ siteConfigRepo: siteConfigRepo, } @@ -22,29 +23,33 @@ func NewSiteConfigMeHandler(siteConfigRepo repository.SiteConfigRepository) *Sit func (h *SiteConfigMeHandler) HandleGet(c *fiber.Ctx) error { c.Set(fiber.HeaderContentType, fiber.MIMETextHTML) - config, err := h.siteConfigRepo.Get() + siteConfig := model.SiteConfig{} + err := h.siteConfigRepo.Get(config.SITE_CONFIG, &siteConfig) + if err != nil { return err } return render.RenderTemplateWithBase( - c, getConfig(h.siteConfigRepo), "views/site_config_me", config.Me) + c, getSiteConfig(h.siteConfigRepo), "views/site_config_me", siteConfig.Me) } func (h *SiteConfigMeHandler) HandleCreate(c *fiber.Ctx) error { c.Set(fiber.HeaderContentType, fiber.MIMETextHTML) - config, err := h.siteConfigRepo.Get() + siteConfig := model.SiteConfig{} + err := h.siteConfigRepo.Get(config.SITE_CONFIG, &siteConfig) + if err != nil { return err } - config.Me = append(config.Me, model.MeLinks{ + siteConfig.Me = append(siteConfig.Me, model.MeLinks{ Name: c.FormValue("Name"), Url: c.FormValue("Url"), }) - err = h.siteConfigRepo.Update(config) + err = h.siteConfigRepo.Update(config.SITE_CONFIG, siteConfig) if err != nil { return err } @@ -55,7 +60,9 @@ func (h *SiteConfigMeHandler) HandleCreate(c *fiber.Ctx) error { func (h *SiteConfigMeHandler) HandleDelete(c *fiber.Ctx) error { c.Set(fiber.HeaderContentType, fiber.MIMETextHTML) - config, err := h.siteConfigRepo.Get() + siteConfig := model.SiteConfig{} + err := h.siteConfigRepo.Get(config.SITE_CONFIG, &siteConfig) + if err != nil { return err } @@ -64,9 +71,9 @@ func (h *SiteConfigMeHandler) HandleDelete(c *fiber.Ctx) error { if err != nil { return err } - config.Me = append(config.Me[:idx], config.Me[idx+1:]...) + siteConfig.Me = append(siteConfig.Me[:idx], siteConfig.Me[idx+1:]...) - err = h.siteConfigRepo.Update(config) + err = h.siteConfigRepo.Update(config.SITE_CONFIG, siteConfig) if err != nil { return err } diff --git a/web/siteconfig_menus_handler.go b/web/siteconfig_menus_handler.go index 0236c9e..3babe6b 100644 --- a/web/siteconfig_menus_handler.go +++ b/web/siteconfig_menus_handler.go @@ -2,6 +2,7 @@ package web import ( "owl-blogs/app/repository" + "owl-blogs/config" "owl-blogs/domain/model" "owl-blogs/render" "strconv" @@ -10,7 +11,7 @@ import ( ) type SiteConfigMenusHandler struct { - siteConfigRepo repository.SiteConfigRepository + siteConfigRepo repository.ConfigRepository } type siteConfigMenusTemplateData struct { @@ -18,7 +19,7 @@ type siteConfigMenusTemplateData struct { FooterMenu []model.MenuItem } -func NewSiteConfigMenusHandler(siteConfigRepo repository.SiteConfigRepository) *SiteConfigMenusHandler { +func NewSiteConfigMenusHandler(siteConfigRepo repository.ConfigRepository) *SiteConfigMenusHandler { return &SiteConfigMenusHandler{ siteConfigRepo: siteConfigRepo, } @@ -27,22 +28,26 @@ func NewSiteConfigMenusHandler(siteConfigRepo repository.SiteConfigRepository) * func (h *SiteConfigMenusHandler) HandleGet(c *fiber.Ctx) error { c.Set(fiber.HeaderContentType, fiber.MIMETextHTML) - config, err := h.siteConfigRepo.Get() + siteConfig := model.SiteConfig{} + err := h.siteConfigRepo.Get(config.SITE_CONFIG, &siteConfig) + if err != nil { return err } return render.RenderTemplateWithBase( - c, getConfig(h.siteConfigRepo), "views/site_config_menus", siteConfigMenusTemplateData{ - HeaderMenu: config.HeaderMenu, - FooterMenu: config.FooterMenu, + c, getSiteConfig(h.siteConfigRepo), "views/site_config_menus", siteConfigMenusTemplateData{ + HeaderMenu: siteConfig.HeaderMenu, + FooterMenu: siteConfig.FooterMenu, }) } func (h *SiteConfigMenusHandler) HandleCreate(c *fiber.Ctx) error { c.Set(fiber.HeaderContentType, fiber.MIMETextHTML) - config, err := h.siteConfigRepo.Get() + siteConfig := model.SiteConfig{} + err := h.siteConfigRepo.Get(config.SITE_CONFIG, &siteConfig) + if err != nil { return err } @@ -55,12 +60,12 @@ func (h *SiteConfigMenusHandler) HandleCreate(c *fiber.Ctx) error { } if c.FormValue("menu") == "header" { - config.HeaderMenu = append(config.HeaderMenu, menuItem) + siteConfig.HeaderMenu = append(siteConfig.HeaderMenu, menuItem) } else if c.FormValue("menu") == "footer" { - config.FooterMenu = append(config.FooterMenu, menuItem) + siteConfig.FooterMenu = append(siteConfig.FooterMenu, menuItem) } - err = h.siteConfigRepo.Update(config) + err = h.siteConfigRepo.Update(config.SITE_CONFIG, siteConfig) if err != nil { return err } @@ -71,7 +76,9 @@ func (h *SiteConfigMenusHandler) HandleCreate(c *fiber.Ctx) error { func (h *SiteConfigMenusHandler) HandleDelete(c *fiber.Ctx) error { c.Set(fiber.HeaderContentType, fiber.MIMETextHTML) - config, err := h.siteConfigRepo.Get() + siteConfig := model.SiteConfig{} + err := h.siteConfigRepo.Get(config.SITE_CONFIG, &siteConfig) + if err != nil { return err } @@ -83,12 +90,12 @@ func (h *SiteConfigMenusHandler) HandleDelete(c *fiber.Ctx) error { } if menu == "header" { - config.HeaderMenu = append(config.HeaderMenu[:idx], config.HeaderMenu[idx+1:]...) + siteConfig.HeaderMenu = append(siteConfig.HeaderMenu[:idx], siteConfig.HeaderMenu[idx+1:]...) } else if menu == "footer" { - config.FooterMenu = append(config.FooterMenu[:idx], config.FooterMenu[idx+1:]...) + siteConfig.FooterMenu = append(siteConfig.FooterMenu[:idx], siteConfig.FooterMenu[idx+1:]...) } - err = h.siteConfigRepo.Update(config) + err = h.siteConfigRepo.Update(config.SITE_CONFIG, siteConfig) if err != nil { return err } diff --git a/web/utils.go b/web/utils.go index 6967195..818b1f9 100644 --- a/web/utils.go +++ b/web/utils.go @@ -2,13 +2,15 @@ package web import ( "owl-blogs/app/repository" + "owl-blogs/config" "owl-blogs/domain/model" ) -func getConfig(repo repository.SiteConfigRepository) model.SiteConfig { - config, err := repo.Get() +func getSiteConfig(repo repository.ConfigRepository) model.SiteConfig { + siteConfig := model.SiteConfig{} + err := repo.Get(config.SITE_CONFIG, &siteConfig) if err != nil { panic(err) } - return config + return siteConfig }