You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
64 lines
1.7 KiB
64 lines
1.7 KiB
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 |
|
}
|
|
|