package dashboard import ( "git.iwork-ai.com/xdc/iqudo-top1/internal/auth" "git.iwork-ai.com/xdc/iqudo-top1/internal/response" "github.com/gin-gonic/gin" ) type dimensionStat struct { ValueKey string `json:"value_key"` Name string `json:"name"` DimKey string `json:"dim_key"` Runs int64 `json:"runs"` AverageWeight float64 `json:"average_weight"` } type scriptFeedbackStat struct { ScriptKey string `json:"script_key"` Name string `json:"name"` FeedbackType string `json:"feedback_type"` Count int64 `json:"count"` } // Scriptkit returns script package analytics: average dimension weights per // value and script feedback counts. func (h *Handler) Scriptkit(c *gin.Context) { principal, _ := auth.PrincipalFromContext(c) dimensions := make([]dimensionStat, 0) err := h.db.Raw(` SELECT dv.value_key, dv.name, d.dim_key, COUNT(DISTINCT rd.run_id) AS runs, AVG(rd.weight) AS average_weight FROM run_dimensions rd JOIN dimension_values dv ON dv.dimension_id = rd.dimension_id AND dv.value_key = rd.value_key AND dv.tenant_id = rd.tenant_id JOIN package_dimensions d ON d.id = rd.dimension_id AND d.tenant_id = rd.tenant_id WHERE rd.tenant_id = ? AND rd.weight > 0 GROUP BY dv.value_key, dv.name, d.dim_key ORDER BY runs DESC, average_weight DESC LIMIT 100`, principal.TenantID).Scan(&dimensions).Error if err != nil { queryFailed(c) return } feedback := make([]scriptFeedbackStat, 0) err = h.db.Raw(` SELECT ss.script_key, ss.name, sf.feedback_type, COUNT(*) AS count FROM script_feedbacks sf JOIN stage_scripts ss ON ss.id = sf.script_id WHERE sf.tenant_id = ? GROUP BY ss.script_key, ss.name, sf.feedback_type ORDER BY count DESC LIMIT 100`, principal.TenantID).Scan(&feedback).Error if err != nil { queryFailed(c) return } response.OK(c, gin.H{"dimensions": dimensions, "feedback": feedback}) }