Pages #5
|
|
@ -113,6 +113,7 @@ Starting weiro without any arguments will start the server.
|
|||
uh := handlers.UploadsHandler{UploadsService: svcs.Uploads}
|
||||
ssh := handlers.SiteSettingsHandler{SiteService: svcs.Sites}
|
||||
ch := handlers.CategoriesHandler{CategoryService: svcs.Categories}
|
||||
pgh := handlers.PagesHandler{PageService: svcs.Pages}
|
||||
|
||||
app.Get("/login", lh.Login)
|
||||
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/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("/first-run", ih.FirstRun)
|
||||
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