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.
176 lines
3.4 KiB
176 lines
3.4 KiB
package anchorReward |
|
|
|
import ( |
|
"context" |
|
"fmt" |
|
|
|
"go-common/library/cache/memcache" |
|
"go-common/library/log" |
|
|
|
"go-common/app/service/live/xrewardcenter/model/anchorTask" |
|
|
|
"github.com/pkg/errors" |
|
) |
|
|
|
const ( |
|
//NewRewardCache have new reward. |
|
NewRewardCache = "new_reward:v1:%d" |
|
//HasRewardCache have a reward |
|
HasRewardCache = "has_reward:v1:%d" |
|
) |
|
|
|
// HasNewReward . |
|
type HasNewReward struct { |
|
HasNewReward int64 `json:"has_new_reward"` |
|
} |
|
|
|
// pingMC . |
|
func (d *Dao) pingMC(c context.Context) (err error) { |
|
conn := d.mc.Get(c) |
|
defer conn.Close() |
|
if err = conn.Set(&memcache.Item{Key: "ping", Value: []byte{1}, Expiration: 0}); err != nil { |
|
err = errors.Wrap(err, "conn.Store(set,ping,1)") |
|
} |
|
return |
|
} |
|
|
|
func newRewardKey(uid int64) string { |
|
return fmt.Sprintf(NewRewardCache, uid) |
|
} |
|
|
|
// SetNewReward get MRRecord from mc |
|
func (d *Dao) SetNewReward(c context.Context, uid int64, hasNew int64) (err error) { |
|
var ( |
|
conn = d.mc.Get(c) |
|
key = newRewardKey(uid) |
|
) |
|
|
|
defer conn.Close() |
|
|
|
log.Info("SetNewReward.mc.set(%v) (%v)", key, hasNew) |
|
|
|
if err = conn.Set(&memcache.Item{ |
|
Key: key, |
|
Object: hasNew, |
|
Flags: memcache.FlagJSON, |
|
Expiration: 3600, |
|
}); err != nil { |
|
log.Error("SetNewReward.mc.set(%v %v) error(%v)", key, hasNew, err) |
|
return |
|
} |
|
return |
|
} |
|
|
|
// GetNewReward set MRRecord to mc |
|
func (d *Dao) GetNewReward(c context.Context, uid int64) (r int64, err error) { |
|
r = 0 |
|
|
|
var ( |
|
key = newRewardKey(uid) |
|
conn = d.mc.Get(c) |
|
) |
|
defer conn.Close() |
|
|
|
item, err := conn.Get(key) |
|
|
|
if err != nil { |
|
if err == memcache.ErrNotFound { |
|
return r, err |
|
} |
|
err = errors.Wrapf(err, "conn.get(%v,%v)", key, item) |
|
return r, err |
|
} |
|
|
|
if err = conn.Scan(item, &r); err != nil { |
|
log.Error("mc.Scan(%s) error(%v)", string(item.Value), err) |
|
} |
|
|
|
return |
|
} |
|
|
|
// GetHasReward . |
|
func (d *Dao) GetHasReward(c context.Context, uid int64) (r int64, err error) { |
|
var ( |
|
key = hasRewardKey(uid) |
|
conn = d.mc.Get(c) |
|
) |
|
defer conn.Close() |
|
|
|
r = 0 |
|
item, err := conn.Get(key) |
|
if err != nil { |
|
if err == memcache.ErrNotFound { |
|
return r, err |
|
} |
|
err = errors.Wrapf(err, "mc.get(%s,%v)", key, item) |
|
return r, err |
|
} |
|
|
|
if err = conn.Scan(item, &r); err != nil { |
|
log.Error("mc.Scan(%s) error(%v)", string(item.Value), err) |
|
} |
|
//spew.Dump(r, err) |
|
|
|
return |
|
} |
|
|
|
func hasRewardKey(uid int64) string { |
|
return fmt.Sprintf(HasRewardCache, uid) |
|
} |
|
|
|
// SetHasReward save whether one user have reward. |
|
func (d *Dao) SetHasReward(c context.Context, uid int64, isHave int64) (err error) { |
|
var ( |
|
conn = d.mc.Get(c) |
|
key = hasRewardKey(uid) |
|
) |
|
|
|
defer conn.Close() |
|
|
|
log.Info("SetHasReward.mc.set(%v %v)", key, isHave) |
|
|
|
if err = conn.Set(&memcache.Item{ |
|
Key: key, |
|
Object: isHave, |
|
Flags: memcache.FlagJSON, |
|
Expiration: 3600 * 24, |
|
}); err != nil { |
|
log.Error("SetHasReward.mc.set(%v %v) error(%v)", key, isHave, err) |
|
return |
|
} |
|
return |
|
} |
|
|
|
// GetOrder get order by id from cache. |
|
func (d *Dao) GetOrder(c context.Context, id string) (exists int64, err error) { |
|
|
|
conn := d.mc.Get(c) |
|
defer conn.Close() |
|
|
|
_, err = conn.Get(id) |
|
|
|
if err != nil { |
|
exists = 0 |
|
return exists, err |
|
} |
|
exists = anchorTask.RewardExists |
|
return exists, err |
|
} |
|
|
|
// SaveOrder save orderid in cache. |
|
func (d *Dao) SaveOrder(c context.Context, id string) (err error) { |
|
|
|
conn := d.mc.Get(c) |
|
defer conn.Close() |
|
|
|
if err = conn.Set(&memcache.Item{ |
|
Key: id, |
|
Value: []byte{1}, |
|
Expiration: 3600, |
|
}); err != nil { |
|
log.Error("(%v) error(%v)", id, err) |
|
return |
|
} |
|
|
|
return |
|
}
|
|
|