weiro/handlers/posts.go

70 lines
1.3 KiB
Go
Raw Normal View History

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