Files
codex-proxy-rs/backend/migrations/0002_client_key_budgets.sql
Codex 1359eaa894 feat: add account egress and client key USD budgets
Import sub2api proxy bindings, enforce durable daily and seven-day budgets alongside existing key concurrency, and integrate matching admin controls and audited reconciliation.
2026-09-10 23:41:35 +08:00

31 lines
1.4 KiB
SQL

alter table client_api_keys
add column daily_limit_usd numeric(20,10) not null default 0 check (daily_limit_usd >= 0),
add column weekly_limit_usd numeric(20,10) not null default 0 check (weekly_limit_usd >= 0);
create table client_key_budget_windows (
client_api_key_id text primary key references client_api_keys(id) on delete cascade,
daily_start timestamptz not null,
daily_end timestamptz not null,
weekly_start timestamptz not null,
weekly_end timestamptz not null,
daily_used_usd numeric(20,10) not null default 0 check (daily_used_usd >= 0),
weekly_used_usd numeric(20,10) not null default 0 check (weekly_used_usd >= 0)
);
-- Deliberately independent of model_requests: observations may be dropped or pruned.
create table client_key_charge_events (
request_id text primary key,
client_api_key_id text not null references client_api_keys(id) on delete cascade,
started_at timestamptz not null default now(),
deadline_at timestamptz not null,
completed_at timestamptz,
amount_usd numeric(20,10) check (amount_usd >= 0),
reconciled_at timestamptz,
reconciliation_reason text,
state text not null default 'pending' check (state in ('pending', 'unknown', 'settled')),
check ((state = 'settled') = (amount_usd is not null))
);
create index client_key_charge_events_unresolved
on client_key_charge_events(client_api_key_id, deadline_at)
where state <> 'settled';