80 lines
2.4 KiB
Go
80 lines
2.4 KiB
Go
package dao
|
|
|
|
import (
|
|
"context"
|
|
"crypto/md5"
|
|
"database/sql"
|
|
"encoding/hex"
|
|
"fmt"
|
|
"go-common/app/job/live/gift/internal/model"
|
|
"go-common/library/log"
|
|
"strconv"
|
|
)
|
|
|
|
var (
|
|
_getBag = "SELECT id,gift_num FROM user_gift_%s WHERE uid = ? AND gift_id = ? AND expireat = ? LIMIT 1"
|
|
_getBagByID = "SELECT id,gift_num FROM user_gift_%s WHERE id = ?"
|
|
_updateBagNum = "UPDATE user_gift_%s SET gift_num = gift_num + ? WHERE id = ?"
|
|
_insertBag = "INSERT INTO user_gift_%s (uid,gift_id,gift_num,expireat) VALUES (?,?,?,?)"
|
|
)
|
|
|
|
// GetBag GetBag
|
|
func (d *Dao) GetBag(ctx context.Context, uid, giftID, expireAt int64) (res *model.BagInfo, err error) {
|
|
log.Info("GetBag,uid:%d,giftID:%d,expireAt:%d", uid, giftID, expireAt)
|
|
row := d.db.QueryRow(ctx, fmt.Sprintf(_getBag, getPostFix(uid)), uid, giftID, expireAt)
|
|
res = &model.BagInfo{}
|
|
if err = row.Scan(&res.ID, &res.GiftNum); err != nil {
|
|
if err == sql.ErrNoRows {
|
|
err = nil
|
|
return
|
|
}
|
|
log.Error("GetBag row.Scan error(%v)", err)
|
|
}
|
|
return
|
|
}
|
|
|
|
// UpdateBagNum UpdateBagNum
|
|
func (d *Dao) UpdateBagNum(ctx context.Context, uid, id, num int64) (affected int64, err error) {
|
|
log.Info("UpdateBagNum,uid:%d,id:%d,num:%d", uid, id, num)
|
|
res, err := d.db.Exec(ctx, fmt.Sprintf(_updateBagNum, getPostFix(uid)), num, id)
|
|
if err != nil {
|
|
log.Error("UpdateBagNum error(%v)", err)
|
|
return
|
|
}
|
|
return res.RowsAffected()
|
|
}
|
|
|
|
// AddBag AddBag
|
|
func (d *Dao) AddBag(ctx context.Context, uid, giftID, giftNum, expireAt int64) (affected int64, err error) {
|
|
log.Info("AddBag,uid:%d,giftID:%d,giftNum:%d,expireAt:%d", uid, giftID, giftNum, expireAt)
|
|
res, err := d.db.Exec(ctx, fmt.Sprintf(_insertBag, getPostFix(uid)), uid, giftID, giftNum, expireAt)
|
|
if err != nil {
|
|
log.Error("AddBag error(%v)", err)
|
|
return
|
|
}
|
|
return res.LastInsertId()
|
|
}
|
|
|
|
// GetBagByID GetBagByID
|
|
func (d *Dao) GetBagByID(ctx context.Context, uid, id int64) (res *model.BagInfo, err error) {
|
|
log.Info("GetBagByID,uid:%d,id:%d", uid, id)
|
|
row := d.db.QueryRow(ctx, fmt.Sprintf(_getBagByID, getPostFix(uid)), id)
|
|
res = &model.BagInfo{}
|
|
if err = row.Scan(&res.ID, &res.GiftNum); err != nil {
|
|
if err == sql.ErrNoRows {
|
|
err = nil
|
|
return
|
|
}
|
|
log.Error("GetBagByID row.Scan error(%v)", err)
|
|
}
|
|
return
|
|
}
|
|
|
|
func getPostFix(uid int64) string {
|
|
uidStr := strconv.Itoa(int(uid))
|
|
h := md5.New()
|
|
h.Write([]byte(uidStr))
|
|
md5Str := hex.EncodeToString(h.Sum(nil))
|
|
return md5Str[0:1]
|
|
}
|