owl-blogs/web/admin_interaction_handler.go

67 lines
1.6 KiB
Go

package web
import (
"owl-blogs/app/repository"
"owl-blogs/render"
"github.com/gofiber/fiber/v2"
)
type AdminInteractionHandler struct {
interactionRepo repository.InteractionRepository
configRepo repository.ConfigRepository
}
func NewAdminInteractionHandler(configRepo repository.ConfigRepository, interactionRepo repository.InteractionRepository) *AdminInteractionHandler {
return &AdminInteractionHandler{
interactionRepo: interactionRepo,
configRepo: configRepo,
}
}
func (h *AdminInteractionHandler) HandleGet(c *fiber.Ctx) error {
siteConfig := getSiteConfig(h.configRepo)
filter := c.Query("filter", "")
interactions, err := h.interactionRepo.ListAllInteractions()
if err != nil {
return err
}
pageData := paginate(c, interactions, 50)
c.Set(fiber.HeaderContentType, fiber.MIMETextHTML)
return render.RenderTemplateWithBase(c, siteConfig, "views/interaction_manager", fiber.Map{
"Interactions": pageData.items,
"Page": pageData.page,
"NextPage": pageData.page + 1,
"PrevPage": pageData.page - 1,
"FirstPage": pageData.page == 1,
"LastPage": pageData.lastPage,
"Filter": filter,
})
}
func (h *AdminInteractionHandler) HandleDelete(c *fiber.Ctx) error {
c.Set(fiber.HeaderContentType, fiber.MIMETextHTML)
id := c.Params("id")
inter, err := h.interactionRepo.FindById(id)
entryId := inter.EntryID()
if err != nil {
return err
}
confirm := c.FormValue("confirm")
if confirm != "on" {
return c.Redirect("/posts/" + inter.ID() + "/")
}
err = h.interactionRepo.Delete(inter)
if err != nil {
return err
}
return c.Redirect("/posts/" + entryId + "/")
}