Orquestación iam/account
Generado automáticamente desde el archivo fuente. No editar a mano — vuelve a ejecutar
catalyst-changelog-sync.
Qué cambió
Sección titulada «Qué cambió»IamCreateAccountHandleryIamUpdateAccountByIdHandlerse reescriben como orquestadores. Validan unicidad deemail,usernameycodeantes del INSERT y lanzan unConflictExceptionlocalizado (iam.error.uniqueEmail/uniqueUsername/uniqueCode) en lugar de dejar que la base de datos falle con un mensaje opaco.- Las columnas denormalizadas
dApplicationCodesydPermissionsse calculan ahora server-side desdeclient.applicationsyroles.permissionscon el nuevo helperiamCreatePermissionsFromRoles. Cualquier valor que envíe el cliente para esos campos se sobrescribe — el servidor es la fuente de verdad. - Nueva regla anti-escalado: un caller sin
IamPermissions.SUDOsolo puede asignar permisos que ya posee, en otro caso se lanza unConflictException401 (iam.error.insufficientPermissions).hasAddChildTenants: trueexpandetenantIdscon los descendientes del árbol de tenants. - Cuando
payload.type === 'USER', el handler invocaIamCreateUserService.main(yIamUpdateUserByIdService.mainen update) dentro de la misma operación coordinada, compartiendo unoperationIdpara mantener un audit trail coherente. Unpasswordvacío en update se elimina del payload del user, así no se sobrescriben passwords sin querer.
Por qué importa
Sección titulada «Por qué importa»Antes de este cambio, IamCreateAccountHandler era un pass-through fino sobre repository.create(payload). El bloque user anidado se ignoraba en silencio, las dos columnas derivadas tenía que inventarlas el frontend (con riesgo de inconsistencia en autorización), la unicidad fallaba en la capa de DB con mensajes no localizados, y cualquier caller autenticado con iam.account.create podía escalar privilegios asignando roles que no le correspondían. La nueva orquestación porta la referencia de Aurora monolítico (~225 líneas en create-account.function.ts) al patrón canónico de catalyst — el handler orquesta directamente los services inyectados, sin la indirección de CommandBus/QueryBus — y desbloquea el formulario rico de iam/account del cambio dependiente en frontend. A partir de aquí, cualquier proyecto generado con catalyst arranca con una orquestación de iam correcta de extremo a extremo.