mirror of
https://github.com/fawney19/Aether.git
synced 2026-09-01 17:00:21 +08:00
test: stabilize merged PR checks
This commit is contained in:
@@ -680,16 +680,15 @@ impl OpenAiImageStreamTerminalState {
|
||||
|
||||
fn observe_image_completed(&mut self, event: &Value) {
|
||||
self.observed_finish = true;
|
||||
if self.image_count == 0 {
|
||||
if event
|
||||
if self.image_count == 0
|
||||
&& event
|
||||
.get("b64_json")
|
||||
.or_else(|| event.get("result"))
|
||||
.and_then(Value::as_str)
|
||||
.map(str::trim)
|
||||
.is_some_and(|value| !value.is_empty())
|
||||
{
|
||||
self.image_count = 1;
|
||||
}
|
||||
{
|
||||
self.image_count = 1;
|
||||
}
|
||||
self.usage = event.get("usage").cloned().or_else(|| self.usage.clone());
|
||||
}
|
||||
@@ -798,7 +797,7 @@ fn openai_image_stream_standardized_usage(
|
||||
) -> Option<StandardizedUsage> {
|
||||
let mut standardized_usage = usage
|
||||
.and_then(openai_image_usage_to_standardized_usage)
|
||||
.unwrap_or_else(StandardizedUsage::new);
|
||||
.unwrap_or_default();
|
||||
if image_count > 0 {
|
||||
standardized_usage.request_count = i64::try_from(image_count).unwrap_or(i64::MAX);
|
||||
standardized_usage
|
||||
|
||||
@@ -454,7 +454,7 @@ fn openai_image_standardized_usage(
|
||||
) -> Option<StandardizedUsage> {
|
||||
let mut standardized_usage = usage
|
||||
.and_then(standardized_usage_from_openai_usage)
|
||||
.unwrap_or_else(StandardizedUsage::new);
|
||||
.unwrap_or_default();
|
||||
if image_count > 0 {
|
||||
standardized_usage.request_count = i64::try_from(image_count).unwrap_or(i64::MAX);
|
||||
standardized_usage
|
||||
|
||||
@@ -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,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);
|
||||
@@ -22,6 +22,8 @@ CREATE TABLE IF NOT EXISTS users (
|
||||
`feature_settings` JSON,
|
||||
`rate_limit` INT,
|
||||
`rate_limit_mode` VARCHAR(32) NOT NULL DEFAULT 'system',
|
||||
`privacy_policy_accepted_version` VARCHAR(64),
|
||||
`privacy_policy_accepted_at` BIGINT,
|
||||
`metadata` JSON,
|
||||
`created_at` BIGINT NOT NULL,
|
||||
`updated_at` BIGINT NOT NULL,
|
||||
@@ -123,6 +125,7 @@ CREATE TABLE IF NOT EXISTS announcements (
|
||||
`author_id` VARCHAR(64),
|
||||
`is_active` TINYINT(1) NOT NULL DEFAULT 1,
|
||||
`is_pinned` TINYINT(1) NOT NULL DEFAULT 0,
|
||||
`requires_ack` TINYINT(1) NOT NULL DEFAULT 0,
|
||||
`start_time` BIGINT,
|
||||
`end_time` BIGINT,
|
||||
`created_at` BIGINT NOT NULL,
|
||||
|
||||
@@ -104,6 +104,68 @@ CREATE TABLE IF NOT EXISTS payment_orders (
|
||||
KEY idx_payment_orders_product (`product_id`)
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS user_invite_codes (
|
||||
`user_id` VARCHAR(64) NOT NULL,
|
||||
`invite_code` VARCHAR(64) NOT NULL,
|
||||
`active` TINYINT(1) NOT NULL DEFAULT 1,
|
||||
`created_at` BIGINT NOT NULL,
|
||||
`updated_at` BIGINT NOT NULL,
|
||||
PRIMARY KEY (`user_id`),
|
||||
UNIQUE KEY user_invite_codes_invite_code_key (`invite_code`),
|
||||
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) NOT NULL,
|
||||
`inviter_user_id` VARCHAR(64) NOT NULL,
|
||||
`invitee_user_id` VARCHAR(64) NOT NULL,
|
||||
`invite_code_snapshot` VARCHAR(64) NOT NULL,
|
||||
`source_json` JSON,
|
||||
`first_paid_order_id` VARCHAR(64),
|
||||
`first_paid_at` BIGINT,
|
||||
`created_at` BIGINT NOT NULL,
|
||||
`updated_at` BIGINT NOT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY user_referrals_invitee_user_id_key (`invitee_user_id`),
|
||||
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) NOT NULL,
|
||||
`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,
|
||||
`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` LONGTEXT,
|
||||
`admin_operator_id` VARCHAR(64),
|
||||
`admin_note` LONGTEXT,
|
||||
`created_at` BIGINT NOT NULL,
|
||||
`updated_at` BIGINT NOT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY referral_rewards_idempotency_key_key (`idempotency_key`),
|
||||
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
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS payment_gateway_configs (
|
||||
`provider` VARCHAR(64) NOT NULL,
|
||||
`enabled` TINYINT(1) NOT NULL DEFAULT 0,
|
||||
|
||||
@@ -22,6 +22,8 @@ CREATE TABLE IF NOT EXISTS public.users (
|
||||
feature_settings jsonb,
|
||||
rate_limit integer,
|
||||
rate_limit_mode character varying(32) DEFAULT 'system' NOT NULL,
|
||||
privacy_policy_accepted_version character varying(64),
|
||||
privacy_policy_accepted_at timestamp with time zone,
|
||||
metadata jsonb,
|
||||
created_at bigint NOT NULL,
|
||||
updated_at bigint NOT NULL,
|
||||
@@ -128,6 +130,7 @@ CREATE TABLE IF NOT EXISTS public.announcements (
|
||||
author_id character varying(64),
|
||||
is_active boolean DEFAULT true NOT NULL,
|
||||
is_pinned boolean DEFAULT false NOT NULL,
|
||||
requires_ack boolean DEFAULT false NOT NULL,
|
||||
start_time bigint,
|
||||
end_time bigint,
|
||||
created_at bigint NOT NULL,
|
||||
|
||||
@@ -108,6 +108,71 @@ CREATE INDEX IF NOT EXISTS idx_payment_orders_gateway_order_id ON public.payment
|
||||
CREATE INDEX IF NOT EXISTS idx_payment_orders_kind_status ON public.payment_orders USING btree (order_kind, status);
|
||||
CREATE INDEX IF NOT EXISTS idx_payment_orders_product ON public.payment_orders USING btree (product_id);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS public.user_invite_codes (
|
||||
user_id character varying(64) NOT NULL,
|
||||
invite_code character varying(64) NOT NULL,
|
||||
active boolean DEFAULT true NOT NULL,
|
||||
created_at timestamp with time zone NOT NULL,
|
||||
updated_at timestamp with time zone NOT NULL
|
||||
);
|
||||
|
||||
ALTER TABLE ONLY public.user_invite_codes ADD CONSTRAINT user_invite_codes_pkey PRIMARY KEY (user_id);
|
||||
ALTER TABLE ONLY public.user_invite_codes ADD CONSTRAINT user_invite_codes_invite_code_key UNIQUE (invite_code);
|
||||
ALTER TABLE ONLY public.user_invite_codes ADD CONSTRAINT user_invite_codes_user_id_fkey FOREIGN KEY (user_id) REFERENCES public.users(id) ON DELETE CASCADE;
|
||||
|
||||
CREATE TABLE IF NOT EXISTS public.user_referrals (
|
||||
id character varying(64) NOT NULL,
|
||||
inviter_user_id character varying(64) NOT NULL,
|
||||
invitee_user_id character varying(64) NOT NULL,
|
||||
invite_code_snapshot character varying(64) NOT NULL,
|
||||
source_json jsonb,
|
||||
first_paid_order_id character varying(64),
|
||||
first_paid_at timestamp with time zone,
|
||||
created_at timestamp with time zone NOT NULL,
|
||||
updated_at timestamp with time zone NOT NULL
|
||||
);
|
||||
|
||||
ALTER TABLE ONLY public.user_referrals ADD CONSTRAINT user_referrals_pkey PRIMARY KEY (id);
|
||||
ALTER TABLE ONLY public.user_referrals ADD CONSTRAINT user_referrals_invitee_user_id_key UNIQUE (invitee_user_id);
|
||||
CREATE INDEX IF NOT EXISTS idx_user_referrals_inviter ON public.user_referrals USING btree (inviter_user_id, created_at);
|
||||
CREATE INDEX IF NOT EXISTS idx_user_referrals_created ON public.user_referrals USING btree (created_at);
|
||||
CREATE INDEX IF NOT EXISTS idx_user_referrals_invite_code ON public.user_referrals USING btree (invite_code_snapshot);
|
||||
ALTER TABLE ONLY public.user_referrals ADD CONSTRAINT user_referrals_inviter_user_id_fkey FOREIGN KEY (inviter_user_id) REFERENCES public.users(id) ON DELETE CASCADE;
|
||||
ALTER TABLE ONLY public.user_referrals ADD CONSTRAINT user_referrals_invitee_user_id_fkey FOREIGN KEY (invitee_user_id) REFERENCES public.users(id) ON DELETE CASCADE;
|
||||
ALTER TABLE ONLY public.user_referrals ADD CONSTRAINT user_referrals_first_paid_order_fkey FOREIGN KEY (first_paid_order_id) REFERENCES public.payment_orders(id) ON DELETE SET NULL;
|
||||
|
||||
CREATE TABLE IF NOT EXISTS public.referral_rewards (
|
||||
id character varying(64) NOT NULL,
|
||||
referral_id character varying(64) NOT NULL,
|
||||
inviter_user_id character varying(64) NOT NULL,
|
||||
invitee_user_id character varying(64) NOT NULL,
|
||||
reward_type character varying(32) NOT NULL,
|
||||
trigger_point character varying(64) NOT NULL,
|
||||
source_order_id character varying(64),
|
||||
idempotency_key character varying(128) NOT NULL,
|
||||
amount_usd double precision NOT NULL,
|
||||
status character varying(32) DEFAULT 'pending' NOT NULL,
|
||||
wallet_transaction_id character varying(64),
|
||||
reversed_amount_usd double precision DEFAULT 0 NOT NULL,
|
||||
pending_reversal_amount_usd double precision DEFAULT 0 NOT NULL,
|
||||
failure_reason text,
|
||||
admin_operator_id character varying(64),
|
||||
admin_note text,
|
||||
created_at timestamp with time zone NOT NULL,
|
||||
updated_at timestamp with time zone NOT NULL
|
||||
);
|
||||
|
||||
ALTER TABLE ONLY public.referral_rewards ADD CONSTRAINT referral_rewards_pkey PRIMARY KEY (id);
|
||||
ALTER TABLE ONLY public.referral_rewards ADD CONSTRAINT referral_rewards_idempotency_key_key UNIQUE (idempotency_key);
|
||||
CREATE INDEX IF NOT EXISTS idx_referral_rewards_inviter_status ON public.referral_rewards USING btree (inviter_user_id, status, created_at);
|
||||
CREATE INDEX IF NOT EXISTS idx_referral_rewards_inviter_created ON public.referral_rewards USING btree (inviter_user_id, created_at);
|
||||
CREATE INDEX IF NOT EXISTS idx_referral_rewards_created ON public.referral_rewards USING btree (created_at);
|
||||
CREATE INDEX IF NOT EXISTS idx_referral_rewards_source_order ON public.referral_rewards USING btree (source_order_id);
|
||||
ALTER TABLE ONLY public.referral_rewards ADD CONSTRAINT referral_rewards_referral_id_fkey FOREIGN KEY (referral_id) REFERENCES public.user_referrals(id) ON DELETE CASCADE;
|
||||
ALTER TABLE ONLY public.referral_rewards ADD CONSTRAINT referral_rewards_inviter_user_id_fkey FOREIGN KEY (inviter_user_id) REFERENCES public.users(id) ON DELETE CASCADE;
|
||||
ALTER TABLE ONLY public.referral_rewards ADD CONSTRAINT referral_rewards_invitee_user_id_fkey FOREIGN KEY (invitee_user_id) REFERENCES public.users(id) ON DELETE CASCADE;
|
||||
ALTER TABLE ONLY public.referral_rewards ADD CONSTRAINT referral_rewards_source_order_fkey FOREIGN KEY (source_order_id) REFERENCES public.payment_orders(id) ON DELETE SET NULL;
|
||||
|
||||
CREATE TABLE IF NOT EXISTS public.payment_gateway_configs (
|
||||
provider character varying(64) NOT NULL,
|
||||
enabled boolean DEFAULT false NOT NULL,
|
||||
|
||||
@@ -22,6 +22,8 @@ CREATE TABLE IF NOT EXISTS users (
|
||||
feature_settings TEXT,
|
||||
rate_limit INTEGER,
|
||||
rate_limit_mode TEXT NOT NULL DEFAULT 'system',
|
||||
privacy_policy_accepted_version TEXT,
|
||||
privacy_policy_accepted_at INTEGER,
|
||||
metadata TEXT,
|
||||
created_at INTEGER NOT NULL,
|
||||
updated_at INTEGER NOT NULL,
|
||||
@@ -119,6 +121,7 @@ CREATE TABLE IF NOT EXISTS announcements (
|
||||
author_id TEXT,
|
||||
is_active INTEGER NOT NULL DEFAULT 1,
|
||||
is_pinned INTEGER NOT NULL DEFAULT 0,
|
||||
requires_ack INTEGER NOT NULL DEFAULT 0,
|
||||
start_time INTEGER,
|
||||
end_time INTEGER,
|
||||
created_at INTEGER NOT NULL,
|
||||
|
||||
@@ -100,6 +100,65 @@ CREATE INDEX IF NOT EXISTS idx_payment_orders_gateway_order_id ON payment_orders
|
||||
CREATE INDEX IF NOT EXISTS idx_payment_orders_kind_status ON payment_orders (order_kind, status);
|
||||
CREATE INDEX IF NOT EXISTS idx_payment_orders_product ON payment_orders (product_id);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS user_invite_codes (
|
||||
user_id TEXT PRIMARY KEY NOT NULL,
|
||||
invite_code TEXT NOT NULL,
|
||||
active INTEGER NOT NULL DEFAULT 1,
|
||||
created_at INTEGER NOT NULL,
|
||||
updated_at INTEGER NOT NULL,
|
||||
UNIQUE (invite_code),
|
||||
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 TEXT PRIMARY KEY NOT NULL,
|
||||
inviter_user_id TEXT NOT NULL,
|
||||
invitee_user_id TEXT NOT NULL,
|
||||
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,
|
||||
UNIQUE (invitee_user_id),
|
||||
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 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 NOT NULL,
|
||||
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,
|
||||
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,
|
||||
UNIQUE (idempotency_key),
|
||||
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
|
||||
);
|
||||
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);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS payment_gateway_configs (
|
||||
provider TEXT PRIMARY KEY NOT NULL,
|
||||
enabled INTEGER NOT NULL DEFAULT 0,
|
||||
|
||||
@@ -113,6 +113,17 @@ type = "text"
|
||||
length = 32
|
||||
default = "system"
|
||||
|
||||
[[table.users.columns]]
|
||||
name = "privacy_policy_accepted_version"
|
||||
type = "text"
|
||||
length = 64
|
||||
nullable = true
|
||||
|
||||
[[table.users.columns]]
|
||||
name = "privacy_policy_accepted_at"
|
||||
type = "timestamp"
|
||||
nullable = true
|
||||
|
||||
[[table.users.columns]]
|
||||
name = "metadata"
|
||||
type = "json"
|
||||
@@ -539,6 +550,11 @@ name = "is_pinned"
|
||||
type = "bool"
|
||||
default = false
|
||||
|
||||
[[table.announcements.columns]]
|
||||
name = "requires_ack"
|
||||
type = "bool"
|
||||
default = false
|
||||
|
||||
[[table.announcements.columns]]
|
||||
name = "start_time"
|
||||
type = "unix_seconds"
|
||||
|
||||
@@ -438,6 +438,275 @@ columns = ["order_kind", "status"]
|
||||
name = "idx_payment_orders_product"
|
||||
columns = ["product_id"]
|
||||
|
||||
[table.user_invite_codes]
|
||||
domain = "wallet_billing"
|
||||
order = 42
|
||||
primary_key = ["user_id"]
|
||||
|
||||
[[table.user_invite_codes.columns]]
|
||||
name = "user_id"
|
||||
type = "text_id"
|
||||
length = 64
|
||||
|
||||
[[table.user_invite_codes.columns]]
|
||||
name = "invite_code"
|
||||
type = "text"
|
||||
length = 64
|
||||
|
||||
[[table.user_invite_codes.columns]]
|
||||
name = "active"
|
||||
type = "bool"
|
||||
default = true
|
||||
|
||||
[[table.user_invite_codes.columns]]
|
||||
name = "created_at"
|
||||
type = "timestamp"
|
||||
|
||||
[[table.user_invite_codes.columns]]
|
||||
name = "updated_at"
|
||||
type = "timestamp"
|
||||
|
||||
[[table.user_invite_codes.uniques]]
|
||||
name = "user_invite_codes_invite_code_key"
|
||||
columns = ["invite_code"]
|
||||
|
||||
[[table.user_invite_codes.foreign_keys]]
|
||||
name = "user_invite_codes_user_id_fkey"
|
||||
columns = ["user_id"]
|
||||
references_table = "users"
|
||||
references_columns = ["id"]
|
||||
on_delete = "cascade"
|
||||
|
||||
[table.user_referrals]
|
||||
domain = "wallet_billing"
|
||||
order = 43
|
||||
primary_key = ["id"]
|
||||
|
||||
[[table.user_referrals.columns]]
|
||||
name = "id"
|
||||
type = "text_id"
|
||||
length = 64
|
||||
|
||||
[[table.user_referrals.columns]]
|
||||
name = "inviter_user_id"
|
||||
type = "text_id"
|
||||
length = 64
|
||||
|
||||
[[table.user_referrals.columns]]
|
||||
name = "invitee_user_id"
|
||||
type = "text_id"
|
||||
length = 64
|
||||
|
||||
[[table.user_referrals.columns]]
|
||||
name = "invite_code_snapshot"
|
||||
type = "text"
|
||||
length = 64
|
||||
|
||||
[[table.user_referrals.columns]]
|
||||
name = "source_json"
|
||||
type = "json"
|
||||
nullable = true
|
||||
|
||||
[[table.user_referrals.columns]]
|
||||
name = "first_paid_order_id"
|
||||
type = "text_id"
|
||||
length = 64
|
||||
nullable = true
|
||||
|
||||
[[table.user_referrals.columns]]
|
||||
name = "first_paid_at"
|
||||
type = "timestamp"
|
||||
nullable = true
|
||||
|
||||
[[table.user_referrals.columns]]
|
||||
name = "created_at"
|
||||
type = "timestamp"
|
||||
|
||||
[[table.user_referrals.columns]]
|
||||
name = "updated_at"
|
||||
type = "timestamp"
|
||||
|
||||
[[table.user_referrals.uniques]]
|
||||
name = "user_referrals_invitee_user_id_key"
|
||||
columns = ["invitee_user_id"]
|
||||
|
||||
[[table.user_referrals.indexes]]
|
||||
name = "idx_user_referrals_inviter"
|
||||
columns = ["inviter_user_id", "created_at"]
|
||||
|
||||
[[table.user_referrals.indexes]]
|
||||
name = "idx_user_referrals_created"
|
||||
columns = ["created_at"]
|
||||
|
||||
[[table.user_referrals.indexes]]
|
||||
name = "idx_user_referrals_invite_code"
|
||||
columns = ["invite_code_snapshot"]
|
||||
|
||||
[[table.user_referrals.foreign_keys]]
|
||||
name = "user_referrals_inviter_user_id_fkey"
|
||||
columns = ["inviter_user_id"]
|
||||
references_table = "users"
|
||||
references_columns = ["id"]
|
||||
on_delete = "cascade"
|
||||
|
||||
[[table.user_referrals.foreign_keys]]
|
||||
name = "user_referrals_invitee_user_id_fkey"
|
||||
columns = ["invitee_user_id"]
|
||||
references_table = "users"
|
||||
references_columns = ["id"]
|
||||
on_delete = "cascade"
|
||||
|
||||
[[table.user_referrals.foreign_keys]]
|
||||
name = "user_referrals_first_paid_order_fkey"
|
||||
columns = ["first_paid_order_id"]
|
||||
references_table = "payment_orders"
|
||||
references_columns = ["id"]
|
||||
on_delete = "set_null"
|
||||
|
||||
[table.referral_rewards]
|
||||
domain = "wallet_billing"
|
||||
order = 44
|
||||
primary_key = ["id"]
|
||||
|
||||
[[table.referral_rewards.columns]]
|
||||
name = "id"
|
||||
type = "text_id"
|
||||
length = 64
|
||||
|
||||
[[table.referral_rewards.columns]]
|
||||
name = "referral_id"
|
||||
type = "text_id"
|
||||
length = 64
|
||||
|
||||
[[table.referral_rewards.columns]]
|
||||
name = "inviter_user_id"
|
||||
type = "text_id"
|
||||
length = 64
|
||||
|
||||
[[table.referral_rewards.columns]]
|
||||
name = "invitee_user_id"
|
||||
type = "text_id"
|
||||
length = 64
|
||||
|
||||
[[table.referral_rewards.columns]]
|
||||
name = "reward_type"
|
||||
type = "text"
|
||||
length = 32
|
||||
|
||||
[[table.referral_rewards.columns]]
|
||||
name = "trigger_point"
|
||||
type = "text"
|
||||
length = 64
|
||||
|
||||
[[table.referral_rewards.columns]]
|
||||
name = "source_order_id"
|
||||
type = "text_id"
|
||||
length = 64
|
||||
nullable = true
|
||||
|
||||
[[table.referral_rewards.columns]]
|
||||
name = "idempotency_key"
|
||||
type = "text"
|
||||
length = 128
|
||||
|
||||
[[table.referral_rewards.columns]]
|
||||
name = "amount_usd"
|
||||
type = "float64"
|
||||
|
||||
[[table.referral_rewards.columns]]
|
||||
name = "status"
|
||||
type = "text"
|
||||
length = 32
|
||||
default = "pending"
|
||||
|
||||
[[table.referral_rewards.columns]]
|
||||
name = "wallet_transaction_id"
|
||||
type = "text_id"
|
||||
length = 64
|
||||
nullable = true
|
||||
|
||||
[[table.referral_rewards.columns]]
|
||||
name = "reversed_amount_usd"
|
||||
type = "float64"
|
||||
default = 0
|
||||
|
||||
[[table.referral_rewards.columns]]
|
||||
name = "pending_reversal_amount_usd"
|
||||
type = "float64"
|
||||
default = 0
|
||||
|
||||
[[table.referral_rewards.columns]]
|
||||
name = "failure_reason"
|
||||
type = "long_text"
|
||||
nullable = true
|
||||
|
||||
[[table.referral_rewards.columns]]
|
||||
name = "admin_operator_id"
|
||||
type = "text_id"
|
||||
length = 64
|
||||
nullable = true
|
||||
|
||||
[[table.referral_rewards.columns]]
|
||||
name = "admin_note"
|
||||
type = "long_text"
|
||||
nullable = true
|
||||
|
||||
[[table.referral_rewards.columns]]
|
||||
name = "created_at"
|
||||
type = "timestamp"
|
||||
|
||||
[[table.referral_rewards.columns]]
|
||||
name = "updated_at"
|
||||
type = "timestamp"
|
||||
|
||||
[[table.referral_rewards.uniques]]
|
||||
name = "referral_rewards_idempotency_key_key"
|
||||
columns = ["idempotency_key"]
|
||||
|
||||
[[table.referral_rewards.indexes]]
|
||||
name = "idx_referral_rewards_inviter_status"
|
||||
columns = ["inviter_user_id", "status", "created_at"]
|
||||
|
||||
[[table.referral_rewards.indexes]]
|
||||
name = "idx_referral_rewards_inviter_created"
|
||||
columns = ["inviter_user_id", "created_at"]
|
||||
|
||||
[[table.referral_rewards.indexes]]
|
||||
name = "idx_referral_rewards_created"
|
||||
columns = ["created_at"]
|
||||
|
||||
[[table.referral_rewards.indexes]]
|
||||
name = "idx_referral_rewards_source_order"
|
||||
columns = ["source_order_id"]
|
||||
|
||||
[[table.referral_rewards.foreign_keys]]
|
||||
name = "referral_rewards_referral_id_fkey"
|
||||
columns = ["referral_id"]
|
||||
references_table = "user_referrals"
|
||||
references_columns = ["id"]
|
||||
on_delete = "cascade"
|
||||
|
||||
[[table.referral_rewards.foreign_keys]]
|
||||
name = "referral_rewards_inviter_user_id_fkey"
|
||||
columns = ["inviter_user_id"]
|
||||
references_table = "users"
|
||||
references_columns = ["id"]
|
||||
on_delete = "cascade"
|
||||
|
||||
[[table.referral_rewards.foreign_keys]]
|
||||
name = "referral_rewards_invitee_user_id_fkey"
|
||||
columns = ["invitee_user_id"]
|
||||
references_table = "users"
|
||||
references_columns = ["id"]
|
||||
on_delete = "cascade"
|
||||
|
||||
[[table.referral_rewards.foreign_keys]]
|
||||
name = "referral_rewards_source_order_fkey"
|
||||
columns = ["source_order_id"]
|
||||
references_table = "payment_orders"
|
||||
references_columns = ["id"]
|
||||
on_delete = "set_null"
|
||||
|
||||
[table.payment_gateway_configs]
|
||||
domain = "wallet_billing"
|
||||
order = 45
|
||||
|
||||
@@ -43,6 +43,15 @@ fn settlement_billing_status_for_usage_status(status: &str) -> &'static str {
|
||||
}
|
||||
}
|
||||
|
||||
#[allow(unused_imports)]
|
||||
pub(crate) use aether_data_contracts::repository::settlement::{
|
||||
SettlementRepository, SettlementWriteRepository, StoredUsageSettlement, UsageSettlementInput,
|
||||
};
|
||||
pub use memory::InMemorySettlementRepository;
|
||||
pub use mysql::MysqlSettlementRepository;
|
||||
pub use postgres::SqlxSettlementRepository;
|
||||
pub use sqlite::SqliteSettlementRepository;
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::settlement_billing_status_for_usage_status;
|
||||
@@ -60,12 +69,3 @@ mod tests {
|
||||
assert_eq!(settlement_billing_status_for_usage_status("failed"), "void");
|
||||
}
|
||||
}
|
||||
|
||||
#[allow(unused_imports)]
|
||||
pub(crate) use aether_data_contracts::repository::settlement::{
|
||||
SettlementRepository, SettlementWriteRepository, StoredUsageSettlement, UsageSettlementInput,
|
||||
};
|
||||
pub use memory::InMemorySettlementRepository;
|
||||
pub use mysql::MysqlSettlementRepository;
|
||||
pub use postgres::SqlxSettlementRepository;
|
||||
pub use sqlite::SqliteSettlementRepository;
|
||||
|
||||
@@ -4753,7 +4753,7 @@ mod tests {
|
||||
|
||||
assert_eq!(event.data.input_tokens, Some(3));
|
||||
assert_eq!(event.data.output_tokens, Some(5));
|
||||
assert_eq!(event.data.total_tokens, Some(11));
|
||||
assert_eq!(event.data.total_tokens, Some(8));
|
||||
assert_eq!(event.data.cache_creation_input_tokens, Some(1));
|
||||
assert_eq!(event.data.cache_read_input_tokens, Some(2));
|
||||
assert_eq!(
|
||||
@@ -5291,7 +5291,7 @@ mod tests {
|
||||
|
||||
assert_eq!(
|
||||
extract_token_counts_from_value(&Value::String(sse_body.to_string())),
|
||||
Some((3, 5, 11)),
|
||||
Some((3, 5, 8)),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user