diff --git a/render/templates/views/site_config.tmpl b/render/templates/views/site_config.tmpl
index 90806ac..c9a10ee 100644
--- a/render/templates/views/site_config.tmpl
+++ b/render/templates/views/site_config.tmpl
@@ -2,7 +2,15 @@
{{define "main"}}
-
+
+Me Links
+
+
+
+
+ Id |
+ Title |
+ Include |
+ ListType |
+ Actions |
+
+
+
+ {{range $i, $l := .Lists}}
+
+ {{$l.Id}} |
+ {{$l.Title}} |
+ {{$l.Include}} |
+ {{$l.ListType}} |
+
+
+ |
+
+ {{end}}
+
+
+
+
+{{end}}
\ No newline at end of file
diff --git a/render/templates/views/site_config_me.tmpl b/render/templates/views/site_config_me.tmpl
new file mode 100644
index 0000000..21037a7
--- /dev/null
+++ b/render/templates/views/site_config_me.tmpl
@@ -0,0 +1,43 @@
+{{define "title"}}Editor{{end}}
+
+{{define "main"}}
+
+Create a Me Link
+
+
+Me Links
+
+
+
+
+ Name |
+ URL |
+ Actions |
+
+
+
+ {{range $i, $a := .}}
+
+ {{.Name}} |
+ {{.Url}} |
+
+
+ |
+
+ {{end}}
+
+
+
+
+{{end}}
\ No newline at end of file
diff --git a/web/app.go b/web/app.go
index e02ef5a..b420b8a 100644
--- a/web/app.go
+++ b/web/app.go
@@ -55,8 +55,20 @@ func NewWebApp(
// SiteConfig
siteConfig := app.Group("/site-config")
siteConfig.Use(middleware.NewAuthMiddleware(authorService).Handle)
- siteConfig.Get("/", NewSiteConfigHandler(siteConfigRepo).HandleGet)
- siteConfig.Post("/", NewSiteConfigHandler(siteConfigRepo).HandlePost)
+
+ siteConfigHandler := NewSiteConfigHandler(siteConfigRepo)
+ siteConfig.Get("/", siteConfigHandler.HandleGet)
+ siteConfig.Post("/", siteConfigHandler.HandlePost)
+
+ siteConfigMeHandler := NewSiteConfigMeHandler(siteConfigRepo)
+ siteConfig.Get("/me", siteConfigMeHandler.HandleGet)
+ siteConfig.Post("/me/create/", siteConfigMeHandler.HandleCreate)
+ siteConfig.Post("/me/delete/", siteConfigMeHandler.HandleDelete)
+
+ siteConfigListHandler := NewSiteConfigListHandler(siteConfigRepo, typeRegistry)
+ siteConfig.Get("/lists", siteConfigListHandler.HandleGet)
+ siteConfig.Post("/lists/create/", siteConfigListHandler.HandleCreate)
+ siteConfig.Post("/lists/delete/", siteConfigListHandler.HandleDelete)
// app.Static("/static/*filepath", http.Dir(repo.StaticDir()))
app.Use("/static", filesystem.New(filesystem.Config{
diff --git a/web/siteconfig_list_handler.go b/web/siteconfig_list_handler.go
new file mode 100644
index 0000000..d5f746e
--- /dev/null
+++ b/web/siteconfig_list_handler.go
@@ -0,0 +1,106 @@
+package web
+
+import (
+ "owl-blogs/app"
+ "owl-blogs/app/repository"
+ "owl-blogs/domain/model"
+ "owl-blogs/render"
+ "strconv"
+
+ "github.com/gofiber/fiber/v2"
+)
+
+type SiteConfigListHandler struct {
+ siteConfigRepo repository.SiteConfigRepository
+ typeRegistry *app.EntryTypeRegistry
+}
+
+type siteConfigListTemplateData struct {
+ Lists []model.EntryList
+ Types []string
+}
+
+func NewSiteConfigListHandler(
+ siteConfigRepo repository.SiteConfigRepository,
+ typeRegistry *app.EntryTypeRegistry,
+) *SiteConfigListHandler {
+ return &SiteConfigListHandler{
+ siteConfigRepo: siteConfigRepo,
+ typeRegistry: typeRegistry,
+ }
+}
+
+func (h *SiteConfigListHandler) HandleGet(c *fiber.Ctx) error {
+ c.Set(fiber.HeaderContentType, fiber.MIMETextHTML)
+
+ config, err := h.siteConfigRepo.Get()
+ if err != nil {
+ return err
+ }
+
+ types := make([]string, 0)
+ for _, t := range h.typeRegistry.Types() {
+ typeName, err := h.typeRegistry.TypeName(t)
+ if err != nil {
+ continue
+ }
+ types = append(types, typeName)
+ }
+
+ return render.RenderTemplateWithBase(
+ c, getConfig(h.siteConfigRepo), "views/site_config_list", siteConfigListTemplateData{
+ Lists: config.Lists,
+ Types: types,
+ })
+}
+
+func (h *SiteConfigListHandler) HandleCreate(c *fiber.Ctx) error {
+ c.Set(fiber.HeaderContentType, fiber.MIMETextHTML)
+
+ config, err := h.siteConfigRepo.Get()
+ if err != nil {
+ return err
+ }
+
+ form, err := c.MultipartForm()
+ if err != nil {
+ return err
+ }
+
+ config.Lists = append(config.Lists, model.EntryList{
+ Id: c.FormValue("Id"),
+ Title: c.FormValue("Title"),
+ Include: form.Value["Include"],
+ ListType: c.FormValue("ListType"),
+ })
+
+ err = h.siteConfigRepo.Update(config)
+ if err != nil {
+ return err
+ }
+
+ return c.Redirect("/site-config/lists")
+}
+
+func (h *SiteConfigListHandler) HandleDelete(c *fiber.Ctx) error {
+ c.Set(fiber.HeaderContentType, fiber.MIMETextHTML)
+
+ config, err := h.siteConfigRepo.Get()
+ if err != nil {
+ return err
+ }
+
+ id, err := strconv.Atoi(c.FormValue("idx"))
+ if err != nil {
+ return err
+ }
+
+ config.Lists = append(config.Lists[:id], config.Lists[id+1:]...)
+
+ err = h.siteConfigRepo.Update(config)
+ if err != nil {
+ return err
+ }
+
+ return c.Redirect("/site-config/lists")
+}
diff --git a/web/siteconfig_me_handler.go b/web/siteconfig_me_handler.go
new file mode 100644
index 0000000..3fdcf26
--- /dev/null
+++ b/web/siteconfig_me_handler.go
@@ -0,0 +1,75 @@
+package web
+
+import (
+ "owl-blogs/app/repository"
+ "owl-blogs/domain/model"
+ "owl-blogs/render"
+ "strconv"
+
+ "github.com/gofiber/fiber/v2"
+)
+
+type SiteConfigMeHandler struct {
+ siteConfigRepo repository.SiteConfigRepository
+}
+
+func NewSiteConfigMeHandler(siteConfigRepo repository.SiteConfigRepository) *SiteConfigMeHandler {
+ return &SiteConfigMeHandler{
+ siteConfigRepo: siteConfigRepo,
+ }
+}
+
+func (h *SiteConfigMeHandler) HandleGet(c *fiber.Ctx) error {
+ c.Set(fiber.HeaderContentType, fiber.MIMETextHTML)
+
+ config, err := h.siteConfigRepo.Get()
+ if err != nil {
+ return err
+ }
+
+ return render.RenderTemplateWithBase(
+ c, getConfig(h.siteConfigRepo), "views/site_config_me", config.Me)
+}
+
+func (h *SiteConfigMeHandler) HandleCreate(c *fiber.Ctx) error {
+ c.Set(fiber.HeaderContentType, fiber.MIMETextHTML)
+
+ config, err := h.siteConfigRepo.Get()
+ if err != nil {
+ return err
+ }
+
+ config.Me = append(config.Me, model.MeLinks{
+ Name: c.FormValue("Name"),
+ Url: c.FormValue("Url"),
+ })
+
+ err = h.siteConfigRepo.Update(config)
+ if err != nil {
+ return err
+ }
+
+ return c.Redirect("/site-config/me")
+}
+
+func (h *SiteConfigMeHandler) HandleDelete(c *fiber.Ctx) error {
+ c.Set(fiber.HeaderContentType, fiber.MIMETextHTML)
+
+ config, err := h.siteConfigRepo.Get()
+ if err != nil {
+ return err
+ }
+
+ idx, err := strconv.Atoi(c.FormValue("idx"))
+ if err != nil {
+ return err
+ }
+ config.Me = append(config.Me[:idx], config.Me[idx+1:]...)
+
+ err = h.siteConfigRepo.Update(config)
+ if err != nil {
+ return err
+ }
+
+ return c.Redirect("/site-config/me")
+}