119 lines
2.4 KiB
Go
119 lines
2.4 KiB
Go
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})
|
|
}
|