Go handlers, models, stores and migrations for all SDK modules. Updates developer portal navigation and BYOEH page. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
116 lines
3.3 KiB
Go
116 lines
3.3 KiB
Go
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),
|
|
})
|
|
}
|