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