Files
quyun/backend_v1/app/http/admin/statistics.go
2025-12-20 11:05:35 +08:00

73 lines
1.6 KiB
Go

package admin
import (
"quyun/v2/app/services"
"quyun/v2/database/models"
"quyun/v2/pkg/fields"
"github.com/gofiber/fiber/v3"
)
// @provider
type statistics struct{}
type StatisticsResponse struct {
PostDraft int64 `json:"post_draft"`
PostPublished int64 `json:"post_published"`
Media int64 `json:"media"`
Order int64 `json:"order"`
User int64 `json:"user"`
Amount int64 `json:"amount"`
}
// dashboard statistics
//
// @Summary 仪表盘统计
// @Tags Admin Statistics
// @Produce json
// @Success 200 {object} StatisticsResponse "成功"
// @Router /admin/statistics [get]
func (s *statistics) statistics(ctx fiber.Ctx) (*StatisticsResponse, error) {
statistics := &StatisticsResponse{}
var err error
statistics.PostDraft, err = services.Posts.Count(
ctx,
models.PostQuery.Status.Eq(fields.PostStatusDraft),
)
if err != nil {
return nil, err
}
statistics.PostPublished, err = services.Posts.Count(
ctx,
models.PostQuery.Status.Eq(fields.PostStatusPublished),
)
if err != nil {
return nil, err
}
statistics.Media, err = services.Media.Count(ctx)
if err != nil {
return nil, err
}
// model.ExprCond(table.Orders.Status.EQ(Int(int64(fields.OrderStatusCompleted)))))
statistics.Order, err = services.Orders.Count(ctx, models.OrderQuery.Status.Eq(fields.OrderStatusCompleted))
if err != nil {
return nil, err
}
statistics.User, err = services.Users.Count(ctx)
if err != nil {
return nil, err
}
statistics.Amount, err = services.Orders.SumAmount(ctx)
if err != nil {
return nil, err
}
return statistics, nil
}