user_black.go 2.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. package dao
  2. import (
  3. "context"
  4. xsql "database/sql"
  5. "fmt"
  6. "go-common/app/service/bbq/user/internal/model"
  7. "go-common/library/database/sql"
  8. "go-common/library/log"
  9. "go-common/library/time"
  10. )
  11. const (
  12. _addUserBlack = "insert into user_black_%02d (`mid`,`black_mid`) values (?,?) on duplicate key update state=0"
  13. _cancelUserBlack = "update user_black_%02d set state=1 where mid=? and black_mid=?"
  14. _getUserPartBlacks = "select black_mid, mtime from user_black_%02d where mid=? and state=0 and mtime<=? order by mtime desc, black_mid desc limit %d"
  15. _getUserBlacks = "select black_mid from user_black_%02d where mid=? and state=0"
  16. _isBlack = "select black_mid from user_black_%02d where mid=? and state=0 and black_mid in (%s)"
  17. )
  18. // TxAddUserBlack .
  19. func (d *Dao) TxAddUserBlack(c context.Context, tx *sql.Tx, mid, upMid int64) (num int64, err error) {
  20. var res xsql.Result
  21. // sql中含有ignore,该情况为了简化是否已存在的判断
  22. querySQL := fmt.Sprintf(_addUserBlack, d.getTableIndex(mid))
  23. if res, err = tx.Exec(querySQL, mid, upMid); err != nil {
  24. log.Errorv(c, log.KV("event", "add_user_black"), log.KV("err", err), log.KV("mid", mid), log.KV("up_mid", upMid), log.KV("sql", querySQL))
  25. return
  26. }
  27. return res.RowsAffected()
  28. }
  29. // TxCancelUserBlack .
  30. func (d *Dao) TxCancelUserBlack(c context.Context, tx *sql.Tx, mid, upMid int64) (num int64, err error) {
  31. var res xsql.Result
  32. querySQL := fmt.Sprintf(_cancelUserBlack, d.getTableIndex(mid))
  33. if res, err = tx.Exec(querySQL, mid, upMid); err != nil {
  34. log.Errorv(c, log.KV("event", "cancel_user_black"), log.KV("err", err), log.KV("mid", mid), log.KV("up_mid", upMid), log.KV("sql", querySQL))
  35. return
  36. }
  37. return res.RowsAffected()
  38. }
  39. // FetchBlackList 获取mid的所有拉黑up主
  40. func (d *Dao) FetchBlackList(c context.Context, mid int64) (upMid []int64, err error) {
  41. querySQL := fmt.Sprintf(_getUserBlacks, d.getTableIndex(mid))
  42. rows, err := d.db.Query(c, querySQL, mid)
  43. if err != nil {
  44. log.Errorv(c, log.KV("event", "mysql_select"), log.KV("table", "user_black"))
  45. return
  46. }
  47. defer rows.Close()
  48. for rows.Next() {
  49. var m int64
  50. if err = rows.Scan(&m); err != nil {
  51. log.Errorv(c, log.KV("event", "mysql_scan"), log.KV("table", "user_black"))
  52. return
  53. }
  54. upMid = append(upMid, m)
  55. }
  56. log.Infov(c, log.KV("event", "mysql_select"), log.KV("sql", querySQL),
  57. log.KV("mid", mid), log.KV("black_num", len(upMid)))
  58. return
  59. }
  60. // FetchPartBlackList 获取mid的拉黑up主
  61. func (d *Dao) FetchPartBlackList(c context.Context, mid int64, cursor model.CursorValue, size int) (
  62. MID2IDMap map[int64]time.Time, blackMIDs []int64, err error) {
  63. MID2IDMap, blackMIDs, err = d.fetchPartRelationUserList(c, mid, cursor, _getUserPartBlacks)
  64. return
  65. }
  66. // IsBlack 获取mid的拉黑用户
  67. func (d *Dao) IsBlack(c context.Context, mid int64, candidateMIDs []int64) (MIDMap map[int64]bool) {
  68. if len(candidateMIDs) == 0 {
  69. return
  70. }
  71. MIDMap = d.isMidIn(c, mid, candidateMIDs, _isBlack)
  72. return
  73. }