feat: update user detail

This commit is contained in:
yanghao05
2025-04-18 22:38:57 +08:00
parent 192bd07b9e
commit 8afed63142
8 changed files with 284 additions and 1 deletions

View File

@@ -116,4 +116,15 @@ func (r *Routes) Register(router fiber.Router) {
Query[UserListQuery]("query"),
))
router.Get("/v1/admin/users/:id", DataFunc1(
r.users.Show,
PathParam[int64]("id"),
))
router.Get("/v1/admin/users/:id/articles", DataFunc2(
r.users.Articles,
PathParam[int64]("id"),
Query[requests.Pagination]("pagination"),
))
}

View File

@@ -3,6 +3,7 @@ package admin
import (
"quyun/app/models"
"quyun/app/requests"
"quyun/database/schemas/public/model"
"github.com/gofiber/fiber/v3"
)
@@ -22,3 +23,18 @@ func (ctl *users) List(ctx fiber.Ctx, pagination *requests.Pagination, query *Us
cond := models.Users.BuildConditionWithKey(query.Keyword)
return models.Users.List(ctx.Context(), pagination, cond)
}
// Show user
// @Router /v1/admin/users/:id [get]
// @Bind id path
func (ctl *users) Show(ctx fiber.Ctx, id int64) (*model.Users, error) {
return models.Users.GetByID(ctx.Context(), id)
}
// Articles show user bought articles
// @Router /v1/admin/users/:id/articles [get]
// @Bind id path
// @Bind pagination query
func (ctl *users) Articles(ctx fiber.Ctx, id int64, pagination *requests.Pagination) (*requests.Pager, error) {
return models.Posts.Bought(ctx.Context(), id, pagination)
}

View File

@@ -286,3 +286,60 @@ func (m *postsModel) BoughtStatistics(ctx context.Context, postIds []int64) (map
return resultMap, nil
}
// Bought
func (m *postsModel) Bought(ctx context.Context, userId int64, pagination *requests.Pagination) (*requests.Pager, error) {
pagination.Format()
// select up.price,up.created_at,p.* from user_posts up left join posts p on up.post_id = p.id where up.user_id =1
tbl := table.UserPosts
stmt := tbl.
SELECT(
tbl.Price.AS("price"),
tbl.CreatedAt.AS("bought_at"),
table.Posts.Title.AS("title"),
).
FROM(
tbl.INNER_JOIN(table.Posts, table.Posts.ID.EQ(tbl.PostID)),
).
WHERE(
tbl.UserID.EQ(Int64(1)),
).
ORDER_BY(tbl.ID.DESC()).
LIMIT(pagination.Limit).
OFFSET(pagination.Offset)
m.log.Infof("sql: %s", stmt.DebugSql())
var items []struct {
Title string `json:"title"`
Price int64 `json:"price"`
BoughtAt time.Time `json:"bought_at"`
}
if err := stmt.QueryContext(ctx, db, &items); err != nil {
m.log.Errorf("error getting bought posts: %v", err)
return nil, err
}
// convert to model.Posts
var cnt struct {
Cnt int64
}
stmtCnt := tbl.
SELECT(COUNT(tbl.ID).AS("cnt")).
WHERE(
tbl.UserID.EQ(Int64(userId)),
)
if err := stmtCnt.QueryContext(ctx, db, &cnt); err != nil {
m.log.Errorf("error getting bought posts count: %v", err)
return nil, err
}
return &requests.Pager{
Items: items,
Total: cnt.Cnt,
Pagination: *pagination,
}, nil
}