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 }