mirror of
https://github.com/fawney19/Aether.git
synced 2026-09-02 09:20:22 +08:00
Merge remote-tracking branch 'entropy-xu/payment-billing-plans'
# Conflicts: # crates/aether-data/src/lifecycle/bootstrap/postgres.rs # crates/aether-data/src/lifecycle/migrate/tests.rs # frontend/src/views/admin/Users.vue
This commit is contained in:
@@ -80,6 +80,13 @@ CREATE TABLE IF NOT EXISTS payment_orders (
|
||||
`refunded_amount_usd` DOUBLE NOT NULL DEFAULT 0,
|
||||
`refundable_amount_usd` DOUBLE NOT NULL DEFAULT 0,
|
||||
`payment_method` VARCHAR(64) NOT NULL,
|
||||
`payment_provider` VARCHAR(64),
|
||||
`payment_channel` VARCHAR(64),
|
||||
`order_kind` VARCHAR(64) NOT NULL DEFAULT 'wallet_recharge',
|
||||
`product_id` VARCHAR(64),
|
||||
`product_snapshot` JSON,
|
||||
`fulfillment_status` VARCHAR(64) NOT NULL DEFAULT 'pending',
|
||||
`fulfillment_error` LONGTEXT,
|
||||
`gateway_order_id` VARCHAR(128),
|
||||
`gateway_response` JSON,
|
||||
`status` VARCHAR(64) NOT NULL DEFAULT 'pending',
|
||||
@@ -92,7 +99,25 @@ CREATE TABLE IF NOT EXISTS payment_orders (
|
||||
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`)
|
||||
KEY idx_payment_orders_gateway_order_id (`gateway_order_id`),
|
||||
KEY idx_payment_orders_kind_status (`order_kind`, `status`),
|
||||
KEY idx_payment_orders_product (`product_id`)
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS payment_gateway_configs (
|
||||
`provider` VARCHAR(64) NOT NULL,
|
||||
`enabled` TINYINT(1) NOT NULL DEFAULT 0,
|
||||
`endpoint_url` VARCHAR(512) NOT NULL,
|
||||
`callback_base_url` VARCHAR(512),
|
||||
`merchant_id` VARCHAR(128) NOT NULL,
|
||||
`merchant_key_encrypted` LONGTEXT,
|
||||
`pay_currency` VARCHAR(16) NOT NULL DEFAULT 'CNY',
|
||||
`usd_exchange_rate` DOUBLE NOT NULL DEFAULT 7.2,
|
||||
`min_recharge_usd` DOUBLE NOT NULL DEFAULT 1,
|
||||
`channels_json` JSON,
|
||||
`created_at` BIGINT NOT NULL,
|
||||
`updated_at` BIGINT NOT NULL,
|
||||
PRIMARY KEY (`provider`)
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS payment_callbacks (
|
||||
@@ -117,6 +142,56 @@ CREATE TABLE IF NOT EXISTS payment_callbacks (
|
||||
KEY ix_payment_callbacks_payment_order_id (`payment_order_id`)
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS billing_plans (
|
||||
`id` VARCHAR(64) NOT NULL,
|
||||
`title` VARCHAR(128) NOT NULL,
|
||||
`description` LONGTEXT,
|
||||
`price_amount` DOUBLE NOT NULL,
|
||||
`price_currency` VARCHAR(16) NOT NULL DEFAULT 'CNY',
|
||||
`duration_unit` VARCHAR(32) NOT NULL,
|
||||
`duration_value` BIGINT NOT NULL,
|
||||
`enabled` TINYINT(1) NOT NULL DEFAULT 1,
|
||||
`sort_order` BIGINT NOT NULL DEFAULT 0,
|
||||
`max_active_per_user` BIGINT NOT NULL DEFAULT 1,
|
||||
`purchase_limit_scope` VARCHAR(32) NOT NULL DEFAULT 'active_period',
|
||||
`entitlements_json` JSON NOT NULL,
|
||||
`created_at` BIGINT NOT NULL,
|
||||
`updated_at` BIGINT NOT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
KEY idx_billing_plans_enabled_sort (`enabled`, `sort_order`)
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS user_plan_entitlements (
|
||||
`id` VARCHAR(64) NOT NULL,
|
||||
`user_id` VARCHAR(64) NOT NULL,
|
||||
`plan_id` VARCHAR(64) NOT NULL,
|
||||
`payment_order_id` VARCHAR(64) NOT NULL,
|
||||
`status` VARCHAR(64) NOT NULL DEFAULT 'active',
|
||||
`starts_at` BIGINT NOT NULL,
|
||||
`expires_at` BIGINT NOT NULL,
|
||||
`entitlements_snapshot` JSON NOT NULL,
|
||||
`created_at` BIGINT NOT NULL,
|
||||
`updated_at` BIGINT NOT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
KEY idx_user_plan_entitlements_user_active (`user_id`, `status`, `expires_at`),
|
||||
KEY idx_user_plan_entitlements_order (`payment_order_id`)
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS entitlement_usage_ledgers (
|
||||
`id` VARCHAR(64) NOT NULL,
|
||||
`user_entitlement_id` VARCHAR(64) NOT NULL,
|
||||
`user_id` VARCHAR(64) NOT NULL,
|
||||
`request_id` VARCHAR(128) NOT NULL,
|
||||
`amount_usd` DOUBLE NOT NULL,
|
||||
`balance_before` DOUBLE NOT NULL,
|
||||
`balance_after` DOUBLE NOT NULL,
|
||||
`usage_date` VARCHAR(16) NOT NULL,
|
||||
`created_at` BIGINT NOT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY uq_entitlement_usage_request (`user_entitlement_id`, `request_id`),
|
||||
KEY idx_entitlement_usage_user_date (`user_id`, `usage_date`)
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS refund_requests (
|
||||
`id` VARCHAR(64) NOT NULL,
|
||||
`refund_no` VARCHAR(128) NOT NULL,
|
||||
|
||||
Reference in New Issue
Block a user