package handlers import ( "fmt" "strconv" "github.com/gofiber/fiber/v3" "lmika.dev/lmika/weiro/models" "lmika.dev/lmika/weiro/services/posts" ) type PostsHandler struct { PostService *posts.Service } func (ph PostsHandler) Index(c fiber.Ctx) error { posts, err := ph.PostService.ListPosts(c.Context()) if err != nil { return err } return c.Render("posts/index", fiber.Map{ "posts": posts, }) } func (ph PostsHandler) New(c fiber.Ctx) error { p := models.Post{ GUID: models.NewNanoID(), } return c.Render("posts/edit", fiber.Map{ "post": p, }) } func (ph PostsHandler) Edit(c fiber.Ctx) error { postIDStr := c.Params("postID") if postIDStr == "" { return fiber.ErrBadRequest } postID, err := strconv.ParseInt(postIDStr, 10, 64) if err != nil { return fiber.ErrBadRequest } post, err := ph.PostService.GetPost(c.Context(), postID) if err != nil { return err } return c.Render("posts/edit", fiber.Map{ "post": post, }) } func (ph PostsHandler) Update(c fiber.Ctx) error { var req posts.CreatePostParams if err := c.Bind().Body(&req); err != nil { return err } post, err := ph.PostService.PublishPost(c.Context(), req) if err != nil { return err } return c.Redirect().To(fmt.Sprintf("/sites/%v/posts", post.SiteID)) }