package services import ( "context" "quyun/v2/database/models" "quyun/v2/pkg/consts" "github.com/pkg/errors" ) // @provider type tenant struct{} func (t *tenant) ContainsUserID(ctx context.Context, tenantID, userID int64) (*models.User, error) { tbl, query := models.TenantUserQuery.QueryContext(ctx) _, err := query.Where(tbl.TenantID.Eq(tenantID), tbl.UserID.Eq(userID)).First() if err != nil { return nil, errors.Wrapf(err, "ContainsUserID failed, tenantID: %d, userID: %d", tenantID, userID) } return User.FindByID(ctx, userID) } // AddUser func (t *tenant) AddUser(ctx context.Context, tenantID, userID int64) error { tenantUser := &models.TenantUser{ TenantID: tenantID, UserID: userID, } if err := tenantUser.Create(ctx); err != nil { return errors.Wrapf(err, "AddUser failed, tenantID: %d, userID: %d", tenantID, userID) } return nil } // RemoveUser func (t *tenant) RemoveUser(ctx context.Context, tenantID, userID int64) error { tbl, query := models.TenantUserQuery.QueryContext(ctx) tenantUser, err := query.Where(tbl.TenantID.Eq(tenantID), tbl.UserID.Eq(userID)).First() if err != nil { return errors.Wrapf(err, "RemoveUser failed to find, tenantID: %d, userID: %d", tenantID, userID) } _, err = tenantUser.Delete(ctx) if err != nil { return errors.Wrapf(err, "RemoveUser failed to delete, tenantID: %d, userID: %d", tenantID, userID) } return nil } // SetUserRole func (t *tenant) SetUserRole(ctx context.Context, tenantID, userID int64, role ...consts.TenantUserRole) error { tbl, query := models.TenantUserQuery.QueryContext(ctx) tenantUser, err := query.Where(tbl.TenantID.Eq(tenantID), tbl.UserID.Eq(userID)).First() if err != nil { return errors.Wrapf(err, "SetUserRole failed to find, tenantID: %d, userID: %d", tenantID, userID) } tenantUser.Role = role if _, err := tenantUser.Update(ctx); err != nil { return errors.Wrapf(err, "SetUserRole failed to update, tenantID: %d, userID: %d", tenantID, userID) } return nil } // Users func (t *tenant) Users(ctx context.Context, tenantID int64) ([]*models.User, int64, error) { return nil, 0, nil }