-- ============================================================
-- Mesa de Inversiones — Esquema de base (Fase 1)
-- Motor: PostgreSQL (corré esto en DBeaver, sobre tu base)
-- Diseñado para no romper nada al llegar la Fase 2 (compartir).
-- ============================================================

-- gen_random_uuid() está en el core desde PostgreSQL 13.
-- Si tu versión es anterior, esta extensión lo habilita.
create extension if not exists pgcrypto;

-- ---------- Usuarios ----------
create table if not exists app_users (
  id            uuid        primary key default gen_random_uuid(),
  email         text        not null unique,
  password_hash text        not null,
  created_at    timestamptz not null default now()
);

-- ---------- Proyectos ----------
-- id propio (uuid) y owner_id desde ya, para que la Fase 2 (membresías
-- y proyectos compartidos) se apoye sobre esto sin migraciones dolorosas.
-- local_id es el id que usa la app en el navegador; (owner_id, local_id)
-- es único para mapear la sincronización.
create table if not exists projects (
  id         uuid        primary key default gen_random_uuid(),
  owner_id   uuid        not null references app_users (id) on delete cascade,
  local_id   text        not null,
  name       text,
  data       jsonb       not null,
  updated_at timestamptz not null default now(),
  unique (owner_id, local_id)
);

create index if not exists projects_owner_idx
  on projects (owner_id, updated_at desc);

-- ============================================================
-- Listo. La seguridad (que cada usuario solo acceda a lo suyo)
-- la aplica el servidor Node en cada consulta, filtrando por el
-- usuario autenticado. Las tablas de la Fase 2 se agregan en
-- fase2-diseno.md cuando avancemos.
-- ============================================================
