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:
fawney19
2026-05-05 18:27:36 +08:00
parent 099653f732
commit fce7e959e5
372 changed files with 86217 additions and 21160 deletions

View File

@@ -0,0 +1,627 @@
[table.usage]
domain = "usage"
order = 10
primary_key = ["request_id"]
[[table.usage.columns]]
name = "request_id"
type = "text"
length = 128
[[table.usage.columns]]
name = "id"
type = "text"
length = 128
nullable = true
[[table.usage.columns]]
name = "user_id"
type = "text_id"
length = 64
nullable = true
[[table.usage.columns]]
name = "api_key_id"
type = "text_id"
length = 64
nullable = true
[[table.usage.columns]]
name = "provider_name"
type = "text"
length = 255
default = "unknown"
[[table.usage.columns]]
name = "model"
type = "text"
length = 255
default = "unknown"
[[table.usage.columns]]
name = "target_model"
type = "text"
length = 255
nullable = true
[[table.usage.columns]]
name = "provider_id"
type = "text_id"
length = 64
nullable = true
[[table.usage.columns]]
name = "provider_endpoint_id"
type = "text_id"
length = 64
nullable = true
[[table.usage.columns]]
name = "provider_api_key_id"
type = "text_id"
length = 64
nullable = true
[[table.usage.columns]]
name = "request_type"
type = "text"
length = 64
nullable = true
[[table.usage.columns]]
name = "api_format"
type = "text"
length = 64
nullable = true
[[table.usage.columns]]
name = "api_family"
type = "text"
length = 64
nullable = true
[[table.usage.columns]]
name = "endpoint_kind"
type = "text"
length = 64
nullable = true
[[table.usage.columns]]
name = "endpoint_api_format"
type = "text"
length = 64
nullable = true
[[table.usage.columns]]
name = "provider_api_family"
type = "text"
length = 64
nullable = true
[[table.usage.columns]]
name = "provider_endpoint_kind"
type = "text"
length = 64
nullable = true
[[table.usage.columns]]
name = "has_format_conversion"
type = "bool"
default = false
[[table.usage.columns]]
name = "is_stream"
type = "bool"
default = false
[[table.usage.columns]]
name = "input_tokens"
type = "int64"
default = 0
[[table.usage.columns]]
name = "output_tokens"
type = "int64"
default = 0
[[table.usage.columns]]
name = "input_output_total_tokens"
type = "int64"
default = 0
[[table.usage.columns]]
name = "total_tokens"
type = "int64"
default = 0
[[table.usage.columns]]
name = "cache_creation_input_tokens"
type = "int64"
default = 0
[[table.usage.columns]]
name = "cache_creation_input_tokens_5m"
type = "int64"
default = 0
[[table.usage.columns]]
name = "cache_creation_input_tokens_1h"
type = "int64"
default = 0
[[table.usage.columns]]
name = "cache_creation_ephemeral_5m_input_tokens"
type = "int64"
default = 0
[[table.usage.columns]]
name = "cache_creation_ephemeral_1h_input_tokens"
type = "int64"
default = 0
[[table.usage.columns]]
name = "cache_read_input_tokens"
type = "int64"
default = 0
[[table.usage.columns]]
name = "input_context_tokens"
type = "int64"
default = 0
[[table.usage.columns]]
name = "input_cost_usd"
type = "float64"
default = 0
[[table.usage.columns]]
name = "output_cost_usd"
type = "float64"
default = 0
[[table.usage.columns]]
name = "cache_cost_usd"
type = "float64"
default = 0
[[table.usage.columns]]
name = "cache_creation_cost_usd"
type = "float64"
default = 0
[[table.usage.columns]]
name = "cache_creation_cost_usd_5m"
type = "float64"
default = 0
[[table.usage.columns]]
name = "cache_creation_cost_usd_1h"
type = "float64"
default = 0
[[table.usage.columns]]
name = "cache_read_cost_usd"
type = "float64"
default = 0
[[table.usage.columns]]
name = "request_cost_usd"
type = "float64"
default = 0
[[table.usage.columns]]
name = "actual_input_cost_usd"
type = "float64"
default = 0
[[table.usage.columns]]
name = "actual_output_cost_usd"
type = "float64"
default = 0
[[table.usage.columns]]
name = "actual_cache_cost_usd"
type = "float64"
default = 0
[[table.usage.columns]]
name = "actual_cache_creation_cost_usd"
type = "float64"
default = 0
[[table.usage.columns]]
name = "actual_cache_creation_cost_usd_5m"
type = "float64"
default = 0
[[table.usage.columns]]
name = "actual_cache_creation_cost_usd_1h"
type = "float64"
default = 0
[[table.usage.columns]]
name = "actual_cache_read_cost_usd"
type = "float64"
default = 0
[[table.usage.columns]]
name = "actual_request_cost_usd"
type = "float64"
default = 0
[[table.usage.columns]]
name = "rate_multiplier"
type = "float64"
default = 1
[[table.usage.columns]]
name = "input_price_per_1m"
type = "float64"
nullable = true
[[table.usage.columns]]
name = "output_price_per_1m"
type = "float64"
nullable = true
[[table.usage.columns]]
name = "cache_creation_price_per_1m"
type = "float64"
nullable = true
[[table.usage.columns]]
name = "cache_creation_price_per_1m_5m"
type = "float64"
nullable = true
[[table.usage.columns]]
name = "cache_creation_price_per_1m_1h"
type = "float64"
nullable = true
[[table.usage.columns]]
name = "cache_read_price_per_1m"
type = "float64"
nullable = true
[[table.usage.columns]]
name = "price_per_request"
type = "float64"
nullable = true
[[table.usage.columns]]
name = "status_code"
type = "int32"
nullable = true
[[table.usage.columns]]
name = "error_message"
type = "long_text"
nullable = true
[[table.usage.columns]]
name = "error_category"
type = "text"
length = 255
nullable = true
[[table.usage.columns]]
name = "response_time_ms"
type = "int64"
nullable = true
[[table.usage.columns]]
name = "first_byte_time_ms"
type = "int64"
nullable = true
[[table.usage.columns]]
name = "wallet_id"
type = "text_id"
length = 64
nullable = true
[[table.usage.columns]]
name = "status"
type = "text"
length = 64
default = "completed"
[[table.usage.columns]]
name = "billing_status"
type = "text"
length = 64
default = "pending"
[[table.usage.columns]]
name = "total_cost_usd"
type = "float64"
default = 0
[[table.usage.columns]]
name = "actual_total_cost_usd"
type = "float64"
default = 0
[[table.usage.columns]]
name = "request_headers"
type = "json"
nullable = true
[[table.usage.columns]]
name = "request_body"
type = "json"
nullable = true
[[table.usage.columns]]
name = "provider_request_headers"
type = "json"
nullable = true
[[table.usage.columns]]
name = "provider_request_body"
type = "json"
nullable = true
[[table.usage.columns]]
name = "response_headers"
type = "json"
nullable = true
[[table.usage.columns]]
name = "response_body"
type = "json"
nullable = true
[[table.usage.columns]]
name = "client_response_headers"
type = "json"
nullable = true
[[table.usage.columns]]
name = "client_response_body"
type = "json"
nullable = true
[[table.usage.columns]]
name = "request_body_compressed"
type = "bytes"
nullable = true
[[table.usage.columns]]
name = "provider_request_body_compressed"
type = "bytes"
nullable = true
[[table.usage.columns]]
name = "response_body_compressed"
type = "bytes"
nullable = true
[[table.usage.columns]]
name = "client_response_body_compressed"
type = "bytes"
nullable = true
[[table.usage.columns]]
name = "request_metadata"
type = "json"
nullable = true
[[table.usage.columns]]
name = "created_at"
type = "unix_seconds"
nullable = true
[[table.usage.columns]]
name = "candidate_id"
type = "text"
length = 128
nullable = true
[[table.usage.columns]]
name = "candidate_index"
type = "int64"
nullable = true
[[table.usage.columns]]
name = "key_name"
type = "text"
length = 255
nullable = true
[[table.usage.columns]]
name = "username"
type = "text"
length = 255
nullable = true
[[table.usage.columns]]
name = "api_key_name"
type = "text"
length = 255
nullable = true
[[table.usage.columns]]
name = "planner_kind"
type = "text"
length = 64
nullable = true
[[table.usage.columns]]
name = "route_family"
type = "text"
length = 128
nullable = true
[[table.usage.columns]]
name = "route_kind"
type = "text"
length = 128
nullable = true
[[table.usage.columns]]
name = "execution_path"
type = "text"
length = 128
nullable = true
[[table.usage.columns]]
name = "local_execution_runtime_miss_reason"
type = "text"
length = 255
nullable = true
[[table.usage.columns]]
name = "wallet_balance_before"
type = "float64"
nullable = true
[[table.usage.columns]]
name = "wallet_balance_after"
type = "float64"
nullable = true
[[table.usage.columns]]
name = "wallet_recharge_balance_before"
type = "float64"
nullable = true
[[table.usage.columns]]
name = "wallet_recharge_balance_after"
type = "float64"
nullable = true
[[table.usage.columns]]
name = "wallet_gift_balance_before"
type = "float64"
nullable = true
[[table.usage.columns]]
name = "wallet_gift_balance_after"
type = "float64"
nullable = true
[[table.usage.columns]]
name = "finalized_at"
type = "unix_seconds"
nullable = true
[[table.usage.columns]]
name = "created_at_unix_ms"
type = "unix_millis"
default = 0
[[table.usage.columns]]
name = "updated_at_unix_secs"
type = "unix_seconds"
default = 0
[[table.usage.indexes]]
name = "usage_api_key_id_idx"
columns = ["api_key_id"]
[[table.usage.indexes]]
name = "usage_billing_status_idx"
columns = ["billing_status"]
[[table.usage.indexes]]
name = "usage_created_at_idx"
columns = ["created_at_unix_ms"]
[[table.usage.indexes]]
name = "usage_provider_api_key_id_idx"
columns = ["provider_api_key_id"]
[[table.usage.indexes]]
name = "usage_provider_id_idx"
columns = ["provider_id"]
[[table.usage.indexes]]
name = "usage_request_id_idx"
columns = ["request_id"]
[[table.usage.indexes]]
name = "usage_user_id_idx"
columns = ["user_id"]
[[table.usage.indexes]]
name = "usage_wallet_id_idx"
columns = ["wallet_id"]
[table.usage_settlement_snapshots]
domain = "usage"
order = 20
primary_key = ["request_id"]
[[table.usage_settlement_snapshots.columns]]
name = "request_id"
type = "text"
length = 128
[[table.usage_settlement_snapshots.columns]]
name = "billing_status"
type = "text"
length = 64
[[table.usage_settlement_snapshots.columns]]
name = "wallet_id"
type = "text_id"
length = 64
nullable = true
[[table.usage_settlement_snapshots.columns]]
name = "wallet_balance_before"
type = "float64"
nullable = true
[[table.usage_settlement_snapshots.columns]]
name = "wallet_balance_after"
type = "float64"
nullable = true
[[table.usage_settlement_snapshots.columns]]
name = "wallet_recharge_balance_before"
type = "float64"
nullable = true
[[table.usage_settlement_snapshots.columns]]
name = "wallet_recharge_balance_after"
type = "float64"
nullable = true
[[table.usage_settlement_snapshots.columns]]
name = "wallet_gift_balance_before"
type = "float64"
nullable = true
[[table.usage_settlement_snapshots.columns]]
name = "wallet_gift_balance_after"
type = "float64"
nullable = true
[[table.usage_settlement_snapshots.columns]]
name = "provider_monthly_used_usd"
type = "float64"
nullable = true
[[table.usage_settlement_snapshots.columns]]
name = "finalized_at"
type = "unix_seconds"
nullable = true
[[table.usage_settlement_snapshots.columns]]
name = "created_at"
type = "unix_seconds"
[[table.usage_settlement_snapshots.columns]]
name = "updated_at"
type = "unix_seconds"
[[table.usage_settlement_snapshots.indexes]]
name = "usage_settlement_snapshots_billing_status_idx"
columns = ["billing_status"]
[[table.usage_settlement_snapshots.indexes]]
name = "usage_settlement_snapshots_wallet_id_idx"
columns = ["wallet_id"]