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 })
|
postIds := lo.Map(pager.Items.([]model.Posts), func(item model.Posts, _ int) int64 { return item.ID })
|
||||||
if len(postIds) > 0 {
|
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) {
|
items := lo.FilterMap(pager.Items.([]model.Posts), func(item model.Posts, _ int) (PostItem, bool) {
|
||||||
medias, err := models.Posts.GetMediaByIds(ctx.Context(), item.HeadImages.Data)
|
medias, err := models.Posts.GetMediaByIds(ctx.Context(), item.HeadImages.Data)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -67,6 +72,8 @@ func (ctl *posts) List(ctx fiber.Ctx, pagination *requests.Pagination, query *Li
|
|||||||
return url, true
|
return url, true
|
||||||
})
|
})
|
||||||
|
|
||||||
|
_, bought := userBoughtIds[item.ID]
|
||||||
|
|
||||||
return PostItem{
|
return PostItem{
|
||||||
ID: item.ID,
|
ID: item.ID,
|
||||||
Title: item.Title,
|
Title: item.Title,
|
||||||
@@ -77,6 +84,7 @@ func (ctl *posts) List(ctx fiber.Ctx, pagination *requests.Pagination, query *Li
|
|||||||
Likes: item.Likes,
|
Likes: item.Likes,
|
||||||
Tags: item.Tags.Data,
|
Tags: item.Tags.Data,
|
||||||
HeadImages: mediaUrls,
|
HeadImages: mediaUrls,
|
||||||
|
Bought: bought,
|
||||||
}, true
|
}, true
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|||||||
@@ -322,6 +322,29 @@ func (m *usersModel) GetUsersMapByIDs(ctx context.Context, ids []int64) (map[int
|
|||||||
}), nil
|
}), 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
|
// HasBought
|
||||||
func (m *usersModel) HasBought(ctx context.Context, userID, postID int64) (bool, error) {
|
func (m *usersModel) HasBought(ctx context.Context, userID, postID int64) (bool, error) {
|
||||||
tbl := table.UserPosts
|
tbl := table.UserPosts
|
||||||
|
|||||||
Reference in New Issue
Block a user