65 lines
1.7 KiB
Go
65 lines
1.7 KiB
Go
|
package dao
|
||
|
|
||
|
import (
|
||
|
"context"
|
||
|
|
||
|
"encoding/json"
|
||
|
"fmt"
|
||
|
"go-common/app/service/openplatform/ticket-item/model"
|
||
|
"go-common/library/cache/redis"
|
||
|
"go-common/library/log"
|
||
|
)
|
||
|
|
||
|
const (
|
||
|
_addWishSQL = "INSERT INTO user_wish (mid, item_id, face) VALUES(?, ?, ?)"
|
||
|
|
||
|
// 缓存 key
|
||
|
_userWishCountKey = "USER:WISH:COUNT:%d"
|
||
|
_userWishActiveKey = "USER:WISH:ACTIVE:%d:%d"
|
||
|
_userWishListKey = "USER:WISH:LIST:%d"
|
||
|
)
|
||
|
|
||
|
// AddWish 添加想去
|
||
|
func (d *Dao) AddWish(c context.Context, wish *model.UserWish) (err error) {
|
||
|
err = d.db.Exec(_addWishSQL, wish.MID, wish.ItemID, wish.Face).Error
|
||
|
return
|
||
|
}
|
||
|
|
||
|
// WishCacheUpdate 更新想去缓存
|
||
|
func (d *Dao) WishCacheUpdate(c context.Context, wish *model.UserWish) (err error) {
|
||
|
conn := d.redis.Get(c)
|
||
|
defer conn.Close()
|
||
|
if _, err = conn.Do("SETEX", fmt.Sprintf(_userWishActiveKey, wish.ItemID, wish.MID), _expireHalfhour, 1); err != nil {
|
||
|
log.Error("d.WishCacheUpdate(%+v) SETEX error(%v)", wish, err)
|
||
|
return
|
||
|
}
|
||
|
if _, err = conn.Do("INCR", fmt.Sprintf(_userWishCountKey, wish.ItemID)); err != nil {
|
||
|
log.Error("d.WishCacheUpdate(%+v) INCR error(%v)", wish, err)
|
||
|
return
|
||
|
}
|
||
|
|
||
|
wishCache, err := json.Marshal(map[string]interface{}{
|
||
|
"mid": wish.MID,
|
||
|
"face": wish.Face,
|
||
|
})
|
||
|
if err != nil {
|
||
|
log.Error("d.WishCacheUpdate(%+v) json.Marshal() error(%v)", wish, err)
|
||
|
return
|
||
|
}
|
||
|
|
||
|
listKey := fmt.Sprintf(_userWishListKey, wish.ItemID)
|
||
|
length, err := redis.Int64(conn.Do("RPUSH", listKey, wishCache))
|
||
|
if err != nil {
|
||
|
log.Error("d.WishCacheUpdate(%+v) RPUSH error(%v)", wish, err)
|
||
|
return
|
||
|
}
|
||
|
if length > 5 {
|
||
|
if _, err = conn.Do("LTRIM", listKey, -5, -1); err != nil {
|
||
|
log.Error("d.WishCacheUpdate(%+v) LTRIM error(%v)", wish, err)
|
||
|
return
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return
|
||
|
}
|