feat(pages): add pages handler and admin routes
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
parent
1edcd7686c
commit
f386403ced
|
|
@ -113,6 +113,7 @@ Starting weiro without any arguments will start the server.
|
||||||
uh := handlers.UploadsHandler{UploadsService: svcs.Uploads}
|
uh := handlers.UploadsHandler{UploadsService: svcs.Uploads}
|
||||||
ssh := handlers.SiteSettingsHandler{SiteService: svcs.Sites}
|
ssh := handlers.SiteSettingsHandler{SiteService: svcs.Sites}
|
||||||
ch := handlers.CategoriesHandler{CategoryService: svcs.Categories}
|
ch := handlers.CategoriesHandler{CategoryService: svcs.Categories}
|
||||||
|
pgh := handlers.PagesHandler{PageService: svcs.Pages}
|
||||||
|
|
||||||
app.Get("/login", lh.Login)
|
app.Get("/login", lh.Login)
|
||||||
app.Post("/login", lh.DoLogin)
|
app.Post("/login", lh.DoLogin)
|
||||||
|
|
@ -149,6 +150,14 @@ Starting weiro without any arguments will start the server.
|
||||||
siteGroup.Post("/categories/:categoryID", ch.Update)
|
siteGroup.Post("/categories/:categoryID", ch.Update)
|
||||||
siteGroup.Post("/categories/:categoryID/delete", ch.Delete)
|
siteGroup.Post("/categories/:categoryID/delete", ch.Delete)
|
||||||
|
|
||||||
|
siteGroup.Get("/pages", pgh.Index)
|
||||||
|
siteGroup.Get("/pages/new", pgh.New)
|
||||||
|
siteGroup.Get("/pages/:pageID", pgh.Edit)
|
||||||
|
siteGroup.Post("/pages", pgh.Create)
|
||||||
|
siteGroup.Post("/pages/reorder", pgh.Reorder)
|
||||||
|
siteGroup.Post("/pages/:pageID", pgh.Update)
|
||||||
|
siteGroup.Post("/pages/:pageID/delete", pgh.Delete)
|
||||||
|
|
||||||
app.Get("/", middleware.OptionalUser(svcs.Auth), ih.Index)
|
app.Get("/", middleware.OptionalUser(svcs.Auth), ih.Index)
|
||||||
app.Get("/first-run", ih.FirstRun)
|
app.Get("/first-run", ih.FirstRun)
|
||||||
app.Post("/first-run", ih.FirstRunSubmit)
|
app.Post("/first-run", ih.FirstRunSubmit)
|
||||||
|
|
|
||||||
118
handlers/pages.go
Normal file
118
handlers/pages.go
Normal file
|
|
@ -0,0 +1,118 @@
|
||||||
|
package handlers
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"strconv"
|
||||||
|
|
||||||
|
"github.com/gofiber/fiber/v3"
|
||||||
|
"lmika.dev/lmika/weiro/models"
|
||||||
|
"lmika.dev/lmika/weiro/services/pages"
|
||||||
|
)
|
||||||
|
|
||||||
|
type PagesHandler struct {
|
||||||
|
PageService *pages.Service
|
||||||
|
}
|
||||||
|
|
||||||
|
func (ph PagesHandler) Index(c fiber.Ctx) error {
|
||||||
|
pagesList, err := ph.PageService.ListPages(c.Context())
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
return c.Render("pages/index", fiber.Map{
|
||||||
|
"pages": pagesList,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
func (ph PagesHandler) New(c fiber.Ctx) error {
|
||||||
|
page := models.Page{
|
||||||
|
GUID: models.NewNanoID(),
|
||||||
|
}
|
||||||
|
return c.Render("pages/edit", fiber.Map{
|
||||||
|
"page": page,
|
||||||
|
"isNew": true,
|
||||||
|
"bodyClass": "page-edit-page",
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
func (ph PagesHandler) Edit(c fiber.Ctx) error {
|
||||||
|
pageID, err := strconv.ParseInt(c.Params("pageID"), 10, 64)
|
||||||
|
if err != nil {
|
||||||
|
return fiber.ErrBadRequest
|
||||||
|
}
|
||||||
|
|
||||||
|
page, err := ph.PageService.GetPage(c.Context(), pageID)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
return c.Render("pages/edit", fiber.Map{
|
||||||
|
"page": page,
|
||||||
|
"isNew": false,
|
||||||
|
"bodyClass": "page-edit-page",
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
func (ph PagesHandler) Create(c fiber.Ctx) error {
|
||||||
|
var req pages.CreatePageParams
|
||||||
|
if err := c.Bind().Body(&req); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
_, err := ph.PageService.CreatePage(c.Context(), req)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
site := models.MustGetSite(c.Context())
|
||||||
|
return c.Redirect().To(fmt.Sprintf("/sites/%v/pages", site.ID))
|
||||||
|
}
|
||||||
|
|
||||||
|
func (ph PagesHandler) Update(c fiber.Ctx) error {
|
||||||
|
pageID, err := strconv.ParseInt(c.Params("pageID"), 10, 64)
|
||||||
|
if err != nil {
|
||||||
|
return fiber.ErrBadRequest
|
||||||
|
}
|
||||||
|
|
||||||
|
var req pages.CreatePageParams
|
||||||
|
if err := c.Bind().Body(&req); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
_, err = ph.PageService.UpdatePage(c.Context(), pageID, req)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
site := models.MustGetSite(c.Context())
|
||||||
|
return c.Redirect().To(fmt.Sprintf("/sites/%v/pages", site.ID))
|
||||||
|
}
|
||||||
|
|
||||||
|
func (ph PagesHandler) Delete(c fiber.Ctx) error {
|
||||||
|
pageID, err := strconv.ParseInt(c.Params("pageID"), 10, 64)
|
||||||
|
if err != nil {
|
||||||
|
return fiber.ErrBadRequest
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := ph.PageService.DeletePage(c.Context(), pageID); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
site := models.MustGetSite(c.Context())
|
||||||
|
return c.Redirect().To(fmt.Sprintf("/sites/%v/pages", site.ID))
|
||||||
|
}
|
||||||
|
|
||||||
|
func (ph PagesHandler) Reorder(c fiber.Ctx) error {
|
||||||
|
var req struct {
|
||||||
|
PageIDs []int64 `json:"page_ids"`
|
||||||
|
}
|
||||||
|
if err := c.Bind().Body(&req); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := ph.PageService.ReorderPages(c.Context(), req.PageIDs); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
return c.JSON(fiber.Map{"ok": true})
|
||||||
|
}
|
||||||
Loading…
Reference in a new issue