package transport import ( "strconv" "github.com/gin-gonic/gin" "github.com/geo-platform/tenant-api/internal/bootstrap" "github.com/geo-platform/tenant-api/internal/shared/response" "github.com/geo-platform/tenant-api/internal/tenant/app" "github.com/geo-platform/tenant-api/internal/tenant/repository" ) type TemplateHandler struct { svc *app.TemplateService } func NewTemplateHandler(a *bootstrap.App) *TemplateHandler { return &TemplateHandler{ svc: app.NewTemplateService( a.DB, repository.NewTemplateRepository(a.DB), a.LLM, a.GenerationStreams, a.Config.Generation, ), } } func (h *TemplateHandler) List(c *gin.Context) { data, err := h.svc.List(c.Request.Context()) if err != nil { response.Error(c, err) return } response.Success(c, data) } func (h *TemplateHandler) Detail(c *gin.Context) { id, err := strconv.ParseInt(c.Param("id"), 10, 64) if err != nil { response.Error(c, response.ErrBadRequest(40001, "invalid_id", "template id must be a number")) return } data, err := h.svc.Detail(c.Request.Context(), id) if err != nil { response.Error(c, err) return } response.Success(c, data) } func (h *TemplateHandler) Schema(c *gin.Context) { id, err := strconv.ParseInt(c.Param("id"), 10, 64) if err != nil { response.Error(c, response.ErrBadRequest(40001, "invalid_id", "template id must be a number")) return } data, err := h.svc.Schema(c.Request.Context(), id) if err != nil { response.Error(c, err) return } response.Success(c, data) } func (h *TemplateHandler) Generate(c *gin.Context) { id, err := strconv.ParseInt(c.Param("id"), 10, 64) if err != nil { response.Error(c, response.ErrBadRequest(40001, "invalid_id", "template id must be a number")) return } var req app.GenerateRequest if err := c.ShouldBindJSON(&req); err != nil { response.Error(c, response.ErrBadRequest(40001, "invalid_params", err.Error())) return } data, err := h.svc.Generate(c.Request.Context(), id, req) if err != nil { response.Error(c, err) return } response.Success(c, data) }