sysUserRoleModel.go 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. package userrole
  2. import (
  3. "context"
  4. "fmt"
  5. "github.com/zeromicro/go-zero/core/stores/cache"
  6. "github.com/zeromicro/go-zero/core/stores/sqlx"
  7. )
  8. var _ SysUserRoleModel = (*customSysUserRoleModel)(nil)
  9. type (
  10. SysUserRoleModel interface {
  11. sysUserRoleModel
  12. FindRoleIdsByUserId(ctx context.Context, userId int64) ([]int64, error)
  13. FindRoleIdsByUserIdForProduct(ctx context.Context, userId int64, productCode string) ([]int64, error)
  14. FindUserIdsByRoleId(ctx context.Context, roleId int64) ([]int64, error)
  15. FindByUserId(ctx context.Context, userId int64) ([]*SysUserRole, error)
  16. DeleteByUserId(ctx context.Context, userId int64) error
  17. DeleteByUserIdTx(ctx context.Context, session sqlx.Session, userId int64) error
  18. DeleteByRoleIdTx(ctx context.Context, session sqlx.Session, roleId int64) error
  19. DeleteByUserIdForProduct(ctx context.Context, userId int64, productCode string) error
  20. DeleteByUserIdForProductTx(ctx context.Context, session sqlx.Session, userId int64, productCode string) error
  21. }
  22. customSysUserRoleModel struct {
  23. *defaultSysUserRoleModel
  24. }
  25. )
  26. func NewSysUserRoleModel(conn sqlx.SqlConn, c cache.CacheConf, cachePrefix string, opts ...cache.Option) SysUserRoleModel {
  27. return &customSysUserRoleModel{
  28. defaultSysUserRoleModel: newSysUserRoleModel(conn, c, cachePrefix, opts...),
  29. }
  30. }
  31. func (m *customSysUserRoleModel) FindRoleIdsByUserId(ctx context.Context, userId int64) ([]int64, error) {
  32. var ids []int64
  33. query := fmt.Sprintf("SELECT `roleId` FROM %s WHERE `userId` = ?", m.table)
  34. if err := m.QueryRowsNoCacheCtx(ctx, &ids, query, userId); err != nil {
  35. return nil, err
  36. }
  37. return ids, nil
  38. }
  39. func (m *customSysUserRoleModel) FindRoleIdsByUserIdForProduct(ctx context.Context, userId int64, productCode string) ([]int64, error) {
  40. var ids []int64
  41. query := fmt.Sprintf("SELECT ur.`roleId` FROM %s ur INNER JOIN `sys_role` r ON ur.`roleId` = r.`id` WHERE ur.`userId` = ? AND r.`productCode` = ?", m.table)
  42. if err := m.QueryRowsNoCacheCtx(ctx, &ids, query, userId, productCode); err != nil {
  43. return nil, err
  44. }
  45. return ids, nil
  46. }
  47. func (m *customSysUserRoleModel) FindUserIdsByRoleId(ctx context.Context, roleId int64) ([]int64, error) {
  48. var ids []int64
  49. query := fmt.Sprintf("SELECT `userId` FROM %s WHERE `roleId` = ?", m.table)
  50. if err := m.QueryRowsNoCacheCtx(ctx, &ids, query, roleId); err != nil {
  51. return nil, err
  52. }
  53. return ids, nil
  54. }
  55. func (m *customSysUserRoleModel) FindByUserId(ctx context.Context, userId int64) ([]*SysUserRole, error) {
  56. var list []*SysUserRole
  57. query := fmt.Sprintf("SELECT %s FROM %s WHERE `userId` = ?", sysUserRoleRows, m.table)
  58. if err := m.QueryRowsNoCacheCtx(ctx, &list, query, userId); err != nil {
  59. return nil, err
  60. }
  61. return list, nil
  62. }
  63. func (m *customSysUserRoleModel) DeleteByUserId(ctx context.Context, userId int64) error {
  64. query := fmt.Sprintf("DELETE FROM %s WHERE `userId` = ?", m.table)
  65. _, err := m.ExecNoCacheCtx(ctx, query, userId)
  66. return err
  67. }
  68. func (m *customSysUserRoleModel) DeleteByUserIdTx(ctx context.Context, session sqlx.Session, userId int64) error {
  69. query := fmt.Sprintf("DELETE FROM %s WHERE `userId` = ?", m.table)
  70. _, err := session.ExecCtx(ctx, query, userId)
  71. return err
  72. }
  73. func (m *customSysUserRoleModel) DeleteByRoleIdTx(ctx context.Context, session sqlx.Session, roleId int64) error {
  74. query := fmt.Sprintf("DELETE FROM %s WHERE `roleId` = ?", m.table)
  75. _, err := session.ExecCtx(ctx, query, roleId)
  76. return err
  77. }
  78. func (m *customSysUserRoleModel) DeleteByUserIdForProduct(ctx context.Context, userId int64, productCode string) error {
  79. query := fmt.Sprintf("DELETE FROM %s WHERE `userId` = ? AND `roleId` IN (SELECT `id` FROM `sys_role` WHERE `productCode` = ?)", m.table)
  80. _, err := m.ExecNoCacheCtx(ctx, query, userId, productCode)
  81. return err
  82. }
  83. func (m *customSysUserRoleModel) DeleteByUserIdForProductTx(ctx context.Context, session sqlx.Session, userId int64, productCode string) error {
  84. query := fmt.Sprintf("DELETE FROM %s WHERE `userId` = ? AND `roleId` IN (SELECT `id` FROM `sys_role` WHERE `productCode` = ?)", m.table)
  85. _, err := session.ExecCtx(ctx, query, userId, productCode)
  86. return err
  87. }