Skip to content

Validez de puntos · backend: dominio (disputed + ResourceValidityReport), migración 0028 y casos de uso #121

Description

@vgpastor

Parte del EPIC #120 · ficha docs/features/15-reporte-validez-de-puntos.md (§3.1, §3.2).

Objetivo

Modelar en el contexto resources la captura del reporte de validez y la lógica de "punto en duda".

Tareas

  • Resource: añadir disputed: boolean (default false) + disputedAt: Date | null. Métodos de dominio flagDisputed(at) (solo si publicStatus ∈ {active, saturated, paused}) y clearDispute(). Eventos ResourceDisputed / ResourceDisputeResolved.
  • Nueva entidad ResourceValidityReport + enum ValidityReason (closed | nonexistent | moved | outdated), con status (open | accepted | dismissed), note y photoUrls opcionales.
  • Puerto ResourceValidityReportRepository + adapter Drizzle.
  • Migración apps/api/drizzle/0028_resource_validity_reports.sql: tabla resource_validity_reports (+ índice único parcial (resource_id, reporter_user_id) WHERE status='open', índices por recurso/emergencia) y ALTER TABLE resources ADD COLUMN disputed/disputed_at. Aplicar en dev y test (global-setup) vía psql.
  • Casos de uso:
    • ReportResourceValidity — valida recurso visible; upsert del reporte abierto del usuario; recuenta reportantes distintos; si ≥ 3 y no estaba en duda → flagDisputed(). Excluye al dueño del recuento.
    • ResolveResourceDisputeconfirm_closed (→ changePublicStatus(Closed) + reportes accepted + clearDispute) / dismiss (→ reportes dismissed + clearDispute).
    • GetDisputedResources (cola) y GetResourceValidityReports (detalle).

Criterios de aceptación

  • TDD en verde: umbral N=3, dedup por usuario, invariante "solo disputable si visible", idempotencia de flagDisputed, exclusión del dueño.
  • pnpm --filter api build y pnpm --filter api test en verde.

Decisiones aplicadas (ficha §8): arquitectura propia en resources, N=3 global, excluir dueño, sin TTL en MVP.

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions