mirror of
https://github.com/fawney19/Aether.git
synced 2026-09-02 01:10:23 +08:00
Add multi-database data layer
Introduce aether-data-schema and driver-specific schema generation for Postgres, MySQL, and SQLite. Split data backends, lifecycle, repositories, and gateway runtime integration across database drivers. Verified with cargo fmt --all --check, cargo clippy --workspace --all-targets -- -D warnings, and cargo test --workspace.
This commit is contained in:
@@ -0,0 +1,180 @@
|
||||
-- Generated by aether-data-schema from schema/logical/*.toml.
|
||||
-- Do not edit generated files directly; edit logical schema or explicit overrides instead.
|
||||
|
||||
CREATE TABLE IF NOT EXISTS users (
|
||||
`id` VARCHAR(64) NOT NULL,
|
||||
`external_id` VARCHAR(255),
|
||||
`email` VARCHAR(320),
|
||||
`username` VARCHAR(255),
|
||||
`password_hash` VARCHAR(255),
|
||||
`role` VARCHAR(64),
|
||||
`auth_source` VARCHAR(64) NOT NULL DEFAULT 'local',
|
||||
`email_verified` TINYINT(1) NOT NULL DEFAULT 0,
|
||||
`is_active` TINYINT(1) NOT NULL DEFAULT 1,
|
||||
`is_deleted` TINYINT(1) NOT NULL DEFAULT 0,
|
||||
`allowed_models` JSON,
|
||||
`allowed_providers` JSON,
|
||||
`allowed_api_formats` JSON,
|
||||
`model_capability_settings` JSON,
|
||||
`rate_limit` INT,
|
||||
`metadata` JSON,
|
||||
`created_at` BIGINT NOT NULL,
|
||||
`updated_at` BIGINT NOT NULL,
|
||||
`last_login_at` BIGINT,
|
||||
`ldap_dn` VARCHAR(1024),
|
||||
`ldap_username` VARCHAR(255),
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY users_email_key (`email`),
|
||||
UNIQUE KEY users_username_key (`username`)
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS api_keys (
|
||||
`id` VARCHAR(64) NOT NULL,
|
||||
`user_id` VARCHAR(64) NOT NULL,
|
||||
`key_hash` VARCHAR(255) NOT NULL,
|
||||
`key_encrypted` LONGTEXT,
|
||||
`name` VARCHAR(255),
|
||||
`key_prefix` VARCHAR(64),
|
||||
`status` VARCHAR(64) NOT NULL DEFAULT 'active',
|
||||
`allowed_models` JSON,
|
||||
`allowed_providers` JSON,
|
||||
`allowed_api_formats` JSON,
|
||||
`rate_limit` INT DEFAULT 100,
|
||||
`concurrent_limit` INT,
|
||||
`force_capabilities` JSON,
|
||||
`is_active` TINYINT(1) NOT NULL DEFAULT 1,
|
||||
`is_locked` TINYINT(1) NOT NULL DEFAULT 0,
|
||||
`is_standalone` TINYINT(1) NOT NULL DEFAULT 0,
|
||||
`auto_delete_on_expiry` TINYINT(1) NOT NULL DEFAULT 0,
|
||||
`total_requests` BIGINT NOT NULL DEFAULT 0,
|
||||
`total_tokens` BIGINT NOT NULL DEFAULT 0,
|
||||
`total_cost_usd` DOUBLE NOT NULL DEFAULT 0,
|
||||
`metadata` JSON,
|
||||
`expires_at` BIGINT,
|
||||
`last_used_at` BIGINT,
|
||||
`created_at` BIGINT NOT NULL,
|
||||
`updated_at` BIGINT NOT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY api_keys_key_hash_key (`key_hash`),
|
||||
KEY api_keys_user_id_idx (`user_id`)
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS audit_logs (
|
||||
`id` VARCHAR(64) NOT NULL,
|
||||
`event_type` VARCHAR(64) NOT NULL,
|
||||
`user_id` VARCHAR(64),
|
||||
`api_key_id` VARCHAR(64),
|
||||
`description` LONGTEXT NOT NULL,
|
||||
`ip_address` VARCHAR(64),
|
||||
`user_agent` VARCHAR(512),
|
||||
`request_id` VARCHAR(128),
|
||||
`event_metadata` JSON,
|
||||
`status_code` INT,
|
||||
`error_message` LONGTEXT,
|
||||
`created_at` BIGINT NOT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
KEY audit_logs_created_at_idx (`created_at`),
|
||||
KEY audit_logs_event_type_idx (`event_type`),
|
||||
KEY audit_logs_request_id_idx (`request_id`),
|
||||
KEY audit_logs_user_id_idx (`user_id`)
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS announcements (
|
||||
`id` VARCHAR(64) NOT NULL,
|
||||
`title` VARCHAR(200) NOT NULL,
|
||||
`content` LONGTEXT NOT NULL,
|
||||
`type` VARCHAR(32) NOT NULL DEFAULT 'info',
|
||||
`priority` INT NOT NULL DEFAULT 0,
|
||||
`author_id` VARCHAR(64),
|
||||
`is_active` TINYINT(1) NOT NULL DEFAULT 1,
|
||||
`is_pinned` TINYINT(1) NOT NULL DEFAULT 0,
|
||||
`start_time` BIGINT,
|
||||
`end_time` BIGINT,
|
||||
`created_at` BIGINT NOT NULL,
|
||||
`updated_at` BIGINT NOT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
KEY announcements_author_id_idx (`author_id`),
|
||||
KEY announcements_created_at_idx (`created_at`),
|
||||
KEY announcements_is_active_idx (`is_active`)
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS announcement_reads (
|
||||
`id` VARCHAR(64) NOT NULL,
|
||||
`user_id` VARCHAR(64) NOT NULL,
|
||||
`announcement_id` VARCHAR(64) NOT NULL,
|
||||
`read_at` BIGINT NOT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY uq_user_announcement (`user_id`, `announcement_id`),
|
||||
KEY announcement_reads_announcement_id_idx (`announcement_id`),
|
||||
KEY announcement_reads_user_id_idx (`user_id`)
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS management_tokens (
|
||||
`id` VARCHAR(64) NOT NULL,
|
||||
`user_id` VARCHAR(64) NOT NULL,
|
||||
`name` VARCHAR(255) NOT NULL,
|
||||
`description` LONGTEXT,
|
||||
`token_hash` VARCHAR(255) NOT NULL,
|
||||
`token_prefix` VARCHAR(64),
|
||||
`allowed_ips` JSON,
|
||||
`expires_at` BIGINT,
|
||||
`last_used_at` BIGINT,
|
||||
`last_used_ip` VARCHAR(255),
|
||||
`usage_count` BIGINT NOT NULL DEFAULT 0,
|
||||
`is_active` TINYINT(1) NOT NULL DEFAULT 1,
|
||||
`created_at` BIGINT NOT NULL,
|
||||
`updated_at` BIGINT NOT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY management_tokens_token_hash_key (`token_hash`),
|
||||
UNIQUE KEY uq_management_tokens_user_name (`user_id`, `name`),
|
||||
KEY management_tokens_user_id_idx (`user_id`)
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS user_preferences (
|
||||
`id` VARCHAR(64) NOT NULL,
|
||||
`user_id` VARCHAR(64) NOT NULL,
|
||||
`avatar_url` VARCHAR(500),
|
||||
`bio` LONGTEXT,
|
||||
`default_provider_id` VARCHAR(64),
|
||||
`theme` VARCHAR(20) NOT NULL DEFAULT 'light',
|
||||
`language` VARCHAR(10) NOT NULL DEFAULT 'zh-CN',
|
||||
`timezone` VARCHAR(50) NOT NULL DEFAULT 'Asia/Shanghai',
|
||||
`email_notifications` TINYINT(1) NOT NULL DEFAULT 1,
|
||||
`usage_alerts` TINYINT(1) NOT NULL DEFAULT 1,
|
||||
`announcement_notifications` TINYINT(1) NOT NULL DEFAULT 1,
|
||||
`created_at` BIGINT NOT NULL,
|
||||
`updated_at` BIGINT NOT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY user_preferences_user_id_key (`user_id`),
|
||||
KEY user_preferences_default_provider_id_idx (`default_provider_id`),
|
||||
KEY user_preferences_user_id_idx (`user_id`)
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS user_sessions (
|
||||
`id` VARCHAR(64) NOT NULL,
|
||||
`user_id` VARCHAR(64) NOT NULL,
|
||||
`client_device_id` VARCHAR(128) NOT NULL,
|
||||
`device_label` VARCHAR(120),
|
||||
`device_type` VARCHAR(20) NOT NULL DEFAULT 'unknown',
|
||||
`browser_name` VARCHAR(50),
|
||||
`browser_version` VARCHAR(50),
|
||||
`os_name` VARCHAR(50),
|
||||
`os_version` VARCHAR(50),
|
||||
`device_model` VARCHAR(100),
|
||||
`ip_address` VARCHAR(45),
|
||||
`user_agent` VARCHAR(1000),
|
||||
`client_hints` JSON,
|
||||
`refresh_token_hash` VARCHAR(64) NOT NULL,
|
||||
`prev_refresh_token_hash` VARCHAR(64),
|
||||
`rotated_at` BIGINT,
|
||||
`last_seen_at` BIGINT NOT NULL,
|
||||
`expires_at` BIGINT NOT NULL,
|
||||
`revoked_at` BIGINT,
|
||||
`revoke_reason` VARCHAR(100),
|
||||
`created_at` BIGINT NOT NULL,
|
||||
`updated_at` BIGINT NOT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
KEY user_sessions_user_active_idx (`user_id`, `revoked_at`, `expires_at`),
|
||||
KEY user_sessions_user_device_idx (`user_id`, `client_device_id`)
|
||||
);
|
||||
|
||||
@@ -0,0 +1,354 @@
|
||||
-- Generated by aether-data-schema from schema/logical/*.toml.
|
||||
-- Do not edit generated files directly; edit logical schema or explicit overrides instead.
|
||||
|
||||
CREATE TABLE IF NOT EXISTS billing_rules (
|
||||
`id` VARCHAR(64) NOT NULL,
|
||||
`global_model_id` VARCHAR(64),
|
||||
`model_id` VARCHAR(64),
|
||||
`name` VARCHAR(255) NOT NULL,
|
||||
`task_type` VARCHAR(64) NOT NULL DEFAULT 'chat',
|
||||
`expression` LONGTEXT NOT NULL,
|
||||
`variables` JSON NOT NULL,
|
||||
`dimension_mappings` JSON NOT NULL,
|
||||
`is_enabled` TINYINT(1) NOT NULL DEFAULT 1,
|
||||
`created_at` BIGINT NOT NULL,
|
||||
`updated_at` BIGINT NOT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
KEY billing_rules_global_model_task_idx (`global_model_id`, `task_type`, `is_enabled`),
|
||||
KEY billing_rules_model_task_idx (`model_id`, `task_type`, `is_enabled`)
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS dimension_collectors (
|
||||
`id` VARCHAR(64) NOT NULL,
|
||||
`api_format` VARCHAR(64) NOT NULL,
|
||||
`task_type` VARCHAR(64) NOT NULL,
|
||||
`dimension_name` VARCHAR(128) NOT NULL,
|
||||
`source_type` VARCHAR(64) NOT NULL,
|
||||
`source_path` VARCHAR(255),
|
||||
`value_type` VARCHAR(64) NOT NULL DEFAULT 'float',
|
||||
`transform_expression` LONGTEXT,
|
||||
`default_value` VARCHAR(255),
|
||||
`priority` INT NOT NULL DEFAULT 0,
|
||||
`is_enabled` TINYINT(1) NOT NULL DEFAULT 1,
|
||||
`created_at` BIGINT NOT NULL,
|
||||
`updated_at` BIGINT NOT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
KEY dimension_collectors_enabled_idx (`api_format`, `task_type`, `dimension_name`, `priority`, `is_enabled`)
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS providers (
|
||||
`id` VARCHAR(64) NOT NULL,
|
||||
`name` VARCHAR(255) NOT NULL,
|
||||
`description` LONGTEXT,
|
||||
`website` VARCHAR(500),
|
||||
`provider_type` VARCHAR(64) NOT NULL,
|
||||
`billing_type` VARCHAR(64),
|
||||
`monthly_quota_usd` DOUBLE,
|
||||
`monthly_used_usd` DOUBLE,
|
||||
`quota_reset_day` INT,
|
||||
`quota_last_reset_at` BIGINT,
|
||||
`quota_expires_at` BIGINT,
|
||||
`enabled` TINYINT(1) NOT NULL DEFAULT 1,
|
||||
`is_active` TINYINT(1) NOT NULL DEFAULT 1,
|
||||
`priority` BIGINT NOT NULL DEFAULT 0,
|
||||
`provider_priority` INT NOT NULL DEFAULT 100,
|
||||
`keep_priority_on_conversion` TINYINT(1) NOT NULL DEFAULT 0,
|
||||
`enable_format_conversion` TINYINT(1) NOT NULL DEFAULT 1,
|
||||
`concurrent_limit` INT,
|
||||
`max_retries` INT,
|
||||
`proxy` JSON,
|
||||
`request_timeout` DOUBLE,
|
||||
`stream_first_byte_timeout` DOUBLE,
|
||||
`config` JSON,
|
||||
`created_at` BIGINT NOT NULL,
|
||||
`updated_at` BIGINT NOT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY providers_name_key (`name`)
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS provider_api_keys (
|
||||
`id` VARCHAR(64) NOT NULL,
|
||||
`provider_id` VARCHAR(64) NOT NULL,
|
||||
`name` VARCHAR(255) NOT NULL,
|
||||
`api_key` LONGTEXT,
|
||||
`encrypted_key` LONGTEXT,
|
||||
`auth_type` VARCHAR(32) NOT NULL DEFAULT 'api_key',
|
||||
`auth_config` JSON,
|
||||
`note` LONGTEXT,
|
||||
`internal_priority` INT NOT NULL DEFAULT 50,
|
||||
`capabilities` JSON,
|
||||
`api_formats` JSON,
|
||||
`auth_type_by_format` JSON,
|
||||
`allow_auth_channel_mismatch_formats` JSON,
|
||||
`rate_multipliers` JSON,
|
||||
`global_priority_by_format` JSON,
|
||||
`allowed_models` JSON,
|
||||
`expires_at` BIGINT,
|
||||
`cache_ttl_minutes` INT NOT NULL DEFAULT 5,
|
||||
`max_probe_interval_minutes` INT NOT NULL DEFAULT 32,
|
||||
`proxy` JSON,
|
||||
`fingerprint` JSON,
|
||||
`concurrent_limit` INT,
|
||||
`learned_rpm_limit` INT,
|
||||
`concurrent_429_count` INT NOT NULL DEFAULT 0,
|
||||
`rpm_429_count` INT NOT NULL DEFAULT 0,
|
||||
`last_429_at` BIGINT,
|
||||
`last_429_type` VARCHAR(64),
|
||||
`adjustment_history` JSON,
|
||||
`utilization_samples` JSON,
|
||||
`last_probe_increase_at` BIGINT,
|
||||
`last_rpm_peak` INT,
|
||||
`request_count` BIGINT NOT NULL DEFAULT 0,
|
||||
`total_tokens` BIGINT NOT NULL DEFAULT 0,
|
||||
`total_cost_usd` DOUBLE NOT NULL DEFAULT 0,
|
||||
`success_count` BIGINT NOT NULL DEFAULT 0,
|
||||
`error_count` BIGINT NOT NULL DEFAULT 0,
|
||||
`total_response_time_ms` BIGINT NOT NULL DEFAULT 0,
|
||||
`last_used_at` BIGINT,
|
||||
`last_error_at` BIGINT,
|
||||
`last_error_msg` LONGTEXT,
|
||||
`auto_fetch_models` TINYINT(1) NOT NULL DEFAULT 0,
|
||||
`last_models_fetch_at` BIGINT,
|
||||
`last_models_fetch_error` LONGTEXT,
|
||||
`locked_models` JSON,
|
||||
`model_include_patterns` JSON,
|
||||
`model_exclude_patterns` JSON,
|
||||
`upstream_metadata` JSON,
|
||||
`oauth_invalid_at` BIGINT,
|
||||
`oauth_invalid_reason` VARCHAR(255),
|
||||
`status_snapshot` JSON,
|
||||
`health_by_format` JSON,
|
||||
`circuit_breaker_by_format` JSON,
|
||||
`status` VARCHAR(64) NOT NULL DEFAULT 'active',
|
||||
`is_active` TINYINT(1) NOT NULL DEFAULT 1,
|
||||
`weight` BIGINT NOT NULL DEFAULT 1,
|
||||
`rpm_limit` BIGINT,
|
||||
`metadata` JSON,
|
||||
`created_at` BIGINT NOT NULL,
|
||||
`updated_at` BIGINT NOT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
KEY provider_api_keys_provider_id_idx (`provider_id`)
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS api_key_provider_mappings (
|
||||
`id` VARCHAR(64) NOT NULL,
|
||||
`api_key_id` VARCHAR(64) NOT NULL,
|
||||
`provider_id` VARCHAR(64) NOT NULL,
|
||||
`priority_adjustment` INT NOT NULL DEFAULT 0,
|
||||
`weight_multiplier` DOUBLE NOT NULL DEFAULT 1,
|
||||
`is_enabled` TINYINT(1) NOT NULL DEFAULT 1,
|
||||
`created_at` BIGINT NOT NULL,
|
||||
`updated_at` BIGINT NOT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY uq_apikey_provider (`api_key_id`, `provider_id`),
|
||||
KEY api_key_provider_mappings_api_key_id_idx (`api_key_id`),
|
||||
KEY api_key_provider_mappings_provider_id_idx (`provider_id`),
|
||||
KEY idx_apikey_provider_enabled (`api_key_id`, `is_enabled`)
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS gemini_file_mappings (
|
||||
`id` VARCHAR(64) NOT NULL,
|
||||
`file_name` VARCHAR(512) NOT NULL,
|
||||
`key_id` VARCHAR(64) NOT NULL,
|
||||
`user_id` VARCHAR(64),
|
||||
`display_name` VARCHAR(512),
|
||||
`mime_type` VARCHAR(255),
|
||||
`source_hash` VARCHAR(128),
|
||||
`created_at` BIGINT NOT NULL,
|
||||
`expires_at` BIGINT NOT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY gemini_file_mappings_file_name_key (`file_name`),
|
||||
KEY gemini_file_mappings_key_id_idx (`key_id`),
|
||||
KEY gemini_file_mappings_user_id_idx (`user_id`),
|
||||
KEY gemini_file_mappings_expires_at_idx (`expires_at`),
|
||||
KEY gemini_file_mappings_source_hash_idx (`source_hash`)
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS request_candidates (
|
||||
`id` VARCHAR(64) NOT NULL,
|
||||
`request_id` VARCHAR(128) NOT NULL,
|
||||
`user_id` VARCHAR(64),
|
||||
`api_key_id` VARCHAR(64),
|
||||
`username` VARCHAR(255),
|
||||
`api_key_name` VARCHAR(255),
|
||||
`candidate_index` INT NOT NULL,
|
||||
`retry_index` INT NOT NULL DEFAULT 0,
|
||||
`provider_id` VARCHAR(64),
|
||||
`endpoint_id` VARCHAR(64),
|
||||
`key_id` VARCHAR(64),
|
||||
`status` VARCHAR(32) NOT NULL,
|
||||
`skip_reason` LONGTEXT,
|
||||
`is_cached` TINYINT(1) NOT NULL DEFAULT 0,
|
||||
`status_code` INT,
|
||||
`error_type` VARCHAR(128),
|
||||
`error_message` LONGTEXT,
|
||||
`latency_ms` INT,
|
||||
`concurrent_requests` INT,
|
||||
`extra_data` JSON,
|
||||
`required_capabilities` JSON,
|
||||
`created_at` BIGINT NOT NULL,
|
||||
`started_at` BIGINT,
|
||||
`finished_at` BIGINT,
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY uq_request_candidate_with_retry (`request_id`, `candidate_index`, `retry_index`),
|
||||
KEY request_candidates_request_id_idx (`request_id`),
|
||||
KEY request_candidates_provider_id_idx (`provider_id`),
|
||||
KEY request_candidates_endpoint_id_idx (`endpoint_id`),
|
||||
KEY request_candidates_status_idx (`status`),
|
||||
KEY request_candidates_created_at_idx (`created_at`),
|
||||
KEY request_candidates_endpoint_status_created_idx (`endpoint_id`, `status`, `created_at`)
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS video_tasks (
|
||||
`id` VARCHAR(64) NOT NULL,
|
||||
`short_id` VARCHAR(32),
|
||||
`request_id` VARCHAR(128) NOT NULL,
|
||||
`user_id` VARCHAR(64),
|
||||
`api_key_id` VARCHAR(64),
|
||||
`username` VARCHAR(255),
|
||||
`api_key_name` VARCHAR(255),
|
||||
`external_task_id` VARCHAR(255),
|
||||
`provider_id` VARCHAR(64),
|
||||
`endpoint_id` VARCHAR(64),
|
||||
`key_id` VARCHAR(64),
|
||||
`client_api_format` VARCHAR(128),
|
||||
`provider_api_format` VARCHAR(128),
|
||||
`format_converted` TINYINT(1) NOT NULL DEFAULT 0,
|
||||
`model` VARCHAR(255),
|
||||
`prompt` LONGTEXT,
|
||||
`original_request_body` JSON,
|
||||
`converted_request_body` JSON,
|
||||
`duration_seconds` INT,
|
||||
`resolution` VARCHAR(64),
|
||||
`aspect_ratio` VARCHAR(32),
|
||||
`size` VARCHAR(64),
|
||||
`status` VARCHAR(32) NOT NULL DEFAULT 'pending',
|
||||
`progress_percent` INT NOT NULL DEFAULT 0,
|
||||
`progress_message` LONGTEXT,
|
||||
`retry_count` INT NOT NULL DEFAULT 0,
|
||||
`max_retries` INT NOT NULL DEFAULT 3,
|
||||
`poll_interval_seconds` INT NOT NULL DEFAULT 10,
|
||||
`next_poll_at` BIGINT,
|
||||
`poll_count` INT NOT NULL DEFAULT 0,
|
||||
`max_poll_count` INT NOT NULL DEFAULT 360,
|
||||
`created_at` BIGINT NOT NULL,
|
||||
`submitted_at` BIGINT,
|
||||
`completed_at` BIGINT,
|
||||
`updated_at` BIGINT NOT NULL,
|
||||
`error_code` VARCHAR(128),
|
||||
`error_message` LONGTEXT,
|
||||
`video_url` LONGTEXT,
|
||||
`video_urls` JSON,
|
||||
`thumbnail_url` LONGTEXT,
|
||||
`video_size_bytes` BIGINT,
|
||||
`video_expires_at` BIGINT,
|
||||
`stored_video_path` VARCHAR(500),
|
||||
`storage_provider` VARCHAR(50),
|
||||
`remixed_from_task_id` VARCHAR(64),
|
||||
`webhook_url` VARCHAR(500),
|
||||
`webhook_sent` TINYINT(1) NOT NULL DEFAULT 0,
|
||||
`webhook_sent_at` BIGINT,
|
||||
`request_metadata` JSON,
|
||||
`video_duration_seconds` DOUBLE,
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY video_tasks_short_id_key (`short_id`),
|
||||
UNIQUE KEY video_tasks_request_id_key (`request_id`),
|
||||
KEY video_tasks_external_id_idx (`external_task_id`),
|
||||
KEY video_tasks_next_poll_idx (`next_poll_at`),
|
||||
KEY video_tasks_user_status_idx (`user_id`, `status`),
|
||||
KEY video_tasks_api_key_id_idx (`api_key_id`),
|
||||
KEY video_tasks_provider_id_idx (`provider_id`),
|
||||
KEY video_tasks_endpoint_id_idx (`endpoint_id`),
|
||||
KEY video_tasks_key_id_idx (`key_id`)
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS provider_endpoints (
|
||||
`id` VARCHAR(64) NOT NULL,
|
||||
`provider_id` VARCHAR(64) NOT NULL,
|
||||
`name` VARCHAR(255) NOT NULL,
|
||||
`base_url` LONGTEXT NOT NULL,
|
||||
`api_format` VARCHAR(128),
|
||||
`api_family` VARCHAR(128),
|
||||
`endpoint_kind` VARCHAR(128),
|
||||
`enabled` TINYINT(1) NOT NULL DEFAULT 1,
|
||||
`is_active` TINYINT(1) NOT NULL DEFAULT 1,
|
||||
`health_score` DOUBLE NOT NULL DEFAULT 1.0,
|
||||
`weight` BIGINT NOT NULL DEFAULT 1,
|
||||
`header_rules` JSON,
|
||||
`body_rules` JSON,
|
||||
`max_retries` INT,
|
||||
`custom_path` LONGTEXT,
|
||||
`metadata` JSON,
|
||||
`config` JSON,
|
||||
`format_acceptance_config` JSON,
|
||||
`proxy` JSON,
|
||||
`created_at` BIGINT NOT NULL,
|
||||
`updated_at` BIGINT NOT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
KEY provider_endpoints_provider_id_idx (`provider_id`)
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS provider_usage_tracking (
|
||||
`id` VARCHAR(64) NOT NULL,
|
||||
`provider_id` VARCHAR(64) NOT NULL,
|
||||
`window_start` BIGINT NOT NULL,
|
||||
`window_end` BIGINT NOT NULL,
|
||||
`total_requests` INT NOT NULL DEFAULT 0,
|
||||
`successful_requests` INT NOT NULL DEFAULT 0,
|
||||
`failed_requests` INT NOT NULL DEFAULT 0,
|
||||
`avg_response_time_ms` DOUBLE NOT NULL DEFAULT 0,
|
||||
`total_response_time_ms` DOUBLE NOT NULL DEFAULT 0,
|
||||
`total_cost_usd` DOUBLE NOT NULL DEFAULT 0,
|
||||
`created_at` BIGINT NOT NULL,
|
||||
`updated_at` BIGINT NOT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
KEY provider_usage_tracking_provider_id_idx (`provider_id`),
|
||||
KEY provider_usage_tracking_window_start_idx (`window_start`),
|
||||
KEY idx_provider_window (`provider_id`, `window_start`),
|
||||
KEY idx_window_time (`window_start`, `window_end`)
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS models (
|
||||
`id` VARCHAR(64) NOT NULL,
|
||||
`provider_id` VARCHAR(64) NOT NULL,
|
||||
`global_model_id` VARCHAR(64),
|
||||
`provider_model_name` VARCHAR(255) NOT NULL,
|
||||
`global_model_name` VARCHAR(255),
|
||||
`api_format` VARCHAR(128),
|
||||
`enabled` TINYINT(1) NOT NULL DEFAULT 1,
|
||||
`is_active` TINYINT(1) NOT NULL DEFAULT 1,
|
||||
`is_available` TINYINT(1) NOT NULL DEFAULT 1,
|
||||
`price_per_request` DOUBLE,
|
||||
`tiered_pricing` JSON,
|
||||
`supports_vision` TINYINT(1),
|
||||
`supports_function_calling` TINYINT(1),
|
||||
`supports_streaming` TINYINT(1),
|
||||
`supports_extended_thinking` TINYINT(1),
|
||||
`supports_image_generation` TINYINT(1),
|
||||
`provider_model_mappings` JSON,
|
||||
`config` JSON,
|
||||
`metadata` JSON,
|
||||
`created_at` BIGINT NOT NULL,
|
||||
`updated_at` BIGINT NOT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
KEY models_provider_id_idx (`provider_id`)
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS global_models (
|
||||
`id` VARCHAR(64) NOT NULL,
|
||||
`name` VARCHAR(255) NOT NULL,
|
||||
`display_name` VARCHAR(255),
|
||||
`enabled` TINYINT(1) NOT NULL DEFAULT 1,
|
||||
`is_active` TINYINT(1) NOT NULL DEFAULT 1,
|
||||
`default_price_per_request` DOUBLE,
|
||||
`default_tiered_pricing` JSON,
|
||||
`supported_capabilities` JSON,
|
||||
`usage_count` BIGINT NOT NULL DEFAULT 0,
|
||||
`config` JSON,
|
||||
`metadata` JSON,
|
||||
`created_at` BIGINT NOT NULL,
|
||||
`updated_at` BIGINT NOT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY global_models_name_key (`name`)
|
||||
);
|
||||
|
||||
@@ -0,0 +1,80 @@
|
||||
-- Generated by aether-data-schema from schema/logical/*.toml.
|
||||
-- Do not edit generated files directly; edit logical schema or explicit overrides instead.
|
||||
|
||||
CREATE TABLE IF NOT EXISTS system_configs (
|
||||
`id` VARCHAR(64) NOT NULL,
|
||||
`key` VARCHAR(255) NOT NULL,
|
||||
`value` LONGTEXT NOT NULL,
|
||||
`description` LONGTEXT,
|
||||
`created_at` BIGINT NOT NULL,
|
||||
`updated_at` BIGINT NOT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY system_configs_key_key (`key`)
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS auth_modules (
|
||||
`id` VARCHAR(64) NOT NULL,
|
||||
`module_type` VARCHAR(128) NOT NULL,
|
||||
`enabled` TINYINT(1) NOT NULL DEFAULT 1,
|
||||
`config` JSON NOT NULL,
|
||||
`created_at` BIGINT NOT NULL,
|
||||
`updated_at` BIGINT NOT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY auth_modules_module_type_key (`module_type`)
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS oauth_providers (
|
||||
`provider_type` VARCHAR(64) NOT NULL,
|
||||
`display_name` VARCHAR(255) NOT NULL,
|
||||
`client_id` LONGTEXT NOT NULL,
|
||||
`client_secret_encrypted` LONGTEXT,
|
||||
`authorization_url_override` VARCHAR(500),
|
||||
`token_url_override` VARCHAR(500),
|
||||
`userinfo_url_override` VARCHAR(500),
|
||||
`scopes` JSON,
|
||||
`redirect_uri` VARCHAR(500) NOT NULL,
|
||||
`frontend_callback_url` VARCHAR(500) NOT NULL,
|
||||
`attribute_mapping` JSON,
|
||||
`extra_config` JSON,
|
||||
`is_enabled` TINYINT(1) NOT NULL DEFAULT 0,
|
||||
`created_at` BIGINT NOT NULL,
|
||||
`updated_at` BIGINT NOT NULL,
|
||||
PRIMARY KEY (`provider_type`)
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS ldap_configs (
|
||||
`id` BIGINT NOT NULL AUTO_INCREMENT,
|
||||
`server_url` VARCHAR(255) NOT NULL,
|
||||
`bind_dn` LONGTEXT NOT NULL,
|
||||
`bind_password_encrypted` LONGTEXT,
|
||||
`base_dn` LONGTEXT NOT NULL,
|
||||
`user_search_filter` LONGTEXT NOT NULL DEFAULT '(uid={username})',
|
||||
`username_attr` VARCHAR(50) NOT NULL DEFAULT 'uid',
|
||||
`email_attr` VARCHAR(50) NOT NULL DEFAULT 'mail',
|
||||
`display_name_attr` VARCHAR(50) NOT NULL DEFAULT 'cn',
|
||||
`is_enabled` TINYINT(1) NOT NULL DEFAULT 0,
|
||||
`is_exclusive` TINYINT(1) NOT NULL DEFAULT 0,
|
||||
`use_starttls` TINYINT(1) NOT NULL DEFAULT 0,
|
||||
`connect_timeout` INT NOT NULL DEFAULT 10,
|
||||
`created_at` BIGINT NOT NULL,
|
||||
`updated_at` BIGINT NOT NULL,
|
||||
PRIMARY KEY (`id`)
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS user_oauth_links (
|
||||
`id` VARCHAR(64) NOT NULL,
|
||||
`user_id` VARCHAR(64) NOT NULL,
|
||||
`provider_type` VARCHAR(64) NOT NULL,
|
||||
`provider_user_id` VARCHAR(255) NOT NULL,
|
||||
`provider_username` VARCHAR(255),
|
||||
`provider_email` VARCHAR(255),
|
||||
`extra_data` JSON,
|
||||
`linked_at` BIGINT NOT NULL,
|
||||
`last_login_at` BIGINT,
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY uq_user_oauth_links_provider_user (`provider_type`, `provider_user_id`),
|
||||
UNIQUE KEY uq_user_oauth_links_user_provider (`user_id`, `provider_type`),
|
||||
KEY user_oauth_links_provider_type_idx (`provider_type`),
|
||||
KEY user_oauth_links_user_id_idx (`user_id`)
|
||||
);
|
||||
|
||||
@@ -0,0 +1,45 @@
|
||||
-- Generated by aether-data-schema from schema/logical/*.toml.
|
||||
-- Do not edit generated files directly; edit logical schema or explicit overrides instead.
|
||||
|
||||
CREATE TABLE IF NOT EXISTS proxy_nodes (
|
||||
`id` VARCHAR(64) NOT NULL,
|
||||
`name` VARCHAR(255) NOT NULL,
|
||||
`ip` VARCHAR(512) NOT NULL,
|
||||
`port` INT NOT NULL,
|
||||
`region` VARCHAR(100),
|
||||
`status` VARCHAR(32) NOT NULL DEFAULT 'online',
|
||||
`registered_by` VARCHAR(64),
|
||||
`last_heartbeat_at` BIGINT,
|
||||
`heartbeat_interval` INT NOT NULL DEFAULT 30,
|
||||
`active_connections` INT NOT NULL DEFAULT 0,
|
||||
`total_requests` BIGINT NOT NULL DEFAULT 0,
|
||||
`avg_latency_ms` DOUBLE,
|
||||
`is_manual` TINYINT(1) NOT NULL DEFAULT 0,
|
||||
`proxy_url` VARCHAR(500),
|
||||
`proxy_username` VARCHAR(255),
|
||||
`proxy_password` VARCHAR(500),
|
||||
`created_at` BIGINT NOT NULL,
|
||||
`updated_at` BIGINT NOT NULL,
|
||||
`remote_config` JSON,
|
||||
`config_version` INT NOT NULL DEFAULT 0,
|
||||
`hardware_info` JSON,
|
||||
`estimated_max_concurrency` INT,
|
||||
`tunnel_mode` TINYINT(1) NOT NULL DEFAULT 0,
|
||||
`tunnel_connected` TINYINT(1) NOT NULL DEFAULT 0,
|
||||
`tunnel_connected_at` BIGINT,
|
||||
`failed_requests` BIGINT NOT NULL DEFAULT 0,
|
||||
`dns_failures` BIGINT NOT NULL DEFAULT 0,
|
||||
`stream_errors` BIGINT NOT NULL DEFAULT 0,
|
||||
`proxy_metadata` JSON,
|
||||
PRIMARY KEY (`id`)
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS proxy_node_events (
|
||||
`id` BIGINT NOT NULL AUTO_INCREMENT,
|
||||
`node_id` VARCHAR(64) NOT NULL,
|
||||
`event_type` VARCHAR(64) NOT NULL,
|
||||
`detail` VARCHAR(500),
|
||||
`created_at` BIGINT NOT NULL,
|
||||
PRIMARY KEY (`id`)
|
||||
);
|
||||
|
||||
@@ -0,0 +1,195 @@
|
||||
-- Generated by aether-data-schema from schema/logical/*.toml.
|
||||
-- Do not edit generated files directly; edit logical schema or explicit overrides instead.
|
||||
|
||||
CREATE TABLE IF NOT EXISTS wallets (
|
||||
`id` VARCHAR(64) NOT NULL,
|
||||
`user_id` VARCHAR(64),
|
||||
`api_key_id` VARCHAR(64),
|
||||
`balance` DOUBLE NOT NULL DEFAULT 0,
|
||||
`gift_balance` DOUBLE NOT NULL DEFAULT 0,
|
||||
`limit_mode` VARCHAR(64) NOT NULL DEFAULT 'finite',
|
||||
`currency` VARCHAR(16) NOT NULL DEFAULT 'USD',
|
||||
`status` VARCHAR(64) NOT NULL DEFAULT 'active',
|
||||
`total_recharged` DOUBLE NOT NULL DEFAULT 0,
|
||||
`total_consumed` DOUBLE NOT NULL DEFAULT 0,
|
||||
`total_refunded` DOUBLE NOT NULL DEFAULT 0,
|
||||
`total_adjusted` DOUBLE NOT NULL DEFAULT 0,
|
||||
`created_at` BIGINT NOT NULL,
|
||||
`updated_at` BIGINT NOT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY wallets_user_id_key (`user_id`),
|
||||
UNIQUE KEY wallets_api_key_id_key (`api_key_id`),
|
||||
KEY wallets_api_key_id_idx (`api_key_id`),
|
||||
KEY wallets_user_id_idx (`user_id`)
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS wallet_transactions (
|
||||
`id` VARCHAR(64) NOT NULL,
|
||||
`wallet_id` VARCHAR(64) NOT NULL,
|
||||
`category` VARCHAR(64) NOT NULL,
|
||||
`reason_code` VARCHAR(64) NOT NULL,
|
||||
`amount` DOUBLE NOT NULL,
|
||||
`balance_before` DOUBLE NOT NULL,
|
||||
`balance_after` DOUBLE NOT NULL,
|
||||
`recharge_balance_before` DOUBLE NOT NULL,
|
||||
`recharge_balance_after` DOUBLE NOT NULL,
|
||||
`gift_balance_before` DOUBLE NOT NULL,
|
||||
`gift_balance_after` DOUBLE NOT NULL,
|
||||
`link_type` VARCHAR(64),
|
||||
`link_id` VARCHAR(128),
|
||||
`operator_id` VARCHAR(64),
|
||||
`description` LONGTEXT,
|
||||
`created_at` BIGINT NOT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
KEY idx_wallet_tx_wallet_created (`wallet_id`, `created_at`),
|
||||
KEY idx_wallet_tx_category_created (`category`, `created_at`),
|
||||
KEY idx_wallet_tx_reason_created (`reason_code`, `created_at`),
|
||||
KEY idx_wallet_tx_link (`link_type`, `link_id`),
|
||||
KEY ix_wallet_transactions_operator_id (`operator_id`)
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS wallet_daily_usage_ledgers (
|
||||
`id` VARCHAR(64) NOT NULL,
|
||||
`wallet_id` VARCHAR(64) NOT NULL,
|
||||
`billing_date` VARCHAR(16) NOT NULL,
|
||||
`billing_timezone` VARCHAR(64) NOT NULL,
|
||||
`total_cost_usd` DOUBLE NOT NULL DEFAULT 0,
|
||||
`total_requests` BIGINT NOT NULL DEFAULT 0,
|
||||
`input_tokens` BIGINT NOT NULL DEFAULT 0,
|
||||
`output_tokens` BIGINT NOT NULL DEFAULT 0,
|
||||
`cache_creation_tokens` BIGINT NOT NULL DEFAULT 0,
|
||||
`cache_read_tokens` BIGINT NOT NULL DEFAULT 0,
|
||||
`first_finalized_at` BIGINT,
|
||||
`last_finalized_at` BIGINT,
|
||||
`aggregated_at` BIGINT NOT NULL,
|
||||
`created_at` BIGINT NOT NULL,
|
||||
`updated_at` BIGINT NOT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
KEY idx_wallet_daily_usage_wallet_date (`wallet_id`, `billing_timezone`, `billing_date`)
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS payment_orders (
|
||||
`id` VARCHAR(64) NOT NULL,
|
||||
`order_no` VARCHAR(128) NOT NULL,
|
||||
`wallet_id` VARCHAR(64) NOT NULL,
|
||||
`user_id` VARCHAR(64),
|
||||
`amount_usd` DOUBLE NOT NULL,
|
||||
`pay_amount` DOUBLE,
|
||||
`pay_currency` VARCHAR(16),
|
||||
`exchange_rate` DOUBLE,
|
||||
`refunded_amount_usd` DOUBLE NOT NULL DEFAULT 0,
|
||||
`refundable_amount_usd` DOUBLE NOT NULL DEFAULT 0,
|
||||
`payment_method` VARCHAR(64) NOT NULL,
|
||||
`gateway_order_id` VARCHAR(128),
|
||||
`gateway_response` JSON,
|
||||
`status` VARCHAR(64) NOT NULL DEFAULT 'pending',
|
||||
`created_at` BIGINT NOT NULL,
|
||||
`paid_at` BIGINT,
|
||||
`credited_at` BIGINT,
|
||||
`expires_at` BIGINT,
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY uq_payment_orders_order_no (`order_no`),
|
||||
KEY idx_payment_orders_wallet_created (`wallet_id`, `created_at`),
|
||||
KEY idx_payment_orders_user_created (`user_id`, `created_at`),
|
||||
KEY idx_payment_orders_status (`status`),
|
||||
KEY idx_payment_orders_gateway_order_id (`gateway_order_id`)
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS payment_callbacks (
|
||||
`id` VARCHAR(64) NOT NULL,
|
||||
`payment_order_id` VARCHAR(64),
|
||||
`payment_method` VARCHAR(64) NOT NULL,
|
||||
`callback_key` VARCHAR(128) NOT NULL,
|
||||
`order_no` VARCHAR(128),
|
||||
`gateway_order_id` VARCHAR(128),
|
||||
`payload_hash` VARCHAR(128),
|
||||
`signature_valid` TINYINT(1) NOT NULL DEFAULT 0,
|
||||
`status` VARCHAR(64) NOT NULL DEFAULT 'received',
|
||||
`payload` JSON,
|
||||
`error_message` LONGTEXT,
|
||||
`created_at` BIGINT NOT NULL,
|
||||
`processed_at` BIGINT,
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY uq_payment_callbacks_callback_key (`callback_key`),
|
||||
KEY idx_payment_callbacks_order (`order_no`),
|
||||
KEY idx_payment_callbacks_gateway_order (`gateway_order_id`),
|
||||
KEY idx_payment_callbacks_created (`created_at`),
|
||||
KEY ix_payment_callbacks_payment_order_id (`payment_order_id`)
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS refund_requests (
|
||||
`id` VARCHAR(64) NOT NULL,
|
||||
`refund_no` VARCHAR(128) NOT NULL,
|
||||
`wallet_id` VARCHAR(64) NOT NULL,
|
||||
`user_id` VARCHAR(64),
|
||||
`payment_order_id` VARCHAR(64),
|
||||
`source_type` VARCHAR(64) NOT NULL,
|
||||
`source_id` VARCHAR(128),
|
||||
`refund_mode` VARCHAR(64) NOT NULL,
|
||||
`amount_usd` DOUBLE NOT NULL,
|
||||
`status` VARCHAR(64) NOT NULL DEFAULT 'pending_approval',
|
||||
`reason` LONGTEXT,
|
||||
`requested_by` VARCHAR(64),
|
||||
`approved_by` VARCHAR(64),
|
||||
`processed_by` VARCHAR(64),
|
||||
`gateway_refund_id` VARCHAR(128),
|
||||
`payout_method` VARCHAR(64),
|
||||
`payout_reference` VARCHAR(255),
|
||||
`payout_proof` JSON,
|
||||
`failure_reason` LONGTEXT,
|
||||
`idempotency_key` VARCHAR(128),
|
||||
`created_at` BIGINT NOT NULL,
|
||||
`updated_at` BIGINT NOT NULL,
|
||||
`processed_at` BIGINT,
|
||||
`completed_at` BIGINT,
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY uq_refund_requests_refund_no (`refund_no`),
|
||||
UNIQUE KEY uq_refund_requests_idempotency_key (`idempotency_key`),
|
||||
KEY idx_refund_wallet_created (`wallet_id`, `created_at`),
|
||||
KEY idx_refund_user_created (`user_id`, `created_at`),
|
||||
KEY idx_refund_status (`status`),
|
||||
KEY ix_refund_requests_payment_order_id (`payment_order_id`),
|
||||
KEY ix_refund_requests_requested_by (`requested_by`),
|
||||
KEY ix_refund_requests_approved_by (`approved_by`),
|
||||
KEY ix_refund_requests_processed_by (`processed_by`)
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS redeem_code_batches (
|
||||
`id` VARCHAR(64) NOT NULL,
|
||||
`name` VARCHAR(255) NOT NULL,
|
||||
`amount_usd` DOUBLE NOT NULL,
|
||||
`currency` VARCHAR(16) NOT NULL DEFAULT 'USD',
|
||||
`balance_bucket` VARCHAR(64) NOT NULL DEFAULT 'gift',
|
||||
`total_count` INT NOT NULL,
|
||||
`status` VARCHAR(64) NOT NULL DEFAULT 'active',
|
||||
`description` LONGTEXT,
|
||||
`created_by` VARCHAR(64),
|
||||
`expires_at` BIGINT,
|
||||
`created_at` BIGINT NOT NULL,
|
||||
`updated_at` BIGINT NOT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
KEY idx_redeem_code_batches_status (`status`, `created_at`)
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS redeem_codes (
|
||||
`id` VARCHAR(64) NOT NULL,
|
||||
`batch_id` VARCHAR(64) NOT NULL,
|
||||
`code_hash` VARCHAR(128) NOT NULL,
|
||||
`code_prefix` VARCHAR(16) NOT NULL,
|
||||
`code_suffix` VARCHAR(16) NOT NULL,
|
||||
`status` VARCHAR(64) NOT NULL DEFAULT 'active',
|
||||
`redeemed_by_user_id` VARCHAR(64),
|
||||
`redeemed_wallet_id` VARCHAR(64),
|
||||
`redeemed_payment_order_id` VARCHAR(64),
|
||||
`redeemed_at` BIGINT,
|
||||
`disabled_by` VARCHAR(64),
|
||||
`created_at` BIGINT NOT NULL,
|
||||
`updated_at` BIGINT NOT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY uq_redeem_codes_code_hash (`code_hash`),
|
||||
KEY idx_redeem_codes_batch_created (`batch_id`, `created_at`),
|
||||
KEY idx_redeem_codes_status (`status`, `updated_at`),
|
||||
KEY idx_redeem_codes_redeemed_user (`redeemed_by_user_id`, `redeemed_at`),
|
||||
KEY idx_redeem_codes_redeemed_order (`redeemed_payment_order_id`)
|
||||
);
|
||||
|
||||
131
crates/aether-data/schema/generated/mysql/baseline/006_usage.sql
Normal file
131
crates/aether-data/schema/generated/mysql/baseline/006_usage.sql
Normal file
@@ -0,0 +1,131 @@
|
||||
-- Generated by aether-data-schema from schema/logical/*.toml.
|
||||
-- Do not edit generated files directly; edit logical schema or explicit overrides instead.
|
||||
|
||||
CREATE TABLE IF NOT EXISTS `usage` (
|
||||
`request_id` VARCHAR(128) NOT NULL,
|
||||
`id` VARCHAR(128),
|
||||
`user_id` VARCHAR(64),
|
||||
`api_key_id` VARCHAR(64),
|
||||
`provider_name` VARCHAR(255) NOT NULL DEFAULT 'unknown',
|
||||
`model` VARCHAR(255) NOT NULL DEFAULT 'unknown',
|
||||
`target_model` VARCHAR(255),
|
||||
`provider_id` VARCHAR(64),
|
||||
`provider_endpoint_id` VARCHAR(64),
|
||||
`provider_api_key_id` VARCHAR(64),
|
||||
`request_type` VARCHAR(64),
|
||||
`api_format` VARCHAR(64),
|
||||
`api_family` VARCHAR(64),
|
||||
`endpoint_kind` VARCHAR(64),
|
||||
`endpoint_api_format` VARCHAR(64),
|
||||
`provider_api_family` VARCHAR(64),
|
||||
`provider_endpoint_kind` VARCHAR(64),
|
||||
`has_format_conversion` TINYINT(1) NOT NULL DEFAULT 0,
|
||||
`is_stream` TINYINT(1) NOT NULL DEFAULT 0,
|
||||
`input_tokens` BIGINT NOT NULL DEFAULT 0,
|
||||
`output_tokens` BIGINT NOT NULL DEFAULT 0,
|
||||
`input_output_total_tokens` BIGINT NOT NULL DEFAULT 0,
|
||||
`total_tokens` BIGINT NOT NULL DEFAULT 0,
|
||||
`cache_creation_input_tokens` BIGINT NOT NULL DEFAULT 0,
|
||||
`cache_creation_input_tokens_5m` BIGINT NOT NULL DEFAULT 0,
|
||||
`cache_creation_input_tokens_1h` BIGINT NOT NULL DEFAULT 0,
|
||||
`cache_creation_ephemeral_5m_input_tokens` BIGINT NOT NULL DEFAULT 0,
|
||||
`cache_creation_ephemeral_1h_input_tokens` BIGINT NOT NULL DEFAULT 0,
|
||||
`cache_read_input_tokens` BIGINT NOT NULL DEFAULT 0,
|
||||
`input_context_tokens` BIGINT NOT NULL DEFAULT 0,
|
||||
`input_cost_usd` DOUBLE NOT NULL DEFAULT 0,
|
||||
`output_cost_usd` DOUBLE NOT NULL DEFAULT 0,
|
||||
`cache_cost_usd` DOUBLE NOT NULL DEFAULT 0,
|
||||
`cache_creation_cost_usd` DOUBLE NOT NULL DEFAULT 0,
|
||||
`cache_creation_cost_usd_5m` DOUBLE NOT NULL DEFAULT 0,
|
||||
`cache_creation_cost_usd_1h` DOUBLE NOT NULL DEFAULT 0,
|
||||
`cache_read_cost_usd` DOUBLE NOT NULL DEFAULT 0,
|
||||
`request_cost_usd` DOUBLE NOT NULL DEFAULT 0,
|
||||
`actual_input_cost_usd` DOUBLE NOT NULL DEFAULT 0,
|
||||
`actual_output_cost_usd` DOUBLE NOT NULL DEFAULT 0,
|
||||
`actual_cache_cost_usd` DOUBLE NOT NULL DEFAULT 0,
|
||||
`actual_cache_creation_cost_usd` DOUBLE NOT NULL DEFAULT 0,
|
||||
`actual_cache_creation_cost_usd_5m` DOUBLE NOT NULL DEFAULT 0,
|
||||
`actual_cache_creation_cost_usd_1h` DOUBLE NOT NULL DEFAULT 0,
|
||||
`actual_cache_read_cost_usd` DOUBLE NOT NULL DEFAULT 0,
|
||||
`actual_request_cost_usd` DOUBLE NOT NULL DEFAULT 0,
|
||||
`rate_multiplier` DOUBLE NOT NULL DEFAULT 1,
|
||||
`input_price_per_1m` DOUBLE,
|
||||
`output_price_per_1m` DOUBLE,
|
||||
`cache_creation_price_per_1m` DOUBLE,
|
||||
`cache_creation_price_per_1m_5m` DOUBLE,
|
||||
`cache_creation_price_per_1m_1h` DOUBLE,
|
||||
`cache_read_price_per_1m` DOUBLE,
|
||||
`price_per_request` DOUBLE,
|
||||
`status_code` INT,
|
||||
`error_message` LONGTEXT,
|
||||
`error_category` VARCHAR(255),
|
||||
`response_time_ms` BIGINT,
|
||||
`first_byte_time_ms` BIGINT,
|
||||
`wallet_id` VARCHAR(64),
|
||||
`status` VARCHAR(64) NOT NULL DEFAULT 'completed',
|
||||
`billing_status` VARCHAR(64) NOT NULL DEFAULT 'pending',
|
||||
`total_cost_usd` DOUBLE NOT NULL DEFAULT 0,
|
||||
`actual_total_cost_usd` DOUBLE NOT NULL DEFAULT 0,
|
||||
`request_headers` JSON,
|
||||
`request_body` JSON,
|
||||
`provider_request_headers` JSON,
|
||||
`provider_request_body` JSON,
|
||||
`response_headers` JSON,
|
||||
`response_body` JSON,
|
||||
`client_response_headers` JSON,
|
||||
`client_response_body` JSON,
|
||||
`request_body_compressed` LONGBLOB,
|
||||
`provider_request_body_compressed` LONGBLOB,
|
||||
`response_body_compressed` LONGBLOB,
|
||||
`client_response_body_compressed` LONGBLOB,
|
||||
`request_metadata` JSON,
|
||||
`created_at` BIGINT,
|
||||
`candidate_id` VARCHAR(128),
|
||||
`candidate_index` BIGINT,
|
||||
`key_name` VARCHAR(255),
|
||||
`username` VARCHAR(255),
|
||||
`api_key_name` VARCHAR(255),
|
||||
`planner_kind` VARCHAR(64),
|
||||
`route_family` VARCHAR(128),
|
||||
`route_kind` VARCHAR(128),
|
||||
`execution_path` VARCHAR(128),
|
||||
`local_execution_runtime_miss_reason` VARCHAR(255),
|
||||
`wallet_balance_before` DOUBLE,
|
||||
`wallet_balance_after` DOUBLE,
|
||||
`wallet_recharge_balance_before` DOUBLE,
|
||||
`wallet_recharge_balance_after` DOUBLE,
|
||||
`wallet_gift_balance_before` DOUBLE,
|
||||
`wallet_gift_balance_after` DOUBLE,
|
||||
`finalized_at` BIGINT,
|
||||
`created_at_unix_ms` BIGINT NOT NULL DEFAULT 0,
|
||||
`updated_at_unix_secs` BIGINT NOT NULL DEFAULT 0,
|
||||
PRIMARY KEY (`request_id`),
|
||||
KEY usage_api_key_id_idx (`api_key_id`),
|
||||
KEY usage_billing_status_idx (`billing_status`),
|
||||
KEY usage_created_at_idx (`created_at_unix_ms`),
|
||||
KEY usage_provider_api_key_id_idx (`provider_api_key_id`),
|
||||
KEY usage_provider_id_idx (`provider_id`),
|
||||
KEY usage_request_id_idx (`request_id`),
|
||||
KEY usage_user_id_idx (`user_id`),
|
||||
KEY usage_wallet_id_idx (`wallet_id`)
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS usage_settlement_snapshots (
|
||||
`request_id` VARCHAR(128) NOT NULL,
|
||||
`billing_status` VARCHAR(64) NOT NULL,
|
||||
`wallet_id` VARCHAR(64),
|
||||
`wallet_balance_before` DOUBLE,
|
||||
`wallet_balance_after` DOUBLE,
|
||||
`wallet_recharge_balance_before` DOUBLE,
|
||||
`wallet_recharge_balance_after` DOUBLE,
|
||||
`wallet_gift_balance_before` DOUBLE,
|
||||
`wallet_gift_balance_after` DOUBLE,
|
||||
`provider_monthly_used_usd` DOUBLE,
|
||||
`finalized_at` BIGINT,
|
||||
`created_at` BIGINT NOT NULL,
|
||||
`updated_at` BIGINT NOT NULL,
|
||||
PRIMARY KEY (`request_id`),
|
||||
KEY usage_settlement_snapshots_billing_status_idx (`billing_status`),
|
||||
KEY usage_settlement_snapshots_wallet_id_idx (`wallet_id`)
|
||||
);
|
||||
|
||||
236
crates/aether-data/schema/generated/mysql/baseline/007_stats.sql
Normal file
236
crates/aether-data/schema/generated/mysql/baseline/007_stats.sql
Normal file
@@ -0,0 +1,236 @@
|
||||
-- Generated by aether-data-schema from schema/logical/*.toml.
|
||||
-- Do not edit generated files directly; edit logical schema or explicit overrides instead.
|
||||
|
||||
CREATE TABLE IF NOT EXISTS stats_hourly (
|
||||
`id` VARCHAR(64) NOT NULL,
|
||||
`hour_utc` BIGINT NOT NULL,
|
||||
`total_requests` BIGINT NOT NULL DEFAULT 0,
|
||||
`success_requests` BIGINT NOT NULL DEFAULT 0,
|
||||
`error_requests` BIGINT NOT NULL DEFAULT 0,
|
||||
`input_tokens` BIGINT NOT NULL DEFAULT 0,
|
||||
`output_tokens` BIGINT NOT NULL DEFAULT 0,
|
||||
`cache_creation_tokens` BIGINT NOT NULL DEFAULT 0,
|
||||
`cache_read_tokens` BIGINT NOT NULL DEFAULT 0,
|
||||
`total_cost` DOUBLE NOT NULL DEFAULT 0,
|
||||
`actual_total_cost` DOUBLE NOT NULL DEFAULT 0,
|
||||
`avg_response_time_ms` DOUBLE NOT NULL DEFAULT 0,
|
||||
`is_complete` TINYINT(1) NOT NULL DEFAULT 0,
|
||||
`aggregated_at` BIGINT,
|
||||
`created_at` BIGINT NOT NULL,
|
||||
`updated_at` BIGINT NOT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY uq_stats_hourly_hour (`hour_utc`)
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS stats_summary (
|
||||
`id` VARCHAR(64) NOT NULL,
|
||||
`cutoff_date` BIGINT NOT NULL,
|
||||
`all_time_requests` BIGINT NOT NULL DEFAULT 0,
|
||||
`all_time_success_requests` BIGINT NOT NULL DEFAULT 0,
|
||||
`all_time_error_requests` BIGINT NOT NULL DEFAULT 0,
|
||||
`all_time_input_tokens` BIGINT NOT NULL DEFAULT 0,
|
||||
`all_time_output_tokens` BIGINT NOT NULL DEFAULT 0,
|
||||
`all_time_cache_creation_tokens` BIGINT NOT NULL DEFAULT 0,
|
||||
`all_time_cache_read_tokens` BIGINT NOT NULL DEFAULT 0,
|
||||
`all_time_cost` DOUBLE NOT NULL DEFAULT 0,
|
||||
`all_time_actual_cost` DOUBLE NOT NULL DEFAULT 0,
|
||||
`total_users` BIGINT NOT NULL DEFAULT 0,
|
||||
`active_users` BIGINT NOT NULL DEFAULT 0,
|
||||
`total_api_keys` BIGINT NOT NULL DEFAULT 0,
|
||||
`active_api_keys` BIGINT NOT NULL DEFAULT 0,
|
||||
`created_at` BIGINT NOT NULL,
|
||||
`updated_at` BIGINT NOT NULL,
|
||||
PRIMARY KEY (`id`)
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS stats_hourly_user (
|
||||
`id` VARCHAR(64) NOT NULL,
|
||||
`hour_utc` BIGINT NOT NULL,
|
||||
`user_id` VARCHAR(64) NOT NULL,
|
||||
`total_requests` BIGINT NOT NULL DEFAULT 0,
|
||||
`success_requests` BIGINT NOT NULL DEFAULT 0,
|
||||
`error_requests` BIGINT NOT NULL DEFAULT 0,
|
||||
`input_tokens` BIGINT NOT NULL DEFAULT 0,
|
||||
`output_tokens` BIGINT NOT NULL DEFAULT 0,
|
||||
`total_cost` DOUBLE NOT NULL DEFAULT 0,
|
||||
`created_at` BIGINT NOT NULL,
|
||||
`updated_at` BIGINT NOT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY uq_stats_hourly_user (`hour_utc`, `user_id`)
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS stats_hourly_user_model (
|
||||
`id` VARCHAR(64) NOT NULL,
|
||||
`hour_utc` BIGINT NOT NULL,
|
||||
`user_id` VARCHAR(64) NOT NULL,
|
||||
`model` VARCHAR(255) NOT NULL,
|
||||
`total_requests` BIGINT NOT NULL DEFAULT 0,
|
||||
`input_tokens` BIGINT NOT NULL DEFAULT 0,
|
||||
`output_tokens` BIGINT NOT NULL DEFAULT 0,
|
||||
`total_cost` DOUBLE NOT NULL DEFAULT 0,
|
||||
`created_at` BIGINT NOT NULL,
|
||||
`updated_at` BIGINT NOT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY uq_stats_hourly_user_model (`hour_utc`, `user_id`, `model`)
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS user_model_usage_counts (
|
||||
`id` VARCHAR(64) NOT NULL,
|
||||
`user_id` VARCHAR(64) NOT NULL,
|
||||
`model` VARCHAR(255) NOT NULL,
|
||||
`usage_count` BIGINT NOT NULL DEFAULT 0,
|
||||
`created_at` BIGINT NOT NULL,
|
||||
`updated_at` BIGINT NOT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY uq_user_model_usage_count (`user_id`, `model`),
|
||||
KEY idx_user_model_usage_user (`user_id`),
|
||||
KEY idx_user_model_usage_model (`model`)
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS stats_hourly_model (
|
||||
`id` VARCHAR(64) NOT NULL,
|
||||
`hour_utc` BIGINT NOT NULL,
|
||||
`model` VARCHAR(255) NOT NULL,
|
||||
`total_requests` BIGINT NOT NULL DEFAULT 0,
|
||||
`input_tokens` BIGINT NOT NULL DEFAULT 0,
|
||||
`output_tokens` BIGINT NOT NULL DEFAULT 0,
|
||||
`total_cost` DOUBLE NOT NULL DEFAULT 0,
|
||||
`avg_response_time_ms` DOUBLE NOT NULL DEFAULT 0,
|
||||
`created_at` BIGINT NOT NULL,
|
||||
`updated_at` BIGINT NOT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY uq_stats_hourly_model (`hour_utc`, `model`)
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS stats_hourly_provider (
|
||||
`id` VARCHAR(64) NOT NULL,
|
||||
`hour_utc` BIGINT NOT NULL,
|
||||
`provider_name` VARCHAR(255) NOT NULL,
|
||||
`total_requests` BIGINT NOT NULL DEFAULT 0,
|
||||
`input_tokens` BIGINT NOT NULL DEFAULT 0,
|
||||
`output_tokens` BIGINT NOT NULL DEFAULT 0,
|
||||
`total_cost` DOUBLE NOT NULL DEFAULT 0,
|
||||
`created_at` BIGINT NOT NULL,
|
||||
`updated_at` BIGINT NOT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY uq_stats_hourly_provider (`hour_utc`, `provider_name`)
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS stats_daily (
|
||||
`id` VARCHAR(64) NOT NULL,
|
||||
`date` BIGINT NOT NULL,
|
||||
`total_requests` BIGINT NOT NULL DEFAULT 0,
|
||||
`success_requests` BIGINT NOT NULL DEFAULT 0,
|
||||
`error_requests` BIGINT NOT NULL DEFAULT 0,
|
||||
`input_tokens` BIGINT NOT NULL DEFAULT 0,
|
||||
`output_tokens` BIGINT NOT NULL DEFAULT 0,
|
||||
`cache_creation_tokens` BIGINT NOT NULL DEFAULT 0,
|
||||
`cache_read_tokens` BIGINT NOT NULL DEFAULT 0,
|
||||
`total_cost` DOUBLE NOT NULL DEFAULT 0,
|
||||
`actual_total_cost` DOUBLE NOT NULL DEFAULT 0,
|
||||
`input_cost` DOUBLE NOT NULL DEFAULT 0,
|
||||
`output_cost` DOUBLE NOT NULL DEFAULT 0,
|
||||
`cache_creation_cost` DOUBLE NOT NULL DEFAULT 0,
|
||||
`cache_read_cost` DOUBLE NOT NULL DEFAULT 0,
|
||||
`avg_response_time_ms` DOUBLE NOT NULL DEFAULT 0,
|
||||
`fallback_count` BIGINT NOT NULL DEFAULT 0,
|
||||
`unique_models` BIGINT NOT NULL DEFAULT 0,
|
||||
`unique_providers` BIGINT NOT NULL DEFAULT 0,
|
||||
`is_complete` TINYINT(1) NOT NULL DEFAULT 0,
|
||||
`aggregated_at` BIGINT,
|
||||
`created_at` BIGINT NOT NULL,
|
||||
`updated_at` BIGINT NOT NULL,
|
||||
`p50_response_time_ms` BIGINT,
|
||||
`p90_response_time_ms` BIGINT,
|
||||
`p99_response_time_ms` BIGINT,
|
||||
`p50_first_byte_time_ms` BIGINT,
|
||||
`p90_first_byte_time_ms` BIGINT,
|
||||
`p99_first_byte_time_ms` BIGINT,
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY uq_stats_daily_date (`date`)
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS stats_daily_model (
|
||||
`id` VARCHAR(64) NOT NULL,
|
||||
`date` BIGINT NOT NULL,
|
||||
`model` VARCHAR(255) NOT NULL,
|
||||
`total_requests` BIGINT NOT NULL DEFAULT 0,
|
||||
`input_tokens` BIGINT NOT NULL DEFAULT 0,
|
||||
`output_tokens` BIGINT NOT NULL DEFAULT 0,
|
||||
`cache_creation_tokens` BIGINT NOT NULL DEFAULT 0,
|
||||
`cache_read_tokens` BIGINT NOT NULL DEFAULT 0,
|
||||
`total_cost` DOUBLE NOT NULL DEFAULT 0,
|
||||
`avg_response_time_ms` DOUBLE NOT NULL DEFAULT 0,
|
||||
`created_at` BIGINT NOT NULL,
|
||||
`updated_at` BIGINT NOT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY uq_stats_daily_model (`date`, `model`)
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS stats_daily_provider (
|
||||
`id` VARCHAR(64) NOT NULL,
|
||||
`date` BIGINT NOT NULL,
|
||||
`provider_name` VARCHAR(255) NOT NULL,
|
||||
`total_requests` BIGINT NOT NULL DEFAULT 0,
|
||||
`input_tokens` BIGINT NOT NULL DEFAULT 0,
|
||||
`output_tokens` BIGINT NOT NULL DEFAULT 0,
|
||||
`cache_creation_tokens` BIGINT NOT NULL DEFAULT 0,
|
||||
`cache_read_tokens` BIGINT NOT NULL DEFAULT 0,
|
||||
`total_cost` DOUBLE NOT NULL DEFAULT 0,
|
||||
`created_at` BIGINT NOT NULL,
|
||||
`updated_at` BIGINT NOT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY uq_stats_daily_provider (`date`, `provider_name`)
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS stats_daily_api_key (
|
||||
`id` VARCHAR(64) NOT NULL,
|
||||
`api_key_id` VARCHAR(64) NOT NULL,
|
||||
`date` BIGINT NOT NULL,
|
||||
`total_requests` BIGINT NOT NULL DEFAULT 0,
|
||||
`success_requests` BIGINT NOT NULL DEFAULT 0,
|
||||
`error_requests` BIGINT NOT NULL DEFAULT 0,
|
||||
`input_tokens` BIGINT NOT NULL DEFAULT 0,
|
||||
`output_tokens` BIGINT NOT NULL DEFAULT 0,
|
||||
`cache_creation_tokens` BIGINT NOT NULL DEFAULT 0,
|
||||
`cache_read_tokens` BIGINT NOT NULL DEFAULT 0,
|
||||
`total_cost` DOUBLE NOT NULL DEFAULT 0,
|
||||
`api_key_name` VARCHAR(255),
|
||||
`created_at` BIGINT NOT NULL,
|
||||
`updated_at` BIGINT NOT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY uq_stats_daily_api_key (`date`, `api_key_id`)
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS stats_daily_error (
|
||||
`id` VARCHAR(64) NOT NULL,
|
||||
`date` BIGINT NOT NULL,
|
||||
`error_category` VARCHAR(255) NOT NULL,
|
||||
`provider_name` VARCHAR(255),
|
||||
`model` VARCHAR(255),
|
||||
`count` BIGINT NOT NULL DEFAULT 0,
|
||||
`created_at` BIGINT NOT NULL,
|
||||
`updated_at` BIGINT NOT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY uq_stats_daily_error (`date`, `error_category`, `provider_name`, `model`)
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS stats_user_daily (
|
||||
`id` VARCHAR(64) NOT NULL,
|
||||
`user_id` VARCHAR(64) NOT NULL,
|
||||
`date` BIGINT NOT NULL,
|
||||
`total_requests` BIGINT NOT NULL DEFAULT 0,
|
||||
`success_requests` BIGINT NOT NULL DEFAULT 0,
|
||||
`error_requests` BIGINT NOT NULL DEFAULT 0,
|
||||
`input_tokens` BIGINT NOT NULL DEFAULT 0,
|
||||
`output_tokens` BIGINT NOT NULL DEFAULT 0,
|
||||
`cache_creation_tokens` BIGINT NOT NULL DEFAULT 0,
|
||||
`cache_read_tokens` BIGINT NOT NULL DEFAULT 0,
|
||||
`total_cost` DOUBLE NOT NULL DEFAULT 0,
|
||||
`username` VARCHAR(255),
|
||||
`created_at` BIGINT NOT NULL,
|
||||
`updated_at` BIGINT NOT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY uq_stats_user_daily (`date`, `user_id`)
|
||||
);
|
||||
|
||||
@@ -0,0 +1,10 @@
|
||||
-- Generated by aether-data-schema from schema/logical/*.toml.
|
||||
-- Do not edit generated files directly; edit logical schema or explicit overrides instead.
|
||||
|
||||
001_identity.sql
|
||||
002_provider_catalog.sql
|
||||
003_auth_config.sql
|
||||
004_proxy_nodes.sql
|
||||
005_wallet_billing.sql
|
||||
006_usage.sql
|
||||
007_stats.sql
|
||||
Reference in New Issue
Block a user