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

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

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