mirror of
https://github.com/andwati/telecom-platform.git
synced 2026-10-29 16:12:15 +00:00
- Add registerAnalyticsRoutes, registerWhitelabelRoutes, registerComplianceRoutes, registerExchangeRateRoutes, and registerInfraRoutes to setupRoutes - Add routes_platform.go with analytics dashboard, revenue analytics, and scheduled report endpoints - Add whitelabel branding, partner config, and email template endpoints - Add compliance DSR, consent management, audit logging, and data residency endpoints
140 lines
5.1 KiB
Go
140 lines
5.1 KiB
Go
package main
|
|
|
|
import (
|
|
"github.com/gin-gonic/gin"
|
|
"github.com/sirupsen/logrus"
|
|
"gorm.io/gorm"
|
|
|
|
"github.com/nutcas3/telecom-platform/apps/carrier-connector/internal/analytics"
|
|
"github.com/nutcas3/telecom-platform/apps/carrier-connector/internal/compliance"
|
|
"github.com/nutcas3/telecom-platform/apps/carrier-connector/internal/currency"
|
|
"github.com/nutcas3/telecom-platform/apps/carrier-connector/internal/handlers"
|
|
"github.com/nutcas3/telecom-platform/apps/carrier-connector/internal/infra"
|
|
"github.com/nutcas3/telecom-platform/apps/carrier-connector/internal/whitelabel"
|
|
)
|
|
|
|
// registerAnalyticsRoutes registers analytics dashboard routes (platform-011, 012)
|
|
func registerAnalyticsRoutes(api *gin.RouterGroup, db *gorm.DB, logger *logrus.Logger) {
|
|
analyticsService := analytics.NewService(db, logger)
|
|
analyticsHandler := handlers.NewAnalyticsHandler(analyticsService, logger)
|
|
|
|
group := api.Group("/analytics")
|
|
group.GET("/dashboard", analyticsHandler.GetDashboard)
|
|
group.GET("/revenue", analyticsHandler.GetRevenueAnalytics)
|
|
group.POST("/reports", analyticsHandler.CreateScheduledReport)
|
|
group.GET("/reports", analyticsHandler.ListScheduledReports)
|
|
}
|
|
|
|
// registerWhitelabelRoutes registers whitelabel partner routes (platform-009)
|
|
func registerWhitelabelRoutes(api *gin.RouterGroup, db *gorm.DB, logger *logrus.Logger) {
|
|
whitelabelService := whitelabel.NewService(db, logger)
|
|
whitelabelHandler := handlers.NewWhitelabelHandler(whitelabelService, logger)
|
|
|
|
group := api.Group("/whitelabel")
|
|
group.POST("/branding", whitelabelHandler.CreateBranding)
|
|
group.GET("/branding", whitelabelHandler.GetBranding)
|
|
group.GET("/branding/domain/:domain", whitelabelHandler.GetBrandingByDomain)
|
|
group.PUT("/branding", whitelabelHandler.UpdateBranding)
|
|
|
|
group.POST("/partner", whitelabelHandler.CreatePartnerConfig)
|
|
group.GET("/partner", whitelabelHandler.GetPartnerConfig)
|
|
|
|
group.POST("/templates", whitelabelHandler.CreateEmailTemplate)
|
|
group.GET("/templates", whitelabelHandler.ListEmailTemplates)
|
|
group.GET("/templates/:key", whitelabelHandler.GetEmailTemplate)
|
|
}
|
|
|
|
// registerComplianceRoutes registers compliance routes (platform-013, 014, 015, 016)
|
|
func registerComplianceRoutes(api *gin.RouterGroup, db *gorm.DB, logger *logrus.Logger) {
|
|
complianceService := compliance.NewService(db, logger)
|
|
complianceHandler := handlers.NewComplianceHandler(complianceService, logger)
|
|
|
|
group := api.Group("/compliance")
|
|
|
|
// Data Subject Requests (GDPR/CCPA)
|
|
group.POST("/dsr", complianceHandler.CreateDSR)
|
|
group.GET("/dsr", complianceHandler.ListDSRs)
|
|
group.GET("/dsr/:id", complianceHandler.GetDSR)
|
|
group.POST("/dsr/:id/process", complianceHandler.ProcessDSR)
|
|
|
|
// Consent Management
|
|
group.POST("/consent", complianceHandler.RecordConsent)
|
|
group.GET("/consent/:subject_id", complianceHandler.GetConsents)
|
|
group.DELETE("/consent/:subject_id", complianceHandler.RevokeConsent)
|
|
|
|
// Audit Logging
|
|
group.GET("/audit", complianceHandler.QueryAuditLogs)
|
|
|
|
// Data Residency
|
|
group.POST("/residency", complianceHandler.SetDataResidency)
|
|
group.GET("/residency", complianceHandler.GetDataResidency)
|
|
}
|
|
|
|
// registerExchangeRateRoutes registers exchange rate routes (platform-017)
|
|
func registerExchangeRateRoutes(api *gin.RouterGroup, logger *logrus.Logger) {
|
|
config := currency.ExchangeRateConfig{
|
|
Provider: currency.ProviderInternal,
|
|
BaseCurrency: "USD",
|
|
}
|
|
exchangeService := currency.NewRealTimeExchangeService(config, logger)
|
|
|
|
group := api.Group("/exchange")
|
|
group.GET("/rate/:from/:to", func(c *gin.Context) {
|
|
from := c.Param("from")
|
|
to := c.Param("to")
|
|
rate, err := exchangeService.GetRate(c.Request.Context(), from, to)
|
|
if err != nil {
|
|
c.JSON(400, gin.H{"error": err.Error()})
|
|
return
|
|
}
|
|
c.JSON(200, gin.H{"from": from, "to": to, "rate": rate})
|
|
})
|
|
group.GET("/rates", func(c *gin.Context) {
|
|
c.JSON(200, gin.H{
|
|
"rates": exchangeService.GetAllRates(),
|
|
"last_update": exchangeService.LastUpdateTime(),
|
|
})
|
|
})
|
|
group.GET("/currencies", func(c *gin.Context) {
|
|
c.JSON(200, gin.H{"currencies": exchangeService.GetSupportedCurrencies()})
|
|
})
|
|
group.POST("/refresh", func(c *gin.Context) {
|
|
if err := exchangeService.RefreshRates(c.Request.Context()); err != nil {
|
|
c.JSON(500, gin.H{"error": err.Error()})
|
|
return
|
|
}
|
|
c.JSON(200, gin.H{"status": "refreshed"})
|
|
})
|
|
}
|
|
|
|
// registerInfraRoutes registers infrastructure monitoring routes (platform-020, 026, 027)
|
|
func registerInfraRoutes(api *gin.RouterGroup, cache *infra.Cache, geoRouter *infra.GeoRouter) {
|
|
group := api.Group("/infra")
|
|
|
|
// Cache stats (platform-020)
|
|
group.GET("/cache/stats", func(c *gin.Context) {
|
|
if cache != nil {
|
|
c.JSON(200, cache.Stats())
|
|
} else {
|
|
c.JSON(200, gin.H{"status": "cache not configured"})
|
|
}
|
|
})
|
|
|
|
// Geographic routing (platform-026)
|
|
group.GET("/regions", func(c *gin.Context) {
|
|
if geoRouter != nil {
|
|
c.JSON(200, geoRouter.GetRegions())
|
|
} else {
|
|
c.JSON(200, gin.H{"status": "geo routing not configured"})
|
|
}
|
|
})
|
|
group.GET("/region/detect", func(c *gin.Context) {
|
|
if geoRouter != nil {
|
|
region, _ := geoRouter.GetRegionForIP(c.Request.Context(), c.ClientIP())
|
|
c.JSON(200, region)
|
|
} else {
|
|
c.JSON(200, gin.H{"region": "default"})
|
|
}
|
|
})
|
|
}
|