Skip to content

Feature #223: supplyline + supplyid#252

Open
jesusareyesv wants to merge 2 commits into
GlobalEmergency:mainfrom
jesusareyesv:feature/223-supplyline-supplyid
Open

Feature #223: supplyline + supplyid#252
jesusareyesv wants to merge 2 commits into
GlobalEmergency:mainfrom
jesusareyesv:feature/223-supplyline-supplyid

Conversation

@jesusareyesv

@jesusareyesv jesusareyesv commented Jun 30, 2026

Copy link
Copy Markdown
Contributor

Resumen

Añade un enlace opcional (soft link) supplyId al value object SupplyLine
para que cada línea de material pueda apuntar al catálogo maestro Supply
(epic #228), sin romper las líneas existentes de texto libre ni la opción
"Otro" (que quedan con supplyId = null).

Alcance mínimo del issue: solo el enlace opcional y su propagación por VO / BD /
DTOs. La UI de captura (#224) y el backfill de filas legacy (#226) quedan fuera.

Qué cambia:

  • VO SupplyLine (contexto supplies, upstream): nuevo campo opcional
    supplyId: string | null en props y snapshot. Se normaliza (trimnull,
    sin validación de formato en el dominio). Los snapshots viejos sin la clave
    rehidratan como null.
  • Columnas/mappers Drizzle compartidos (supply-line-columns.ts): columna
    supply_id (nullable) y propagación en rowToSupplyLineSnapshot /
    supplyLineToColumns. Esto cubre las 4 tablas de líneas a la vez.
  • Migración 0044_supply_line_supply_id.sql: agrega la columna nullable
    supply_id con FK a supplies(id) ON DELETE SET NULL en need_items,
    offer_items, resource_items y donation_intake_lines. Idempotente
    (ADD COLUMN IF NOT EXISTS + DROP CONSTRAINT IF EXISTS antes de
    ADD CONSTRAINT). Las líneas en jsonb (containers.lines, shipments.items)
    heredan el campo vía SupplyLineSnapshot, sin columna.
  • DTOs (supply-line.dto.ts): request con @IsOptional() @IsUUID();
    response con supplyId: string | null para que tsc
    (exactOptionalPropertyTypes) marque cualquier sitio donde se pierda.
  • Propagación del enlace en cada superficie de línea: needs, offers (oferta
    e intake de donación), inventario de recursos, contenedores y envíos
    (logistics). La dedup de inventario distingue una línea catalogada de una de
    texto libre con el mismo nombre. Las vistas de respuesta exponen supplyId
    (null en filas legacy).

Validación

  • Pasé el gate que toca para esta zona del repo
    • pnpm --filter api build (tsc / exactOptionalPropertyTypes) — verde
    • eslint --max-warnings=0 y prettier --check — limpios
    • pnpm --filter api test — verde en CI (incluye los int-spec con BD); se
      actualizó la aserción de snapshot completo en
      drizzle-resource.repository.int-spec.ts para incluir supplyId: null
    • Tests nuevos: round-trip del VO (presente y ausente → null), aserción de
      los mappers de columnas, y casos de dominio en resource.spec.ts
      (round-trip de supplyId + no-merge de línea catalogada vs texto libre)
  • Verifiqué el comportamiento manualmente si aplica
    • Pendiente smoke local (start:dev): POST de need/offer/resource/container
      con un supplyId real → GET y ver el enlace; POST sin supplyId (ruta
      "Otro") → null
  • Actualicé docs, migraciones o cliente API si correspondía
    • Migración incluida (0044)
    • Pendiente: pnpm gen:api + commit de packages/api-client/src/schema.ts
      (arranca AppModule → requiere Postgres + Redis; correr donde haya infra y
      verificar que supplyId aparece en los schemas request/response de la línea)

Cierre

Añade un campo opcional supplyId al value object SupplyLine (soft link al
catálogo Supply de GlobalEmergency#228), sus columnas/mappers Drizzle compartidos y los DTOs
de request/response. Migración 0043 agrega la columna nullable supply_id con
FK a supplies(id) ON DELETE SET NULL en las 4 tablas de líneas
(need_items, offer_items, resource_items, donation_intake_lines). Las líneas
en jsonb (containers.lines, shipments.items) heredan el campo vía snapshot.
name se conserva para filas legacy y la opción "Otro" (supplyId null).

Refs GlobalEmergency#223
@jesusareyesv jesusareyesv force-pushed the feature/223-supplyline-supplyid branch from a4e8993 to 5e15544 Compare June 30, 2026 17:21
@vercel

vercel Bot commented Jun 30, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

1 Skipped Deployment
Project Deployment Actions Updated (UTC)
response-grid Skipped Skipped Jun 30, 2026 5:27pm

Request Review

…as de material

Hila el soft link supplyId desde el request hasta el snapshot en cada
superficie de línea: needs, offers (oferta + intake de donación), inventario
de recursos, contenedores y envíos. La dedup de inventario distingue una línea
catalogada de una de texto libre con el mismo nombre. Las vistas de respuesta
exponen supplyId (null en filas legacy).

Refs GlobalEmergency#223
@jesusareyesv jesusareyesv force-pushed the feature/223-supplyline-supplyid branch from 5e15544 to 996800b Compare June 30, 2026 17:27
@jesusareyesv jesusareyesv changed the title Feature-223 supplyline supplyid Feature #223: supplyline + supplyid Jun 30, 2026
@jesusareyesv jesusareyesv marked this pull request as ready for review June 30, 2026 17:32
@jesusareyesv jesusareyesv requested a review from vgpastor as a code owner June 30, 2026 17:32
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[FEATURE] Enlace SupplyLine.supplyId (soft link) en needs, offers, inventario y containers

1 participant