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}) }