feat: add post buy count
This commit is contained in:
@@ -198,3 +198,20 @@ func (m *mediasModel) GetByID(ctx context.Context, id int64) (*model.Medias, err
|
||||
|
||||
return &media, nil
|
||||
}
|
||||
|
||||
// Delete
|
||||
func (m *mediasModel) Delete(ctx context.Context, id int64) error {
|
||||
tbl := table.Medias
|
||||
stmt := tbl.
|
||||
DELETE().
|
||||
WHERE(tbl.ID.EQ(Int64(id)))
|
||||
m.log.Infof("sql: %s", stmt.DebugSql())
|
||||
|
||||
if _, err := stmt.ExecContext(ctx, db); err != nil {
|
||||
m.log.Errorf("error deleting media item: %v", err)
|
||||
return err
|
||||
}
|
||||
|
||||
m.log.Infof("media item deleted successfully")
|
||||
return nil
|
||||
}
|
||||
|
||||
@@ -233,3 +233,56 @@ func (m *postsModel) DeleteByID(ctx context.Context, id int64) error {
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// SendTo
|
||||
func (m *postsModel) SendTo(ctx context.Context, userId, postId int64) error {
|
||||
// add record to user_posts
|
||||
tbl := table.UserPosts
|
||||
stmt := tbl.INSERT(tbl.MutableColumns).MODEL(model.UserPosts{
|
||||
UserID: userId,
|
||||
PostID: postId,
|
||||
})
|
||||
m.log.Infof("sql: %s", stmt.DebugSql())
|
||||
if _, err := stmt.ExecContext(ctx, db); err != nil {
|
||||
m.log.Errorf("error sending post to user: %v", err)
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// PostBoughtStatistics 获取指定文件 ID 的购买次数
|
||||
func (m *postsModel) BoughtStatistics(ctx context.Context, postIds []int64) (map[int64]int64, error) {
|
||||
tbl := table.UserPosts
|
||||
|
||||
// select count(user_id), post_id from user_posts up where post_id in (1, 2,3,4,5,6,7,8,9,10) group by post_id
|
||||
stmt := tbl.
|
||||
SELECT(
|
||||
COUNT(tbl.UserID).AS("cnt"),
|
||||
tbl.PostID.AS("post_id"),
|
||||
).
|
||||
WHERE(
|
||||
tbl.PostID.IN(lo.Map(postIds, func(id int64, _ int) Expression { return Int64(id) })...),
|
||||
).
|
||||
GROUP_BY(
|
||||
tbl.PostID,
|
||||
)
|
||||
m.log.Infof("sql: %s", stmt.DebugSql())
|
||||
|
||||
var result []struct {
|
||||
Cnt int64
|
||||
PostId int64
|
||||
}
|
||||
|
||||
if err := stmt.QueryContext(ctx, db, &result); err != nil {
|
||||
m.log.Errorf("error getting post bought statistics: %v", err)
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// convert to map
|
||||
resultMap := make(map[int64]int64)
|
||||
for _, item := range result {
|
||||
resultMap[item.PostId] = item.Cnt
|
||||
}
|
||||
|
||||
return resultMap, nil
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user