Feature-222: admin supplies CRUD#251
Merged
vgpastor merged 17 commits intoJun 30, 2026
Merged
Conversation
Catálogo maestro de insumos cerrado (admins-only). Añade el permiso catalogue:manage al catálogo de permisos; platform_admin lo obtiene vía ALL_PERMISSIONS. Base de GlobalEmergency#222 (y GlobalEmergency#221).
SupplyNotFound, SupplyCodeConflict, VariantTargetNotFound, MergeIntoSelf y AliasConflict para la gestión admin del catálogo (GlobalEmergency#222).
El agregado Supply gana mutadores inmutables (rename/recategorize/archive/ restore/setVariantOf...) que re-aplican las invariantes, y formatSupplyCode para el código canónico INS-NNNN. id y code no son editables (GlobalEmergency#222).
SEQUENCE supply_code_seq sembrada por encima del máximo actual para asignar el siguiente código libre a los insumos creados por el admin (GlobalEmergency#222).
Extiende SupplyRepository con save (upsert), allocateCode (nextval), list con filtros, CRUD de alias y un merge transaccional (mueve alias, repunta variantes hijas y archiva el origen). Implementación Drizzle + int-spec (GlobalEmergency#222).
CachingSupplyCatalogReadModel gana invalidate() para que las escrituras de gestión refresquen la cara pública de inmediato en vez de esperar al TTL (GlobalEmergency#222).
AdminSupplyView expone el agregado completo (status, registrationNotes) más sus alias, para la API de gestión (distinta de la cara pública) (GlobalEmergency#222).
CreateSupply asigna el siguiente código INS-NNNN y exige que el padre exista al crear una variante (GlobalEmergency#222).
EditSupply aplica sólo los campos provistos vía los mutadores del agregado; code no es editable (GlobalEmergency#222).
MergeSupplies valida origen/destino y rechaza fusionar un insumo consigo mismo; delega el movimiento de alias y el archivado en el repositorio (GlobalEmergency#222).
ArchiveSupply/RestoreSupply, AddSupplyAlias/RemoveSupplyAlias y ListSuppliesAdmin/GetSupplyAdmin (incluye archivados y campos internos) (GlobalEmergency#222).
El filtro de excepciones de supplies mapea los errores admin: validación/ merge-into-self → 400, not-found → 404, code/alias conflict → 409 (GlobalEmergency#222).
DTOs de petición (create/edit/alias/merge/listado) y respuesta (AdminSupply, CreateSupplyResponse) con class-validator y Swagger. code es server-allocated (GlobalEmergency#222).
SuppliesAdminController expone alta/edición/archivado/restauración, gestión de alias y fusión bajo catalogue:manage (scope plataforma). Invalida la caché del catálogo tras cada escritura (GlobalEmergency#222).
Cablea los casos de uso admin, comparte la instancia cacheada del read-model (useExisting) y registra SuppliesAdminController (GlobalEmergency#222).
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
…go en el caso de uso Mueve el prefijo del codigo del insumo a la base de datos (tabla categories), permitiendo que sea dinamico por categoria raiz en ingles. Refactoriza la generacion del codigo para que ocurra en el caso de uso (CreateSupply) usando nextSequenceValue del repositorio y formatSupplyCode del dominio. Actualiza dinamicamente el prefijo de los codigos durante la edicion en EditSupply. (GlobalEmergency#222)
7bfad91 to
7590e85
Compare
|
@vgpastor is attempting to deploy a commit to the GlobalEmergency Team on Vercel. A member of the Team first needs to authorize it. |
# Conflicts: # apps/api/src/contexts/supplies/application/list-categories.spec.ts # apps/api/src/contexts/supplies/domain/category-definition.ts # apps/api/src/contexts/supplies/domain/supply.ts # apps/api/src/contexts/supplies/infrastructure/drizzle/drizzle-category.repository.ts # apps/api/src/contexts/supplies/infrastructure/drizzle/schema.ts # apps/api/src/contexts/supplies/infrastructure/http/supplies-domain-exception.filter.ts # apps/api/src/contexts/supplies/supplies.module.ts
29570d4 to
d909982
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Resumen
Añade la API de gestión (admins-only) del catálogo maestro de insumos (#222), completando la cara de escritura que faltaba: hasta ahora el catálogo era de solo lectura (
SupplyRepository.save()lanzaba "not implemented") y no había forma de administrarlo.Se introduce, sobre el contexto
supplies(DDD/hexagonal):catalogue:manage(scope plataforma) en el catálogo deidentity;platform_adminlo obtiene víaALL_PERMISSIONS. Cierra el catálogo a admins (también habilita [FEATURE] Admin CRUD de categorias y subcategorias (jerarquia, orden, i18n, slugs nucleo protegidos) #221).Supply(rename/recategorize/archive/restore/setVariantOf…) que re-aplican las invariantes, helperformatSupplyCodey errores de dominio del catálogo.idycodeno son editables.INS-NNNN: migración0040con unaSEQUENCEsembrada por encima del máximo actual (INS-0211) para asignar el siguiente código libre.SupplyRepositoryganasave(upsert),allocateCode,listcon filtros, CRUD de alias y unmergetransaccional (mueve alias de A→B, repunta variantes hijas y archiva A, sin borrarlo —preserva referencias legadas para [FEATURE] Enlace SupplyLine.supplyId (soft link) en needs, offers, inventario y containers #223/[FEATURE] Backfill/matching de lineas legacy -> supplyId + informe de no-casados #226).SuppliesAdminControlleren/admin/supplies(catalogue:manage), DTOs conclass-validator/Swagger, y mapeo de errores en el filtro de excepciones (400/404/409). Invalida la caché del catálogo público tras cada escritura para consistencia inmediata.Alcance acotado a catálogo (per Alcance mínimo de la issue): el re-enlace masivo de líneas legadas queda en #226 y la UI en #225.
Validación
pnpm --filter api build, ESLint ({src,test},--max-warnings=0), Prettier--checkpnpm dev:infra+pnpm --filter api test(incluye eldrizzle-supply.repository.int-specque requiere Postgres :5433)GET /suppliesya no lista archivados)0040_supply_code_seq.sqlpnpm gen:apipendiente (arranca elAppModuley necesita Postgres/Redis): falta regenerar y commitearpackages/api-client/src/schema.tscon las rutas/admin/supplies*Cierre