Skip to content

[Resources] Lost update en PUT /resources/:id/inventory frente a merges concurrentes (receiveInventory) #294

Description

@vgpastor

Problema

Detectado en la revisión de #293 (edición de inventario, #263). PUT /resources/:id/inventory sustituye el inventario completo con el snapshot del formulario del dueño, sin ningún control de concurrencia (ni versión, ni If-Match): el repositorio hace delete+reinsert incondicional.

Los recursos son el único agregado donde conviven dos escrituras sobre las mismas filas (resource_items):

Escenario de fallo

  1. El dueño abre /e/{slug}/mis-puntos/{id}/inventario (formulario sembrado con las líneas A).
  2. Mientras el formulario está abierto, un operador registra una entrada o el worker de donaciones fusiona la línea B.
  3. El dueño guarda sin tocar nada → el PUT reescribe con A y la línea B desaparece en silencio (204, sin aviso).

Estado actual

Está documentado como limitación aceptada en update-my-inventory.ts («Last-write-wins… revisit with an optimistic version/If-Match if it bites in the field»).

Propuesta

  • Columna de versión (o reutilizar un updatedAt fiable) en resources/resource_items + If-Match/expectedVersion en el PUT → 409 Conflict y recarga en el formulario web.
  • Requiere migración nueva (NNNN_…) y regenerar el cliente (pnpm gen:api).

Referencias: revisión en #293

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions