package handler import ( "bugulma/backend/internal/service" "net/http" "github.com/gin-gonic/gin" ) // AnalyticsHandler handles platform analytics and statistics type AnalyticsHandler struct { service *service.AnalyticsService } // NewAnalyticsHandler creates a new analytics handler func NewAnalyticsHandler(service *service.AnalyticsService) *AnalyticsHandler { return &AnalyticsHandler{service: service} } // GetPlatformStatistics returns overall platform statistics // @Summary Get platform statistics // @Tags analytics // @Produce json // @Success 200 {object} service.PlatformStatistics // @Router /api/analytics/platform-stats [get] func (h *AnalyticsHandler) GetPlatformStatistics(c *gin.Context) { stats, err := h.service.GetPlatformStatistics(c.Request.Context()) if err != nil { c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()}) return } c.JSON(http.StatusOK, stats) } // GetOrganizationStatistics returns statistics for a specific organization // @Summary Get organization statistics // @Tags analytics // @Produce json // @Param organizationId path string true "Organization ID" // @Success 200 {object} service.OrganizationStatistics // @Router /api/analytics/organizations/{organizationId}/stats [get] func (h *AnalyticsHandler) GetOrganizationStatistics(c *gin.Context) { orgID := c.Param("organizationId") stats, err := h.service.GetOrganizationStatistics(c.Request.Context(), orgID) if err != nil { c.JSON(http.StatusNotFound, gin.H{"error": "Organization not found"}) return } c.JSON(http.StatusOK, stats) } // GetMatchingStatistics returns matching engine performance statistics // @Summary Get matching statistics // @Tags analytics // @Produce json // @Success 200 {object} service.MatchingStatistics // @Router /api/analytics/matching-stats [get] func (h *AnalyticsHandler) GetMatchingStatistics(c *gin.Context) { stats, err := h.service.GetMatchingStatistics(c.Request.Context()) if err != nil { c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()}) return } c.JSON(http.StatusOK, stats) } // GetResourceFlowStatistics returns resource flow statistics // @Summary Get resource flow statistics // @Tags analytics // @Produce json // @Success 200 {object} service.ResourceFlowStatistics // @Router /api/analytics/resource-flow-stats [get] func (h *AnalyticsHandler) GetResourceFlowStatistics(c *gin.Context) { stats, err := h.service.GetResourceFlowStatistics(c.Request.Context()) if err != nil { c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()}) return } c.JSON(http.StatusOK, stats) } // GetImpactMetrics returns environmental and economic impact metrics // @Summary Get impact metrics // @Tags analytics // @Produce json // @Success 200 {object} service.ImpactMetrics // @Router /api/analytics/impact-metrics [get] func (h *AnalyticsHandler) GetImpactMetrics(c *gin.Context) { metrics, err := h.service.GetImpactMetrics(c.Request.Context()) if err != nil { c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()}) return } c.JSON(http.StatusOK, metrics) } // GetDashboardStatistics returns dashboard statistics // @Summary Get dashboard statistics // @Tags analytics // @Produce json // @Success 200 {object} service.DashboardStatistics // @Router /api/analytics/dashboard [get] func (h *AnalyticsHandler) GetDashboardStatistics(c *gin.Context) { stats, err := h.service.GetDashboardStatistics(c.Request.Context()) if err != nil { c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()}) return } c.JSON(http.StatusOK, stats) } // GetConnectionStatistics returns connection statistics // @Summary Get connection statistics // @Tags analytics // @Produce json // @Success 200 {object} service.ConnectionStatistics // @Router /api/analytics/connections [get] func (h *AnalyticsHandler) GetConnectionStatistics(c *gin.Context) { stats, err := h.service.GetConnectionStatistics(c.Request.Context()) if err != nil { c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()}) return } c.JSON(http.StatusOK, stats) } // GetSupplyDemandAnalysis returns supply and demand analysis // @Summary Get supply and demand analysis // @Tags analytics // @Produce json // @Success 200 {object} service.SupplyDemandAnalysis // @Router /api/analytics/supply-demand [get] func (h *AnalyticsHandler) GetSupplyDemandAnalysis(c *gin.Context) { analysis, err := h.service.GetSupplyDemandAnalysis(c.Request.Context()) if err != nil { c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()}) return } c.JSON(http.StatusOK, analysis) }