feat: update admin
This commit is contained in:
@@ -54,16 +54,18 @@ func Provide(opts ...opt.Option) error {
|
||||
medias *medias,
|
||||
orders *orders,
|
||||
posts *posts,
|
||||
statistics *statistics,
|
||||
uploads *uploads,
|
||||
users *users,
|
||||
) (contracts.HttpRoute, error) {
|
||||
obj := &Routes{
|
||||
auth: auth,
|
||||
medias: medias,
|
||||
orders: orders,
|
||||
posts: posts,
|
||||
uploads: uploads,
|
||||
users: users,
|
||||
auth: auth,
|
||||
medias: medias,
|
||||
orders: orders,
|
||||
posts: posts,
|
||||
statistics: statistics,
|
||||
uploads: uploads,
|
||||
users: users,
|
||||
}
|
||||
if err := obj.Prepare(); err != nil {
|
||||
return nil, err
|
||||
@@ -73,6 +75,13 @@ func Provide(opts ...opt.Option) error {
|
||||
}, atom.GroupRoutes); err != nil {
|
||||
return err
|
||||
}
|
||||
if err := container.Container.Provide(func() (*statistics, error) {
|
||||
obj := &statistics{}
|
||||
|
||||
return obj, nil
|
||||
}); err != nil {
|
||||
return err
|
||||
}
|
||||
if err := container.Container.Provide(func(
|
||||
app *app.Config,
|
||||
job *job.Job,
|
||||
|
||||
@@ -13,13 +13,14 @@ import (
|
||||
|
||||
// @provider contracts.HttpRoute atom.GroupRoutes
|
||||
type Routes struct {
|
||||
log *log.Entry `inject:"false"`
|
||||
auth *auth
|
||||
medias *medias
|
||||
orders *orders
|
||||
posts *posts
|
||||
uploads *uploads
|
||||
users *users
|
||||
log *log.Entry `inject:"false"`
|
||||
auth *auth
|
||||
medias *medias
|
||||
orders *orders
|
||||
posts *posts
|
||||
statistics *statistics
|
||||
uploads *uploads
|
||||
users *users
|
||||
}
|
||||
|
||||
func (r *Routes) Prepare() error {
|
||||
@@ -96,6 +97,11 @@ func (r *Routes) Register(router fiber.Router) {
|
||||
PathParam[int64]("userId"),
|
||||
))
|
||||
|
||||
// 注册路由组: statistics
|
||||
router.Get("/admin/statistics", DataFunc0(
|
||||
r.statistics.statistics,
|
||||
))
|
||||
|
||||
// 注册路由组: uploads
|
||||
router.Get("/admin/uploads/pre-uploaded-check/:md5.:ext", DataFunc3(
|
||||
r.uploads.PreUploadCheck,
|
||||
|
||||
61
backend/app/http/admin/statistics.go
Normal file
61
backend/app/http/admin/statistics.go
Normal file
@@ -0,0 +1,61 @@
|
||||
package admin
|
||||
|
||||
import (
|
||||
"quyun/app/models"
|
||||
"quyun/database/fields"
|
||||
"quyun/database/schemas/public/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 = models.Posts.Count(ctx.Context(), table.Posts.Status.EQ(Int(int64(fields.PostStatusDraft))))
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
statistics.PostPublished, err = models.Posts.Count(ctx.Context(), table.Posts.Status.EQ(Int(int64(fields.PostStatusPublished))))
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
statistics.Media, err = models.Medias.Count(ctx.Context())
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
statistics.Order, err = models.Orders.Count(ctx.Context(), table.Orders.Status.EQ(Int(int64(fields.OrderStatusPaid))))
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
statistics.User, err = models.Users.Count(ctx.Context(), BoolExp(Bool(true)))
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
statistics.Amount, err = models.Orders.SumAmount(ctx.Context())
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return statistics, nil
|
||||
}
|
||||
Reference in New Issue
Block a user