package userrole import ( "context" "fmt" "github.com/zeromicro/go-zero/core/stores/cache" "github.com/zeromicro/go-zero/core/stores/sqlx" ) var _ SysUserRoleModel = (*customSysUserRoleModel)(nil) type ( SysUserRoleModel interface { sysUserRoleModel FindRoleIdsByUserId(ctx context.Context, userId int64) ([]int64, error) FindUserIdsByRoleId(ctx context.Context, roleId int64) ([]int64, error) FindByUserId(ctx context.Context, userId int64) ([]*SysUserRole, error) DeleteByUserId(ctx context.Context, userId int64) error DeleteByUserIdTx(ctx context.Context, session sqlx.Session, userId int64) error DeleteByRoleIdTx(ctx context.Context, session sqlx.Session, roleId int64) error DeleteByUserIdForProduct(ctx context.Context, userId int64, productCode string) error DeleteByUserIdForProductTx(ctx context.Context, session sqlx.Session, userId int64, productCode string) error } customSysUserRoleModel struct { *defaultSysUserRoleModel } ) func NewSysUserRoleModel(conn sqlx.SqlConn, c cache.CacheConf, cachePrefix string, opts ...cache.Option) SysUserRoleModel { return &customSysUserRoleModel{ defaultSysUserRoleModel: newSysUserRoleModel(conn, c, cachePrefix, opts...), } } func (m *customSysUserRoleModel) FindRoleIdsByUserId(ctx context.Context, userId int64) ([]int64, error) { var ids []int64 query := fmt.Sprintf("SELECT `roleId` FROM %s WHERE `userId` = ?", m.table) if err := m.QueryRowsNoCacheCtx(ctx, &ids, query, userId); err != nil { return nil, err } return ids, nil } func (m *customSysUserRoleModel) FindUserIdsByRoleId(ctx context.Context, roleId int64) ([]int64, error) { var ids []int64 query := fmt.Sprintf("SELECT `userId` FROM %s WHERE `roleId` = ?", m.table) if err := m.QueryRowsNoCacheCtx(ctx, &ids, query, roleId); err != nil { return nil, err } return ids, nil } func (m *customSysUserRoleModel) FindByUserId(ctx context.Context, userId int64) ([]*SysUserRole, error) { var list []*SysUserRole query := fmt.Sprintf("SELECT %s FROM %s WHERE `userId` = ?", sysUserRoleRows, m.table) if err := m.QueryRowsNoCacheCtx(ctx, &list, query, userId); err != nil { return nil, err } return list, nil } func (m *customSysUserRoleModel) DeleteByUserId(ctx context.Context, userId int64) error { query := fmt.Sprintf("DELETE FROM %s WHERE `userId` = ?", m.table) _, err := m.ExecNoCacheCtx(ctx, query, userId) return err } func (m *customSysUserRoleModel) DeleteByUserIdTx(ctx context.Context, session sqlx.Session, userId int64) error { query := fmt.Sprintf("DELETE FROM %s WHERE `userId` = ?", m.table) _, err := session.ExecCtx(ctx, query, userId) return err } func (m *customSysUserRoleModel) DeleteByRoleIdTx(ctx context.Context, session sqlx.Session, roleId int64) error { query := fmt.Sprintf("DELETE FROM %s WHERE `roleId` = ?", m.table) _, err := session.ExecCtx(ctx, query, roleId) return err } func (m *customSysUserRoleModel) DeleteByUserIdForProduct(ctx context.Context, userId int64, productCode string) error { query := fmt.Sprintf("DELETE FROM %s WHERE `userId` = ? AND `roleId` IN (SELECT `id` FROM `sys_role` WHERE `productCode` = ?)", m.table) _, err := m.ExecNoCacheCtx(ctx, query, userId, productCode) return err } func (m *customSysUserRoleModel) DeleteByUserIdForProductTx(ctx context.Context, session sqlx.Session, userId int64, productCode string) error { query := fmt.Sprintf("DELETE FROM %s WHERE `userId` = ? AND `roleId` IN (SELECT `id` FROM `sys_role` WHERE `productCode` = ?)", m.table) _, err := session.ExecCtx(ctx, query, userId, productCode) return err }