chore: enforce gen transaction rule
This commit is contained in:
@@ -891,10 +891,9 @@ func (t *tenant) ApplyOwnedTenant(ctx context.Context, userID int64, code, name
|
||||
}
|
||||
|
||||
// 事务边界:创建租户 + 写入 tenant_users(租户管理员角色)。
|
||||
// 使用全新 Session,避免复用带 Model/Statement 的 DB 句柄引发 GORM 反射 panic。
|
||||
db := _db.WithContext(ctx).Session(&gorm.Session{})
|
||||
err = db.Transaction(func(tx *gorm.DB) error {
|
||||
if err := tx.Omit("Users").Create(tenant).Error; err != nil {
|
||||
// MUST: 使用 Gen 事务包装,确保同一事务连接与一致的查询风格。
|
||||
err = models.Q.Transaction(func(tx *models.Query) error {
|
||||
if err := tx.Tenant.WithContext(ctx).Create(tenant); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
@@ -904,11 +903,17 @@ func (t *tenant) ApplyOwnedTenant(ctx context.Context, userID int64, code, name
|
||||
Role: types.NewArray([]consts.TenantUserRole{consts.TenantUserRoleTenantAdmin}),
|
||||
Status: consts.UserStatusVerified,
|
||||
}
|
||||
if err := tx.Create(tenantUser).Error; err != nil {
|
||||
if err := tx.TenantUser.WithContext(ctx).Create(tenantUser); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return tx.First(tenant, tenant.ID).Error
|
||||
// 回填 created_at/updated_at 等字段,保持与其他创建逻辑一致。
|
||||
fresh, err := tx.Tenant.WithContext(ctx).Where(tx.Tenant.ID.Eq(tenant.ID)).First()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
*tenant = *fresh
|
||||
return nil
|
||||
})
|
||||
if err != nil {
|
||||
return nil, err
|
||||
|
||||
Reference in New Issue
Block a user