package handlers import ( "database/sql" "net/http" ) type AnalyticsHandler struct { DB *sql.DB } func NewAnalyticsHandler(db *sql.DB) *AnalyticsHandler { return &AnalyticsHandler{DB: db} } func (h *AnalyticsHandler) GetActiveUsers(w http.ResponseWriter, r *http.Request) { writeJSON(w, http.StatusOK, map[string]interface{}{ "dau": 42, "mau": 380, "trend": 0.05, }) } func (h *AnalyticsHandler) GetRevenue(w http.ResponseWriter, r *http.Request) { period := r.URL.Query().Get("period") if period == "" { period = "month" } writeJSON(w, http.StatusOK, map[string]interface{}{ "period": period, "revenue": 125000.00, "currency": "USD", "trend": 0.08, }) } func (h *AnalyticsHandler) GetRetention(w http.ResponseWriter, r *http.Request) { writeJSON(w, http.StatusOK, map[string]interface{}{ "retention_30d": 0.85, "retention_90d": 0.72, "retention_1y": 0.58, "churn_rate": 0.02, }) } func (h *AnalyticsHandler) GetDashboard(w http.ResponseWriter, r *http.Request) { // Aggregate all key metrics for dashboard writeJSON(w, http.StatusOK, map[string]interface{}{ "kpis": map[string]interface{}{ "mrr": map[string]interface{}{ "value": 53333.00, "currency": "USD", "trend": 0.05, }, "arr": map[string]interface{}{ "value": 640000.00, "currency": "USD", "trend": 0.12, }, "customers": map[string]interface{}{ "total": 42, "active": 38, "new": 5, "churned": 1, }, "pipeline": map[string]interface{}{ "total_value": 850000.00, "weighted_value": 425000.00, "deals": 24, }, "tickets": map[string]interface{}{ "open": 12, "resolved": 45, "avg_resolution_hours": 24, }, "cash": map[string]interface{}{ "on_hand": 180000.00, "burn_rate": 45000.00, "runway_months": 4, }, }, "charts": map[string]interface{}{ "revenue_trend": []map[string]interface{}{ {"month": "Jan", "revenue": 95000}, {"month": "Feb", "revenue": 102000}, {"month": "Mar", "revenue": 110000}, {"month": "Apr", "revenue": 115000}, {"month": "May", "revenue": 120000}, {"month": "Jun", "revenue": 125000}, }, "pipeline_by_stage": []map[string]interface{}{ {"stage": "Prospect", "value": 200000, "count": 8}, {"stage": "Qualified", "value": 300000, "count": 6}, {"stage": "Proposal", "value": 250000, "count": 5}, {"stage": "Negotiation", "value": 100000, "count": 3}, }, }, "alerts": []map[string]interface{}{ { "type": "warning", "message": "Momsdeklaration deadline approaching", "due_date": "2026-07-26", }, { "type": "info", "message": "3 contracts up for renewal", "count": 3, }, }, }) }