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.
116 lines
2.7 KiB
116 lines
2.7 KiB
package dao |
|
|
|
import ( |
|
"context" |
|
"fmt" |
|
|
|
model "go-common/app/interface/main/credit/model" |
|
gmc "go-common/library/cache/memcache" |
|
) |
|
|
|
const ( |
|
_prefixCaseInfo = "ca_in_%d" |
|
_prefixVoteCaseInfo = "vc_in_%d_%d" |
|
_caseVoteTop = "ca_vo_top_%d" |
|
) |
|
|
|
func caseInfoKey(cid int64) string { |
|
return fmt.Sprintf(_prefixCaseInfo, cid) |
|
} |
|
|
|
func voteCaseInfoKey(mid int64, cid int64) string { |
|
return fmt.Sprintf(_prefixVoteCaseInfo, mid, cid) |
|
} |
|
|
|
func caseVoteTopKey(mid int64) string { |
|
return fmt.Sprintf(_caseVoteTop, mid) |
|
} |
|
|
|
// SetCaseInfoCache set case info. |
|
func (d *Dao) SetCaseInfoCache(c context.Context, cid int64, bc *model.BlockedCase) (err error) { |
|
var ( |
|
conn = d.mc.Get(c) |
|
item = &gmc.Item{Key: caseInfoKey(cid), Object: bc, Expiration: d.minCommonExpire, Flags: gmc.FlagJSON} |
|
) |
|
defer conn.Close() |
|
err = conn.Set(item) |
|
return |
|
} |
|
|
|
// CaseInfoCache get case info cache |
|
func (d *Dao) CaseInfoCache(c context.Context, cid int64) (bc *model.BlockedCase, err error) { |
|
var ( |
|
reply *gmc.Item |
|
conn = d.mc.Get(c) |
|
) |
|
defer conn.Close() |
|
if reply, err = conn.Get(caseInfoKey(cid)); err != nil { |
|
if err == gmc.ErrNotFound { |
|
err = nil |
|
} |
|
return |
|
} |
|
bc = &model.BlockedCase{} |
|
err = conn.Scan(reply, &bc) |
|
return |
|
} |
|
|
|
// SetVoteInfoCache set vote case info. |
|
func (d *Dao) SetVoteInfoCache(c context.Context, mid, cid int64, vi *model.VoteInfo) (err error) { |
|
var ( |
|
conn = d.mc.Get(c) |
|
item = &gmc.Item{Key: voteCaseInfoKey(mid, cid), Object: vi, Expiration: d.userExpire, Flags: gmc.FlagJSON} |
|
) |
|
defer conn.Close() |
|
err = conn.Set(item) |
|
return |
|
} |
|
|
|
// VoteInfoCache get vote case info cache |
|
func (d *Dao) VoteInfoCache(c context.Context, mid, cid int64) (vi *model.VoteInfo, err error) { |
|
var ( |
|
reply *gmc.Item |
|
conn = d.mc.Get(c) |
|
) |
|
defer conn.Close() |
|
reply, err = conn.Get(voteCaseInfoKey(mid, cid)) |
|
if err != nil { |
|
if err == gmc.ErrNotFound { |
|
err = nil |
|
} |
|
return |
|
} |
|
vi = &model.VoteInfo{} |
|
err = conn.Scan(reply, &vi) |
|
return |
|
} |
|
|
|
// CaseVoteTopCache get case votes by top 100. |
|
func (d *Dao) CaseVoteTopCache(c context.Context, mid int64) (bs []*model.BlockedCase, err error) { |
|
var ( |
|
reply *gmc.Item |
|
conn = d.mc.Get(c) |
|
) |
|
defer conn.Close() |
|
reply, err = conn.Get(caseVoteTopKey(mid)) |
|
if err != nil { |
|
if err == gmc.ErrNotFound { |
|
err = nil |
|
} |
|
return |
|
} |
|
bs = make([]*model.BlockedCase, 0) |
|
err = conn.Scan(reply, &bs) |
|
return |
|
} |
|
|
|
// SetCaseVoteTopCache set case votes by top 100. |
|
func (d *Dao) SetCaseVoteTopCache(c context.Context, mid int64, bs []*model.BlockedCase) (err error) { |
|
var ( |
|
conn = d.mc.Get(c) |
|
item = &gmc.Item{Key: caseVoteTopKey(mid), Object: bs, Expiration: d.userExpire, Flags: gmc.FlagJSON} |
|
) |
|
defer conn.Close() |
|
err = conn.Set(item) |
|
return |
|
}
|
|
|