Files
quyun-v2/backend/app/services/tenant.go
2025-12-16 14:26:31 +08:00

68 lines
2.0 KiB
Go

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
}