* fix(db): reconcile orphaned mail-hunt migrations applied to prod Prod carries 20260807090000_mail_connections and 20260807090100_inbox_mail_hunt_source (applied 2026-08-07 morning) with no files in supabase/migrations/, so the Supabase integration fails every push to main with "Remote migration versions not found in local migrations directory". This commits the byte-identical SQL recovered from prod's supabase_migrations.schema_migrations statements under the exact applied versions. No new DDL runs on prod: the versions already exist there, this only reconciles the repo. Also classifies mail_connections in full-archive-export.ts (excluded: live OAuth refresh tokens, not portable), which the archive-completeness test requires for any new company_id table. Whoever owns the mail-hunt feature branch: these files now exist on main; reuse them as-is instead of re-creating the versions. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * fix(db): annotate reconciled mail_connections migration as pg-test skip The file is a byte-recovered reconciliation of DDL already applied to prod; it never executes again, so pg-real coverage belongs to the mail-hunt feature branch that owns the schema. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> --------- Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
47 lines
2.0 KiB
SQL
47 lines
2.0 KiB
SQL
-- pg-test: skip (reconciliation only: this DDL was already applied to prod
|
|
-- out-of-band on 2026-08-07 and recovered byte-identical from
|
|
-- supabase_migrations.schema_migrations; the file exists so Supabase
|
|
-- branching stops failing on the orphaned version and will never re-run.
|
|
-- The mail-hunt feature branch that owns this schema must ship the real
|
|
-- pg-real coverage for the trigger and RLS.)
|
|
CREATE TABLE IF NOT EXISTS public.mail_connections (
|
|
id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
company_id uuid NOT NULL REFERENCES public.companies(id) ON DELETE CASCADE,
|
|
provider text NOT NULL CHECK (provider IN ('gmail', 'microsoft')),
|
|
email_address text NOT NULL,
|
|
connected_by uuid REFERENCES auth.users(id) ON DELETE SET NULL,
|
|
encrypted_refresh_token text NOT NULL,
|
|
encrypted_access_token text,
|
|
access_token_expires_at timestamptz,
|
|
scopes text[] NOT NULL DEFAULT '{}',
|
|
scope_label text,
|
|
backfill_from date,
|
|
backfill_completed_at timestamptz,
|
|
status text NOT NULL DEFAULT 'active'
|
|
CHECK (status IN ('active', 'needs_reconsent', 'revoked')),
|
|
last_error_code text,
|
|
last_error_at timestamptz,
|
|
last_searched_at timestamptz,
|
|
created_at timestamptz NOT NULL DEFAULT now(),
|
|
updated_at timestamptz NOT NULL DEFAULT now()
|
|
);
|
|
|
|
CREATE UNIQUE INDEX IF NOT EXISTS idx_mail_connections_identity
|
|
ON public.mail_connections (company_id, provider, email_address);
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_mail_connections_company_active
|
|
ON public.mail_connections (company_id)
|
|
WHERE status = 'active';
|
|
|
|
ALTER TABLE public.mail_connections ENABLE ROW LEVEL SECURITY;
|
|
|
|
DROP TRIGGER IF EXISTS mail_connections_updated_at ON public.mail_connections;
|
|
CREATE TRIGGER mail_connections_updated_at
|
|
BEFORE UPDATE ON public.mail_connections
|
|
FOR EACH ROW EXECUTE FUNCTION public.update_updated_at_column();
|
|
|
|
COMMENT ON TABLE public.mail_connections IS
|
|
'Read-only mailbox grants for receipt hunting. Service-role only: rows carry live refresh tokens.';
|
|
|
|
NOTIFY pgrst, 'reload schema';
|