refactor: move tenant apply db to service
This commit is contained in:
@@ -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 已被占用,请换一个试试")
|
||||
|
||||
Reference in New Issue
Block a user