package handlers import ( "net/http" "github.com/breakpilot/ai-compliance-sdk/internal/industry" "github.com/gin-gonic/gin" ) // IndustryHandlers handles industry-specific compliance template requests. // All data is static (embedded Go structs), so no store/database is needed. type IndustryHandlers struct{} // NewIndustryHandlers creates new industry handlers func NewIndustryHandlers() *IndustryHandlers { return &IndustryHandlers{} } // ============================================================================ // Industry Template Endpoints // ============================================================================ // ListIndustries returns a summary list of all available industry templates. // GET /sdk/v1/industries func (h *IndustryHandlers) ListIndustries(c *gin.Context) { templates := industry.GetAllTemplates() summaries := make([]industry.IndustrySummary, 0, len(templates)) for _, t := range templates { summaries = append(summaries, industry.IndustrySummary{ Slug: t.Slug, Name: t.Name, Description: t.Description, Icon: t.Icon, RegulationCount: len(t.Regulations), TemplateCount: len(t.VVTTemplates), }) } c.JSON(http.StatusOK, industry.IndustryListResponse{ Industries: summaries, Total: len(summaries), }) } // GetIndustry returns the full industry template for a given slug. // GET /sdk/v1/industries/:slug func (h *IndustryHandlers) GetIndustry(c *gin.Context) { slug := c.Param("slug") tmpl := industry.GetTemplateBySlug(slug) if tmpl == nil { c.JSON(http.StatusNotFound, gin.H{"error": "industry template not found", "slug": slug}) return } c.JSON(http.StatusOK, tmpl) } // GetVVTTemplates returns only the VVT templates for a given industry. // GET /sdk/v1/industries/:slug/vvt-templates func (h *IndustryHandlers) GetVVTTemplates(c *gin.Context) { slug := c.Param("slug") tmpl := industry.GetTemplateBySlug(slug) if tmpl == nil { c.JSON(http.StatusNotFound, gin.H{"error": "industry template not found", "slug": slug}) return } c.JSON(http.StatusOK, gin.H{ "slug": tmpl.Slug, "industry": tmpl.Name, "vvt_templates": tmpl.VVTTemplates, "total": len(tmpl.VVTTemplates), }) } // GetTOMRecommendations returns only the TOM recommendations for a given industry. // GET /sdk/v1/industries/:slug/tom-recommendations func (h *IndustryHandlers) GetTOMRecommendations(c *gin.Context) { slug := c.Param("slug") tmpl := industry.GetTemplateBySlug(slug) if tmpl == nil { c.JSON(http.StatusNotFound, gin.H{"error": "industry template not found", "slug": slug}) return } c.JSON(http.StatusOK, gin.H{ "slug": tmpl.Slug, "industry": tmpl.Name, "tom_recommendations": tmpl.TOMRecommendations, "total": len(tmpl.TOMRecommendations), }) } // GetRiskScenarios returns only the risk scenarios for a given industry. // GET /sdk/v1/industries/:slug/risk-scenarios func (h *IndustryHandlers) GetRiskScenarios(c *gin.Context) { slug := c.Param("slug") tmpl := industry.GetTemplateBySlug(slug) if tmpl == nil { c.JSON(http.StatusNotFound, gin.H{"error": "industry template not found", "slug": slug}) return } c.JSON(http.StatusOK, gin.H{ "slug": tmpl.Slug, "industry": tmpl.Name, "risk_scenarios": tmpl.RiskScenarios, "total": len(tmpl.RiskScenarios), }) }