draft grpc

This commit is contained in:
2026-03-13 02:17:18 +00:00
parent ea2edbb9e0
commit 91e5e3542b
116 changed files with 44505 additions and 558 deletions

View File

@@ -0,0 +1,68 @@
//go:build ignore
// +build ignore
package admin
import (
"time"
"github.com/gin-gonic/gin"
"stream.api/internal/database/model"
"stream.api/pkg/response"
)
type DashboardPayload struct {
TotalUsers int64 `json:"total_users"`
TotalVideos int64 `json:"total_videos"`
TotalStorageUsed int64 `json:"total_storage_used"`
TotalPayments int64 `json:"total_payments"`
TotalRevenue float64 `json:"total_revenue"`
ActiveSubscriptions int64 `json:"active_subscriptions"`
TotalAdTemplates int64 `json:"total_ad_templates"`
NewUsersToday int64 `json:"new_users_today"`
NewVideosToday int64 `json:"new_videos_today"`
}
// @Summary Admin Dashboard
// @Description Get system-wide statistics for the admin dashboard
// @Tags admin
// @Produce json
// @Success 200 {object} response.Response{data=DashboardPayload}
// @Failure 401 {object} response.Response
// @Failure 403 {object} response.Response
// @Router /admin/dashboard [get]
// @Security BearerAuth
func (h *Handler) Dashboard(c *gin.Context) {
ctx := c.Request.Context()
var payload DashboardPayload
h.db.WithContext(ctx).Model(&model.User{}).Count(&payload.TotalUsers)
h.db.WithContext(ctx).Model(&model.Video{}).Count(&payload.TotalVideos)
h.db.WithContext(ctx).Model(&model.User{}).
Select("COALESCE(SUM(storage_used), 0)").
Row().Scan(&payload.TotalStorageUsed)
h.db.WithContext(ctx).Model(&model.Payment{}).Count(&payload.TotalPayments)
h.db.WithContext(ctx).Model(&model.Payment{}).
Where("status = ?", "SUCCESS").
Select("COALESCE(SUM(amount), 0)").
Row().Scan(&payload.TotalRevenue)
h.db.WithContext(ctx).Model(&model.PlanSubscription{}).
Where("expires_at > ?", time.Now()).
Count(&payload.ActiveSubscriptions)
h.db.WithContext(ctx).Model(&model.AdTemplate{}).Count(&payload.TotalAdTemplates)
today := time.Now().Truncate(24 * time.Hour)
h.db.WithContext(ctx).Model(&model.User{}).
Where("created_at >= ?", today).
Count(&payload.NewUsersToday)
h.db.WithContext(ctx).Model(&model.Video{}).
Where("created_at >= ?", today).
Count(&payload.NewVideosToday)
response.Success(c, payload)
}