feat: add bought check
This commit is contained in:
@@ -51,6 +51,11 @@ func (ctl *posts) List(ctx fiber.Ctx, pagination *requests.Pagination, query *Li
|
||||
|
||||
postIds := lo.Map(pager.Items.([]model.Posts), func(item model.Posts, _ int) int64 { return item.ID })
|
||||
if len(postIds) > 0 {
|
||||
userBoughtIds, err := models.Users.BatchCheckHasBought(ctx.Context(), user.ID, postIds)
|
||||
if err != nil {
|
||||
log.WithError(err).Errorf("BatchCheckHasBought err: %v", err)
|
||||
}
|
||||
|
||||
items := lo.FilterMap(pager.Items.([]model.Posts), func(item model.Posts, _ int) (PostItem, bool) {
|
||||
medias, err := models.Posts.GetMediaByIds(ctx.Context(), item.HeadImages.Data)
|
||||
if err != nil {
|
||||
@@ -67,6 +72,8 @@ func (ctl *posts) List(ctx fiber.Ctx, pagination *requests.Pagination, query *Li
|
||||
return url, true
|
||||
})
|
||||
|
||||
_, bought := userBoughtIds[item.ID]
|
||||
|
||||
return PostItem{
|
||||
ID: item.ID,
|
||||
Title: item.Title,
|
||||
@@ -77,6 +84,7 @@ func (ctl *posts) List(ctx fiber.Ctx, pagination *requests.Pagination, query *Li
|
||||
Likes: item.Likes,
|
||||
Tags: item.Tags.Data,
|
||||
HeadImages: mediaUrls,
|
||||
Bought: bought,
|
||||
}, true
|
||||
})
|
||||
|
||||
|
||||
@@ -322,6 +322,29 @@ func (m *usersModel) GetUsersMapByIDs(ctx context.Context, ids []int64) (map[int
|
||||
}), nil
|
||||
}
|
||||
|
||||
func (m *usersModel) BatchCheckHasBought(ctx context.Context, userID int64, postIDs []int64) (map[int64]bool, error) {
|
||||
tbl := table.UserPosts
|
||||
stmt := tbl.SELECT(tbl.PostID.AS("post_id")).WHERE(
|
||||
tbl.UserID.EQ(Int64(userID)).AND(
|
||||
tbl.PostID.IN(lo.Map(postIDs, func(id int64, _ int) Expression { return Int64(id) })...),
|
||||
),
|
||||
)
|
||||
|
||||
var userPosts []struct {
|
||||
PostID int64
|
||||
}
|
||||
if err := stmt.QueryContext(ctx, db, &userPosts); err != nil {
|
||||
m.log.Errorf("error querying user posts: %v", err)
|
||||
return nil, err
|
||||
}
|
||||
|
||||
result := make(map[int64]bool)
|
||||
for _, post := range userPosts {
|
||||
result[post.PostID] = true
|
||||
}
|
||||
return result, nil
|
||||
}
|
||||
|
||||
// HasBought
|
||||
func (m *usersModel) HasBought(ctx context.Context, userID, postID int64) (bool, error) {
|
||||
tbl := table.UserPosts
|
||||
|
||||
Reference in New Issue
Block a user