wish.go 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. package dao
  2. import (
  3. "context"
  4. "encoding/json"
  5. "fmt"
  6. "go-common/app/service/openplatform/ticket-item/model"
  7. "go-common/library/cache/redis"
  8. "go-common/library/log"
  9. )
  10. const (
  11. _addWishSQL = "INSERT INTO user_wish (mid, item_id, face) VALUES(?, ?, ?)"
  12. // 缓存 key
  13. _userWishCountKey = "USER:WISH:COUNT:%d"
  14. _userWishActiveKey = "USER:WISH:ACTIVE:%d:%d"
  15. _userWishListKey = "USER:WISH:LIST:%d"
  16. )
  17. // AddWish 添加想去
  18. func (d *Dao) AddWish(c context.Context, wish *model.UserWish) (err error) {
  19. err = d.db.Exec(_addWishSQL, wish.MID, wish.ItemID, wish.Face).Error
  20. return
  21. }
  22. // WishCacheUpdate 更新想去缓存
  23. func (d *Dao) WishCacheUpdate(c context.Context, wish *model.UserWish) (err error) {
  24. conn := d.redis.Get(c)
  25. defer conn.Close()
  26. if _, err = conn.Do("SETEX", fmt.Sprintf(_userWishActiveKey, wish.ItemID, wish.MID), _expireHalfhour, 1); err != nil {
  27. log.Error("d.WishCacheUpdate(%+v) SETEX error(%v)", wish, err)
  28. return
  29. }
  30. if _, err = conn.Do("INCR", fmt.Sprintf(_userWishCountKey, wish.ItemID)); err != nil {
  31. log.Error("d.WishCacheUpdate(%+v) INCR error(%v)", wish, err)
  32. return
  33. }
  34. wishCache, err := json.Marshal(map[string]interface{}{
  35. "mid": wish.MID,
  36. "face": wish.Face,
  37. })
  38. if err != nil {
  39. log.Error("d.WishCacheUpdate(%+v) json.Marshal() error(%v)", wish, err)
  40. return
  41. }
  42. listKey := fmt.Sprintf(_userWishListKey, wish.ItemID)
  43. length, err := redis.Int64(conn.Do("RPUSH", listKey, wishCache))
  44. if err != nil {
  45. log.Error("d.WishCacheUpdate(%+v) RPUSH error(%v)", wish, err)
  46. return
  47. }
  48. if length > 5 {
  49. if _, err = conn.Do("LTRIM", listKey, -5, -1); err != nil {
  50. log.Error("d.WishCacheUpdate(%+v) LTRIM error(%v)", wish, err)
  51. return
  52. }
  53. }
  54. return
  55. }