63 lines
1.5 KiB
Go
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
|
|
}
|