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.
50 lines
1.6 KiB
50 lines
1.6 KiB
package dao |
|
|
|
import ( |
|
"context" |
|
xsql "database/sql" |
|
"go-common/app/service/bbq/user/internal/model" |
|
"go-common/library/database/sql" |
|
"go-common/library/time" |
|
) |
|
|
|
const ( |
|
_addUserFan = "insert into %s (`mid`,`fan_mid`) values (?,?) on duplicate key update state=0" |
|
_cancelUserFan = "update %s set state=1 where mid = ? and fan_mid = ?" |
|
_getUserPartFans = "select fan_mid, mtime from user_fan_%02d where mid=? and state=0 and mtime<=? order by mtime desc, fan_mid desc limit %d" |
|
_isFan = "select fan_mid from user_fan_%02d where mid = ? and state=0 and fan_mid in (%s)" |
|
) |
|
|
|
//TxAddUserFan . |
|
func (d *Dao) TxAddUserFan(tx *sql.Tx, mid, fanMid int64) (num int64, err error) { |
|
var res xsql.Result |
|
if res, err = tx.Exec(d.userFanSQL(mid, _addUserFan), mid, fanMid); err != nil { |
|
return |
|
} |
|
return res.LastInsertId() |
|
} |
|
|
|
//TxCancelUserFan . |
|
func (d *Dao) TxCancelUserFan(tx *sql.Tx, mid, fanMid int64) (num int64, err error) { |
|
var res xsql.Result |
|
if res, err = tx.Exec(d.userFanSQL(mid, _cancelUserFan), mid, fanMid); err != nil { |
|
return |
|
} |
|
return res.RowsAffected() |
|
} |
|
|
|
// IsFan 获取mid的粉丝 |
|
func (d *Dao) IsFan(c context.Context, mid int64, candidateMIDs []int64) (MIDMap map[int64]bool) { |
|
if len(candidateMIDs) == 0 { |
|
return |
|
} |
|
MIDMap = d.isMidIn(c, mid, candidateMIDs, _isFan) |
|
return |
|
} |
|
|
|
// FetchPartFanList 获取mid的粉丝列表 |
|
func (d *Dao) FetchPartFanList(c context.Context, mid int64, cursor model.CursorValue, size int) ( |
|
MID2IDMap map[int64]time.Time, followedMIDs []int64, err error) { |
|
MID2IDMap, followedMIDs, err = d.fetchPartRelationUserList(c, mid, cursor, _getUserPartFans) |
|
return |
|
}
|
|
|