5508e15da1
add Stripe checkout, portal, webhook ingestion, and idempotent event persistence add billing lifecycle state (grace/sync/timeline/admin visibility) and stronger entitlement handling add analytics event tracking and admin summary APIs plus account/pricing UI integration
29 lines
1.5 KiB
SQL
29 lines
1.5 KiB
SQL
create table if not exists public.billing_webhook_events (
|
|
id uuid primary key default gen_random_uuid(),
|
|
provider text not null check (provider in ('stripe')),
|
|
external_event_id text not null,
|
|
event_type text not null,
|
|
status text not null check (status in ('received', 'processed', 'failed', 'ignored')) default 'received',
|
|
workspace_id uuid references public.workspaces (id) on delete set null,
|
|
external_customer_ref text,
|
|
external_subscription_ref text,
|
|
payload_json jsonb not null,
|
|
error_message text,
|
|
received_at timestamptz not null default now(),
|
|
processed_at timestamptz,
|
|
created_at timestamptz not null default now(),
|
|
updated_at timestamptz not null default now(),
|
|
constraint billing_webhook_events_provider_event_key unique (provider, external_event_id)
|
|
);
|
|
|
|
create index if not exists billing_webhook_events_status_idx on public.billing_webhook_events (status);
|
|
create index if not exists billing_webhook_events_workspace_id_idx on public.billing_webhook_events (workspace_id);
|
|
create index if not exists billing_webhook_events_customer_ref_idx on public.billing_webhook_events (external_customer_ref);
|
|
create index if not exists billing_webhook_events_subscription_ref_idx on public.billing_webhook_events (external_subscription_ref);
|
|
|
|
drop trigger if exists set_billing_webhook_events_updated_at on public.billing_webhook_events;
|
|
create trigger set_billing_webhook_events_updated_at
|
|
before update on public.billing_webhook_events
|
|
for each row
|
|
execute function public.set_updated_at();
|