refactor: move tenant apply db to service

This commit is contained in:
2025-12-25 11:27:14 +08:00
parent c010710b32
commit 1a357177fd
3 changed files with 64 additions and 30 deletions

View File

@@ -8,12 +8,10 @@ import (
"quyun/v2/app/errorx"
"quyun/v2/app/http/web/dto"
"quyun/v2/app/services"
"quyun/v2/database/models"
"quyun/v2/pkg/consts"
"quyun/v2/providers/jwt"
"github.com/gofiber/fiber/v3"
"go.ipao.vip/gen/types"
"gorm.io/gorm"
)
@@ -100,34 +98,7 @@ func (ctl *tenantApply) apply(ctx fiber.Ctx, form *dto.TenantApplyForm) (*dto.Te
return nil, errorx.Wrap(err).WithMsg("申请校验失败,请稍后再试")
}
tenant := &models.Tenant{
UserID: claims.UserID,
Code: code,
UUID: types.NewUUIDv4(),
Name: name,
Status: consts.TenantStatusPendingVerify,
Config: types.JSON([]byte(`{}`)),
}
// NOTE: 使用全新 Session避免复用 gen.DO 内部带 Model/Statement 的 *gorm.DB 导致 schema 与 dest 不一致而触发 GORM 反射 panic。
db := models.Q.Tenant.WithContext(ctx).UnderlyingDB().Session(&gorm.Session{})
err = db.Transaction(func(tx *gorm.DB) error {
if err := tx.Omit("Users").Create(tenant).Error; err != nil {
return err
}
tenantUser := &models.TenantUser{
TenantID: tenant.ID,
UserID: claims.UserID,
Role: types.NewArray([]consts.TenantUserRole{consts.TenantUserRoleTenantAdmin}),
Status: consts.UserStatusVerified,
}
if err := tx.Create(tenantUser).Error; err != nil {
return err
}
return tx.First(tenant, tenant.ID).Error
})
tenant, err := services.Tenant.ApplyOwnedTenant(ctx, claims.UserID, code, name)
if err != nil {
if errors.Is(err, gorm.ErrDuplicatedKey) {
return nil, errorx.ErrRecordDuplicated.WithMsg("租户 ID 已被占用,请换一个试试")