mirror of
https://github.com/fawney19/Aether.git
synced 2026-09-02 09:20:22 +08:00
Merge upstream main into feat/500-api-key-ip-whitelist
This commit is contained in:
@@ -291,7 +291,8 @@ CREATE TABLE IF NOT EXISTS provider_api_keys (
|
||||
metadata TEXT,
|
||||
created_at BIGINT NOT NULL,
|
||||
updated_at BIGINT NOT NULL,
|
||||
KEY provider_api_keys_provider_id_idx (provider_id)
|
||||
KEY provider_api_keys_provider_id_idx (provider_id),
|
||||
KEY idx_provider_api_keys_provider_default_sort (provider_id, internal_priority, name, id)
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS pool_member_scores (
|
||||
|
||||
@@ -0,0 +1,32 @@
|
||||
CREATE TABLE IF NOT EXISTS usage_counter_deltas (
|
||||
`id` VARCHAR(36) NOT NULL,
|
||||
`request_id` VARCHAR(128) NOT NULL,
|
||||
`kind` VARCHAR(64) NOT NULL,
|
||||
`target_id` TEXT NOT NULL,
|
||||
`request_count_delta` BIGINT NOT NULL DEFAULT 0,
|
||||
`total_requests_delta` BIGINT NOT NULL DEFAULT 0,
|
||||
`success_count_delta` BIGINT NOT NULL DEFAULT 0,
|
||||
`error_count_delta` BIGINT NOT NULL DEFAULT 0,
|
||||
`dns_failures_delta` BIGINT NOT NULL DEFAULT 0,
|
||||
`stream_errors_delta` BIGINT NOT NULL DEFAULT 0,
|
||||
`total_tokens_delta` BIGINT NOT NULL DEFAULT 0,
|
||||
`total_cost_usd_delta` DOUBLE NOT NULL DEFAULT 0,
|
||||
`total_response_time_ms_delta` BIGINT NOT NULL DEFAULT 0,
|
||||
`last_used_at_unix_secs` BIGINT,
|
||||
`last_used_ip` TEXT,
|
||||
`candidate_last_used_at_unix_secs` BIGINT,
|
||||
`removed_last_used_at_unix_secs` BIGINT,
|
||||
`usage_created_at_unix_secs` BIGINT,
|
||||
`created_at` BIGINT NOT NULL,
|
||||
`processed_at` BIGINT,
|
||||
PRIMARY KEY (`id`),
|
||||
KEY ix_usage_counter_deltas_unprocessed (`created_at`, `id`),
|
||||
KEY ix_usage_counter_deltas_processed (`processed_at`, `created_at`, `id`),
|
||||
KEY ix_usage_counter_deltas_request_kind (`request_id`, `kind`, `target_id`(191))
|
||||
);
|
||||
|
||||
CREATE INDEX video_tasks_due_poll_idx
|
||||
ON video_tasks (status, next_poll_at, updated_at);
|
||||
|
||||
CREATE INDEX idx_entitlement_usage_entitlement_date
|
||||
ON entitlement_usage_ledgers (user_entitlement_id, usage_date);
|
||||
@@ -0,0 +1,62 @@
|
||||
ALTER TABLE users
|
||||
ADD COLUMN privacy_policy_accepted_version VARCHAR(64),
|
||||
ADD COLUMN privacy_policy_accepted_at BIGINT;
|
||||
|
||||
ALTER TABLE announcements
|
||||
ADD COLUMN requires_ack BOOLEAN NOT NULL DEFAULT FALSE;
|
||||
|
||||
CREATE TABLE IF NOT EXISTS user_invite_codes (
|
||||
user_id VARCHAR(64) PRIMARY KEY,
|
||||
invite_code VARCHAR(64) NOT NULL UNIQUE,
|
||||
active BOOLEAN NOT NULL DEFAULT TRUE,
|
||||
created_at BIGINT NOT NULL,
|
||||
updated_at BIGINT NOT NULL,
|
||||
CONSTRAINT user_invite_codes_user_id_fkey FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS user_referrals (
|
||||
id VARCHAR(64) PRIMARY KEY,
|
||||
inviter_user_id VARCHAR(64) NOT NULL,
|
||||
invitee_user_id VARCHAR(64) NOT NULL UNIQUE,
|
||||
invite_code_snapshot VARCHAR(64) NOT NULL,
|
||||
source_json TEXT,
|
||||
first_paid_order_id VARCHAR(64),
|
||||
first_paid_at BIGINT,
|
||||
created_at BIGINT NOT NULL,
|
||||
updated_at BIGINT NOT NULL,
|
||||
KEY idx_user_referrals_inviter (inviter_user_id, created_at),
|
||||
KEY idx_user_referrals_created (created_at),
|
||||
KEY idx_user_referrals_invite_code (invite_code_snapshot),
|
||||
CONSTRAINT user_referrals_inviter_user_id_fkey FOREIGN KEY (inviter_user_id) REFERENCES users(id) ON DELETE CASCADE,
|
||||
CONSTRAINT user_referrals_invitee_user_id_fkey FOREIGN KEY (invitee_user_id) REFERENCES users(id) ON DELETE CASCADE,
|
||||
CONSTRAINT user_referrals_first_paid_order_fkey FOREIGN KEY (first_paid_order_id) REFERENCES payment_orders(id) ON DELETE SET NULL
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS referral_rewards (
|
||||
id VARCHAR(64) PRIMARY KEY,
|
||||
referral_id VARCHAR(64) NOT NULL,
|
||||
inviter_user_id VARCHAR(64) NOT NULL,
|
||||
invitee_user_id VARCHAR(64) NOT NULL,
|
||||
reward_type VARCHAR(32) NOT NULL,
|
||||
trigger_point VARCHAR(64) NOT NULL,
|
||||
source_order_id VARCHAR(64),
|
||||
idempotency_key VARCHAR(128) NOT NULL UNIQUE,
|
||||
amount_usd DOUBLE NOT NULL,
|
||||
status VARCHAR(32) NOT NULL DEFAULT 'pending',
|
||||
wallet_transaction_id VARCHAR(64),
|
||||
reversed_amount_usd DOUBLE NOT NULL DEFAULT 0,
|
||||
pending_reversal_amount_usd DOUBLE NOT NULL DEFAULT 0,
|
||||
failure_reason TEXT,
|
||||
admin_operator_id VARCHAR(64),
|
||||
admin_note TEXT,
|
||||
created_at BIGINT NOT NULL,
|
||||
updated_at BIGINT NOT NULL,
|
||||
KEY idx_referral_rewards_inviter_status (inviter_user_id, status, created_at),
|
||||
KEY idx_referral_rewards_inviter_created (inviter_user_id, created_at),
|
||||
KEY idx_referral_rewards_created (created_at),
|
||||
KEY idx_referral_rewards_source_order (source_order_id),
|
||||
CONSTRAINT referral_rewards_referral_id_fkey FOREIGN KEY (referral_id) REFERENCES user_referrals(id) ON DELETE CASCADE,
|
||||
CONSTRAINT referral_rewards_inviter_user_id_fkey FOREIGN KEY (inviter_user_id) REFERENCES users(id) ON DELETE CASCADE,
|
||||
CONSTRAINT referral_rewards_invitee_user_id_fkey FOREIGN KEY (invitee_user_id) REFERENCES users(id) ON DELETE CASCADE,
|
||||
CONSTRAINT referral_rewards_source_order_fkey FOREIGN KEY (source_order_id) REFERENCES payment_orders(id) ON DELETE SET NULL
|
||||
);
|
||||
@@ -0,0 +1 @@
|
||||
ALTER TABLE oauth_providers ADD COLUMN icon_url VARCHAR(500);
|
||||
@@ -0,0 +1,15 @@
|
||||
SET @aether_provider_key_default_sort_index_sql := IF(
|
||||
(
|
||||
SELECT COUNT(*)
|
||||
FROM information_schema.statistics
|
||||
WHERE table_schema = DATABASE()
|
||||
AND table_name = 'provider_api_keys'
|
||||
AND index_name = 'idx_provider_api_keys_provider_default_sort'
|
||||
) = 0,
|
||||
'CREATE INDEX idx_provider_api_keys_provider_default_sort ON provider_api_keys (provider_id, internal_priority, name, id)',
|
||||
'DO 0'
|
||||
);
|
||||
|
||||
PREPARE aether_provider_key_default_sort_index_stmt FROM @aether_provider_key_default_sort_index_sql;
|
||||
EXECUTE aether_provider_key_default_sort_index_stmt;
|
||||
DEALLOCATE PREPARE aether_provider_key_default_sort_index_stmt;
|
||||
@@ -2704,6 +2704,14 @@ CREATE INDEX IF NOT EXISTS idx_provider_api_keys_provider_active ON public.provi
|
||||
|
||||
|
||||
|
||||
--
|
||||
-- Name: idx_provider_api_keys_provider_default_sort; Type: INDEX; Schema: public; Owner: -
|
||||
--
|
||||
|
||||
CREATE INDEX IF NOT EXISTS idx_provider_api_keys_provider_default_sort ON public.provider_api_keys USING btree (provider_id, internal_priority, name, id);
|
||||
|
||||
|
||||
|
||||
--
|
||||
-- Name: idx_provider_api_keys_provider_created_at_desc; Type: INDEX; Schema: public; Owner: -
|
||||
--
|
||||
|
||||
@@ -1,2 +0,0 @@
|
||||
ALTER TABLE api_keys
|
||||
ADD COLUMN IF NOT EXISTS allowed_ips json NULL;
|
||||
@@ -0,0 +1,67 @@
|
||||
CREATE TABLE IF NOT EXISTS public.usage_counter_deltas (
|
||||
id character varying(36) NOT NULL,
|
||||
request_id character varying(128) NOT NULL,
|
||||
kind character varying(64) NOT NULL,
|
||||
target_id text NOT NULL,
|
||||
request_count_delta bigint DEFAULT 0 NOT NULL,
|
||||
total_requests_delta bigint DEFAULT 0 NOT NULL,
|
||||
success_count_delta bigint DEFAULT 0 NOT NULL,
|
||||
error_count_delta bigint DEFAULT 0 NOT NULL,
|
||||
dns_failures_delta bigint DEFAULT 0 NOT NULL,
|
||||
stream_errors_delta bigint DEFAULT 0 NOT NULL,
|
||||
total_tokens_delta bigint DEFAULT 0 NOT NULL,
|
||||
total_cost_usd_delta double precision DEFAULT 0 NOT NULL,
|
||||
total_response_time_ms_delta bigint DEFAULT 0 NOT NULL,
|
||||
last_used_at_unix_secs bigint,
|
||||
last_used_ip text,
|
||||
candidate_last_used_at_unix_secs bigint,
|
||||
removed_last_used_at_unix_secs bigint,
|
||||
usage_created_at_unix_secs bigint,
|
||||
created_at timestamp with time zone DEFAULT now() NOT NULL,
|
||||
processed_at timestamp with time zone,
|
||||
CONSTRAINT usage_counter_deltas_pkey PRIMARY KEY (id),
|
||||
CONSTRAINT usage_counter_deltas_kind_check CHECK (
|
||||
kind IN (
|
||||
'api_key',
|
||||
'provider_api_key',
|
||||
'model',
|
||||
'provider_monthly',
|
||||
'proxy_node',
|
||||
'management_token',
|
||||
'api_key_last_used'
|
||||
)
|
||||
)
|
||||
);
|
||||
|
||||
CREATE INDEX IF NOT EXISTS ix_usage_counter_deltas_unprocessed
|
||||
ON public.usage_counter_deltas USING btree (created_at, id)
|
||||
WHERE processed_at IS NULL;
|
||||
|
||||
CREATE INDEX IF NOT EXISTS ix_usage_counter_deltas_processed
|
||||
ON public.usage_counter_deltas USING btree (processed_at, created_at, id)
|
||||
WHERE processed_at IS NOT NULL;
|
||||
|
||||
CREATE INDEX IF NOT EXISTS ix_usage_counter_deltas_request_kind
|
||||
ON public.usage_counter_deltas USING btree (request_id, kind, target_id);
|
||||
|
||||
CREATE INDEX IF NOT EXISTS idx_entitlement_usage_entitlement_date
|
||||
ON public.entitlement_usage_ledgers USING btree (user_entitlement_id, usage_date);
|
||||
|
||||
CREATE INDEX IF NOT EXISTS idx_video_tasks_due_poll
|
||||
ON public.video_tasks USING btree (status, next_poll_at, updated_at)
|
||||
WHERE next_poll_at IS NOT NULL;
|
||||
|
||||
ALTER TABLE IF EXISTS public.api_keys
|
||||
ALTER COLUMN total_requests TYPE bigint USING COALESCE(total_requests, 0)::bigint;
|
||||
|
||||
ALTER TABLE IF EXISTS public.global_models
|
||||
ALTER COLUMN usage_count TYPE bigint USING COALESCE(usage_count, 0)::bigint;
|
||||
|
||||
ALTER TABLE IF EXISTS public.management_tokens
|
||||
ALTER COLUMN usage_count TYPE bigint USING COALESCE(usage_count, 0)::bigint;
|
||||
|
||||
ALTER TABLE IF EXISTS public.provider_api_keys
|
||||
ALTER COLUMN request_count TYPE bigint USING COALESCE(request_count, 0)::bigint,
|
||||
ALTER COLUMN success_count TYPE bigint USING COALESCE(success_count, 0)::bigint,
|
||||
ALTER COLUMN error_count TYPE bigint USING COALESCE(error_count, 0)::bigint,
|
||||
ALTER COLUMN total_response_time_ms TYPE bigint USING COALESCE(total_response_time_ms, 0)::bigint;
|
||||
@@ -0,0 +1,5 @@
|
||||
ALTER TABLE api_keys
|
||||
ADD COLUMN IF NOT EXISTS allowed_ips jsonb NULL;
|
||||
|
||||
ALTER TABLE api_keys
|
||||
ALTER COLUMN allowed_ips TYPE jsonb USING allowed_ips::jsonb;
|
||||
@@ -0,0 +1,63 @@
|
||||
ALTER TABLE public.users
|
||||
ADD COLUMN privacy_policy_accepted_version character varying(64),
|
||||
ADD COLUMN privacy_policy_accepted_at timestamp with time zone;
|
||||
|
||||
ALTER TABLE public.announcements
|
||||
ADD COLUMN requires_ack boolean NOT NULL DEFAULT false;
|
||||
|
||||
CREATE TABLE IF NOT EXISTS public.user_invite_codes (
|
||||
user_id character varying(64) PRIMARY KEY REFERENCES public.users(id) ON DELETE CASCADE,
|
||||
invite_code character varying(64) NOT NULL UNIQUE,
|
||||
active boolean NOT NULL DEFAULT true,
|
||||
created_at timestamp with time zone NOT NULL DEFAULT NOW(),
|
||||
updated_at timestamp with time zone NOT NULL DEFAULT NOW()
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS public.user_referrals (
|
||||
id character varying(64) PRIMARY KEY,
|
||||
inviter_user_id character varying(64) NOT NULL REFERENCES public.users(id) ON DELETE CASCADE,
|
||||
invitee_user_id character varying(64) NOT NULL UNIQUE REFERENCES public.users(id) ON DELETE CASCADE,
|
||||
invite_code_snapshot character varying(64) NOT NULL,
|
||||
source_json jsonb,
|
||||
first_paid_order_id character varying(64) REFERENCES public.payment_orders(id) ON DELETE SET NULL,
|
||||
first_paid_at timestamp with time zone,
|
||||
created_at timestamp with time zone NOT NULL DEFAULT NOW(),
|
||||
updated_at timestamp with time zone NOT NULL DEFAULT NOW()
|
||||
);
|
||||
|
||||
CREATE INDEX IF NOT EXISTS idx_user_referrals_inviter
|
||||
ON public.user_referrals USING btree (inviter_user_id, created_at DESC);
|
||||
CREATE INDEX IF NOT EXISTS idx_user_referrals_created
|
||||
ON public.user_referrals USING btree (created_at DESC);
|
||||
CREATE INDEX IF NOT EXISTS idx_user_referrals_invite_code
|
||||
ON public.user_referrals USING btree (invite_code_snapshot);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS public.referral_rewards (
|
||||
id character varying(64) PRIMARY KEY,
|
||||
referral_id character varying(64) NOT NULL REFERENCES public.user_referrals(id) ON DELETE CASCADE,
|
||||
inviter_user_id character varying(64) NOT NULL REFERENCES public.users(id) ON DELETE CASCADE,
|
||||
invitee_user_id character varying(64) NOT NULL REFERENCES public.users(id) ON DELETE CASCADE,
|
||||
reward_type character varying(32) NOT NULL,
|
||||
trigger_point character varying(64) NOT NULL,
|
||||
source_order_id character varying(64) REFERENCES public.payment_orders(id) ON DELETE SET NULL,
|
||||
idempotency_key character varying(128) NOT NULL UNIQUE,
|
||||
amount_usd numeric(20,8) NOT NULL,
|
||||
status character varying(32) NOT NULL DEFAULT 'pending',
|
||||
wallet_transaction_id character varying(64),
|
||||
reversed_amount_usd numeric(20,8) NOT NULL DEFAULT 0,
|
||||
pending_reversal_amount_usd numeric(20,8) NOT NULL DEFAULT 0,
|
||||
failure_reason text,
|
||||
admin_operator_id character varying(64),
|
||||
admin_note text,
|
||||
created_at timestamp with time zone NOT NULL DEFAULT NOW(),
|
||||
updated_at timestamp with time zone NOT NULL DEFAULT NOW()
|
||||
);
|
||||
|
||||
CREATE INDEX IF NOT EXISTS idx_referral_rewards_inviter_status
|
||||
ON public.referral_rewards USING btree (inviter_user_id, status, created_at DESC);
|
||||
CREATE INDEX IF NOT EXISTS idx_referral_rewards_inviter_created
|
||||
ON public.referral_rewards USING btree (inviter_user_id, created_at DESC);
|
||||
CREATE INDEX IF NOT EXISTS idx_referral_rewards_created
|
||||
ON public.referral_rewards USING btree (created_at DESC);
|
||||
CREATE INDEX IF NOT EXISTS idx_referral_rewards_source_order
|
||||
ON public.referral_rewards USING btree (source_order_id);
|
||||
@@ -0,0 +1 @@
|
||||
ALTER TABLE public.oauth_providers ADD COLUMN IF NOT EXISTS icon_url VARCHAR(500);
|
||||
@@ -0,0 +1,2 @@
|
||||
CREATE INDEX IF NOT EXISTS idx_provider_api_keys_provider_default_sort
|
||||
ON public.provider_api_keys USING btree (provider_id, internal_priority, name, id);
|
||||
@@ -300,6 +300,7 @@ CREATE TABLE IF NOT EXISTS provider_api_keys (
|
||||
updated_at INTEGER NOT NULL
|
||||
);
|
||||
CREATE INDEX IF NOT EXISTS provider_api_keys_provider_id_idx ON provider_api_keys (provider_id);
|
||||
CREATE INDEX IF NOT EXISTS idx_provider_api_keys_provider_default_sort ON provider_api_keys (provider_id, internal_priority, name, id);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS pool_member_scores (
|
||||
id TEXT PRIMARY KEY,
|
||||
|
||||
@@ -0,0 +1,34 @@
|
||||
CREATE TABLE IF NOT EXISTS usage_counter_deltas (
|
||||
id TEXT PRIMARY KEY NOT NULL,
|
||||
request_id TEXT NOT NULL,
|
||||
kind TEXT NOT NULL,
|
||||
target_id TEXT NOT NULL,
|
||||
request_count_delta INTEGER NOT NULL DEFAULT 0,
|
||||
total_requests_delta INTEGER NOT NULL DEFAULT 0,
|
||||
success_count_delta INTEGER NOT NULL DEFAULT 0,
|
||||
error_count_delta INTEGER NOT NULL DEFAULT 0,
|
||||
dns_failures_delta INTEGER NOT NULL DEFAULT 0,
|
||||
stream_errors_delta INTEGER NOT NULL DEFAULT 0,
|
||||
total_tokens_delta INTEGER NOT NULL DEFAULT 0,
|
||||
total_cost_usd_delta REAL NOT NULL DEFAULT 0,
|
||||
total_response_time_ms_delta INTEGER NOT NULL DEFAULT 0,
|
||||
last_used_at_unix_secs INTEGER,
|
||||
last_used_ip TEXT,
|
||||
candidate_last_used_at_unix_secs INTEGER,
|
||||
removed_last_used_at_unix_secs INTEGER,
|
||||
usage_created_at_unix_secs INTEGER,
|
||||
created_at INTEGER NOT NULL,
|
||||
processed_at INTEGER
|
||||
);
|
||||
CREATE INDEX IF NOT EXISTS ix_usage_counter_deltas_unprocessed
|
||||
ON usage_counter_deltas (created_at, id);
|
||||
CREATE INDEX IF NOT EXISTS ix_usage_counter_deltas_processed
|
||||
ON usage_counter_deltas (processed_at, created_at, id);
|
||||
CREATE INDEX IF NOT EXISTS ix_usage_counter_deltas_request_kind
|
||||
ON usage_counter_deltas (request_id, kind, target_id);
|
||||
|
||||
CREATE INDEX IF NOT EXISTS video_tasks_due_poll_idx
|
||||
ON video_tasks (status, next_poll_at, updated_at);
|
||||
|
||||
CREATE INDEX IF NOT EXISTS idx_entitlement_usage_entitlement_date
|
||||
ON entitlement_usage_ledgers (user_entitlement_id, usage_date);
|
||||
@@ -0,0 +1,69 @@
|
||||
ALTER TABLE users ADD COLUMN privacy_policy_accepted_version TEXT;
|
||||
ALTER TABLE users ADD COLUMN privacy_policy_accepted_at INTEGER;
|
||||
|
||||
ALTER TABLE announcements ADD COLUMN requires_ack INTEGER NOT NULL DEFAULT 0;
|
||||
|
||||
CREATE TABLE IF NOT EXISTS user_invite_codes (
|
||||
user_id TEXT PRIMARY KEY,
|
||||
invite_code TEXT NOT NULL UNIQUE,
|
||||
active INTEGER NOT NULL DEFAULT 1,
|
||||
created_at INTEGER NOT NULL,
|
||||
updated_at INTEGER NOT NULL,
|
||||
FOREIGN KEY(user_id) REFERENCES users(id) ON DELETE CASCADE
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS user_referrals (
|
||||
id TEXT PRIMARY KEY,
|
||||
inviter_user_id TEXT NOT NULL,
|
||||
invitee_user_id TEXT NOT NULL UNIQUE,
|
||||
invite_code_snapshot TEXT NOT NULL,
|
||||
source_json TEXT,
|
||||
first_paid_order_id TEXT,
|
||||
first_paid_at INTEGER,
|
||||
created_at INTEGER NOT NULL,
|
||||
updated_at INTEGER NOT NULL,
|
||||
FOREIGN KEY(inviter_user_id) REFERENCES users(id) ON DELETE CASCADE,
|
||||
FOREIGN KEY(invitee_user_id) REFERENCES users(id) ON DELETE CASCADE,
|
||||
FOREIGN KEY(first_paid_order_id) REFERENCES payment_orders(id) ON DELETE SET NULL
|
||||
);
|
||||
|
||||
CREATE INDEX IF NOT EXISTS idx_user_referrals_inviter
|
||||
ON user_referrals (inviter_user_id, created_at);
|
||||
CREATE INDEX IF NOT EXISTS idx_user_referrals_created
|
||||
ON user_referrals (created_at);
|
||||
CREATE INDEX IF NOT EXISTS idx_user_referrals_invite_code
|
||||
ON user_referrals (invite_code_snapshot);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS referral_rewards (
|
||||
id TEXT PRIMARY KEY,
|
||||
referral_id TEXT NOT NULL,
|
||||
inviter_user_id TEXT NOT NULL,
|
||||
invitee_user_id TEXT NOT NULL,
|
||||
reward_type TEXT NOT NULL,
|
||||
trigger_point TEXT NOT NULL,
|
||||
source_order_id TEXT,
|
||||
idempotency_key TEXT NOT NULL UNIQUE,
|
||||
amount_usd REAL NOT NULL,
|
||||
status TEXT NOT NULL DEFAULT 'pending',
|
||||
wallet_transaction_id TEXT,
|
||||
reversed_amount_usd REAL NOT NULL DEFAULT 0,
|
||||
pending_reversal_amount_usd REAL NOT NULL DEFAULT 0,
|
||||
failure_reason TEXT,
|
||||
admin_operator_id TEXT,
|
||||
admin_note TEXT,
|
||||
created_at INTEGER NOT NULL,
|
||||
updated_at INTEGER NOT NULL,
|
||||
FOREIGN KEY(referral_id) REFERENCES user_referrals(id) ON DELETE CASCADE,
|
||||
FOREIGN KEY(inviter_user_id) REFERENCES users(id) ON DELETE CASCADE,
|
||||
FOREIGN KEY(invitee_user_id) REFERENCES users(id) ON DELETE CASCADE,
|
||||
FOREIGN KEY(source_order_id) REFERENCES payment_orders(id) ON DELETE SET NULL
|
||||
);
|
||||
|
||||
CREATE INDEX IF NOT EXISTS idx_referral_rewards_inviter_status
|
||||
ON referral_rewards (inviter_user_id, status, created_at);
|
||||
CREATE INDEX IF NOT EXISTS idx_referral_rewards_inviter_created
|
||||
ON referral_rewards (inviter_user_id, created_at);
|
||||
CREATE INDEX IF NOT EXISTS idx_referral_rewards_created
|
||||
ON referral_rewards (created_at);
|
||||
CREATE INDEX IF NOT EXISTS idx_referral_rewards_source_order
|
||||
ON referral_rewards (source_order_id);
|
||||
@@ -0,0 +1 @@
|
||||
ALTER TABLE oauth_providers ADD COLUMN icon_url TEXT;
|
||||
@@ -0,0 +1,2 @@
|
||||
CREATE INDEX IF NOT EXISTS idx_provider_api_keys_provider_default_sort
|
||||
ON provider_api_keys (provider_id, internal_priority, name, id);
|
||||
Reference in New Issue
Block a user