package handlers import ( "fmt" "strconv" "github.com/gofiber/fiber/v3" "lmika.dev/lmika/weiro/models" "lmika.dev/lmika/weiro/services/categories" ) type CategoriesHandler struct { CategoryService *categories.Service } func (ch CategoriesHandler) Index(c fiber.Ctx) error { cats, err := ch.CategoryService.ListCategoriesWithCounts(c.Context()) if err != nil { return err } return c.Render("categories/index", fiber.Map{ "categories": cats, }) } func (ch CategoriesHandler) New(c fiber.Ctx) error { cat := models.Category{ GUID: models.NewNanoID(), } return c.Render("categories/edit", fiber.Map{ "category": cat, "isNew": true, }) } func (ch CategoriesHandler) Edit(c fiber.Ctx) error { catID, err := strconv.ParseInt(c.Params("categoryID"), 10, 64) if err != nil { return fiber.ErrBadRequest } cat, err := ch.CategoryService.GetCategory(c.Context(), catID) if err != nil { return err } return c.Render("categories/edit", fiber.Map{ "category": cat, "isNew": false, }) } func (ch CategoriesHandler) Create(c fiber.Ctx) error { var req categories.CreateCategoryParams if err := c.Bind().Body(&req); err != nil { return err } _, err := ch.CategoryService.CreateCategory(c.Context(), req) if err != nil { return err } site := models.MustGetSite(c.Context()) return c.Redirect().To(fmt.Sprintf("/sites/%v/categories", site.ID)) } func (ch CategoriesHandler) Update(c fiber.Ctx) error { catID, err := strconv.ParseInt(c.Params("categoryID"), 10, 64) if err != nil { return fiber.ErrBadRequest } var req categories.CreateCategoryParams if err := c.Bind().Body(&req); err != nil { return err } _, err = ch.CategoryService.UpdateCategory(c.Context(), catID, req) if err != nil { return err } site := models.MustGetSite(c.Context()) return c.Redirect().To(fmt.Sprintf("/sites/%v/categories", site.ID)) } func (ch CategoriesHandler) Delete(c fiber.Ctx) error { catID, err := strconv.ParseInt(c.Params("categoryID"), 10, 64) if err != nil { return fiber.ErrBadRequest } if err := ch.CategoryService.DeleteCategory(c.Context(), catID); err != nil { return err } site := models.MustGetSite(c.Context()) return c.Redirect().To(fmt.Sprintf("/sites/%v/categories", site.ID)) }