Files
warmbly/internal/api/handler/template.go
T
Máté Mészáros (Laptop) 41624a6f79 Analytics & Tracking
2026-01-29 05:59:04 +01:00

137 lines
3.1 KiB
Go

package handler
import (
"net/http"
"github.com/gin-gonic/gin"
"github.com/google/uuid"
"github.com/warmbly/warmbly/internal/api/middleware"
"github.com/warmbly/warmbly/internal/errx"
"github.com/warmbly/warmbly/internal/models"
)
// ListTemplates lists all reply templates for the organization
// GET /templates
func (h *Handler) ListTemplates(c *gin.Context) {
orgID := middleware.GetOrganizationID(c)
if orgID == nil {
errx.Handle(c, errx.New(errx.BadRequest, "no organization selected"))
return
}
templates, xerr := h.TemplateService.List(c.Request.Context(), *orgID)
if xerr != nil {
errx.Handle(c, xerr)
return
}
c.JSON(http.StatusOK, models.ReplyTemplatesResult{Data: templates})
}
// CreateTemplate creates a new reply template
// POST /templates
func (h *Handler) CreateTemplate(c *gin.Context) {
orgID := middleware.GetOrganizationID(c)
if orgID == nil {
errx.Handle(c, errx.New(errx.BadRequest, "no organization selected"))
return
}
userID, err := middleware.GetUserUUID(c)
if err != nil {
errx.Handle(c, errx.ErrUser)
return
}
var data models.CreateReplyTemplate
if err := c.ShouldBindJSON(&data); err != nil {
errx.Handle(c, errx.ErrInvalid)
return
}
tmpl, xerr := h.TemplateService.Create(c.Request.Context(), *orgID, userID, &data)
if xerr != nil {
errx.Handle(c, xerr)
return
}
c.JSON(http.StatusOK, tmpl)
}
// GetTemplate retrieves a reply template by ID
// GET /templates/:id
func (h *Handler) GetTemplate(c *gin.Context) {
orgID := middleware.GetOrganizationID(c)
if orgID == nil {
errx.Handle(c, errx.New(errx.BadRequest, "no organization selected"))
return
}
templateID, err := uuid.Parse(c.Param("id"))
if err != nil {
errx.Handle(c, errx.ErrUuid)
return
}
tmpl, xerr := h.TemplateService.GetByID(c.Request.Context(), *orgID, templateID)
if xerr != nil {
errx.Handle(c, xerr)
return
}
c.JSON(http.StatusOK, tmpl)
}
// UpdateTemplate updates a reply template
// PATCH /templates/:id
func (h *Handler) UpdateTemplate(c *gin.Context) {
orgID := middleware.GetOrganizationID(c)
if orgID == nil {
errx.Handle(c, errx.New(errx.BadRequest, "no organization selected"))
return
}
templateID, err := uuid.Parse(c.Param("id"))
if err != nil {
errx.Handle(c, errx.ErrUuid)
return
}
var data models.UpdateReplyTemplate
if err := c.ShouldBindJSON(&data); err != nil {
errx.Handle(c, errx.ErrInvalid)
return
}
tmpl, xerr := h.TemplateService.Update(c.Request.Context(), *orgID, templateID, &data)
if xerr != nil {
errx.Handle(c, xerr)
return
}
c.JSON(http.StatusOK, tmpl)
}
// DeleteTemplate deletes a reply template
// DELETE /templates/:id
func (h *Handler) DeleteTemplate(c *gin.Context) {
orgID := middleware.GetOrganizationID(c)
if orgID == nil {
errx.Handle(c, errx.New(errx.BadRequest, "no organization selected"))
return
}
templateID, err := uuid.Parse(c.Param("id"))
if err != nil {
errx.Handle(c, errx.ErrUuid)
return
}
if xerr := h.TemplateService.Delete(c.Request.Context(), *orgID, templateID); xerr != nil {
errx.Handle(c, xerr)
return
}
c.Status(http.StatusNoContent)
}