Files
quyun/backend/app/http/admin/statistics.go
2025-05-23 21:39:01 +08:00

63 lines
1.5 KiB
Go

package admin
import (
"quyun/app/model"
"quyun/database/fields"
"quyun/database/table"
. "github.com/go-jet/jet/v2/postgres"
"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
//
// @Router /admin/statistics [get]
func (s *statistics) statistics(ctx fiber.Ctx) (*StatisticsResponse, error) {
statistics := &StatisticsResponse{}
var err error
statistics.PostDraft, err = model.PostsModel().Count(ctx.Context(), table.Posts.Status.EQ(Int(int64(fields.PostStatusDraft))))
if err != nil {
return nil, err
}
statistics.PostPublished, err = model.PostsModel().Count(ctx.Context(), table.Posts.Status.EQ(Int(int64(fields.PostStatusPublished))))
if err != nil {
return nil, err
}
statistics.Media, err = model.MediasModel().Count(ctx.Context())
if err != nil {
return nil, err
}
statistics.Order, err = model.OrdersModel().Count(ctx.Context(), table.Orders.Status.EQ(Int(int64(fields.OrderStatusCompleted))))
if err != nil {
return nil, err
}
statistics.User, err = model.UsersModel().Count(ctx.Context(), BoolExp(Bool(true)))
if err != nil {
return nil, err
}
statistics.Amount, err = model.OrdersModel().SumAmount(ctx.Context())
if err != nil {
return nil, err
}
return statistics, nil
}