123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657 |
- package dao
- import (
- "context"
- "fmt"
- "go-common/app/job/main/relation/model/i64b"
- sml "go-common/app/service/main/relation/model"
- "go-common/library/database/sql"
- )
- const (
- _shard = 500
- _tagUserShard = 500
- // following
- _getRelationSQL = "SELECT r.attribute,r.mtime,t.tag FROM user_relation_mid_%03d AS r join user_relation_tag_user_%03d AS t ON t.mid=r.mid AND t.fid=r.fid WHERE r.mid=? AND r.fid=? AND r.status=0 "
- _UserSetAchieveFlag = "INSERT INTO user_addit (mid,achieve_flags) VALUES (?,?) ON DUPLICATE KEY UPDATE achieve_flags=achieve_flags|VALUES(achieve_flags)"
- )
- func hit(id int64) int64 {
- return id % _shard
- }
- func tagUserHit(id int64) int64 {
- return id % _tagUserShard
- }
- // UserRelation get user relation attr.
- func (d *Dao) UserRelation(c context.Context, mid, fid int64) (f *sml.Following, err error) {
- row := d.db.QueryRow(c, fmt.Sprintf(_getRelationSQL, hit(mid), tagUserHit(mid)), mid, fid)
- f = new(sml.Following)
- var ttag i64b.Int64Bytes
- if err = row.Scan(&f.Attribute, &f.MTime, &ttag); err != nil {
- if err == sql.ErrNoRows {
- err = nil
- f = nil
- }
- return
- }
- f.Mid = fid
- f.Tag = []int64(ttag)
- for _, id := range f.Tag {
- if id == -10 {
- f.Special = 1
- }
- }
- return
- }
- // UserSetAchieveFlag is
- func (d *Dao) UserSetAchieveFlag(ctx context.Context, mid int64, flag uint64) (int64, error) {
- res, err := d.db.Exec(ctx, _UserSetAchieveFlag, mid, flag)
- if err != nil {
- return 0, err
- }
- return res.RowsAffected()
- }
|