- 新增 Channel / SubscriptionPlan / SystemConfig 三个数据模型 - Order 模型扩展支持订阅订单(order_type, plan_id, subscription_group_id) - Sub2API client 新增分组查询、订阅分配/续期、用户订阅查询 - 订单服务支持订阅履约流程(CAS 锁 + 分组消失安全处理) - 管理后台:渠道管理、订阅套餐管理、系统配置、Sub2API 分组同步 - 用户页面:双 Tab UI(按量付费/包月订阅)、渠道卡片、充值弹窗、订阅确认 - PaymentForm 支持 fixedAmount 固定金额模式 - 订单状态 API 返回 failedReason 用于订阅异常展示 - 数据库迁移脚本
67 lines
2.3 KiB
SQL
67 lines
2.3 KiB
SQL
-- CreateTable: channels
|
|
CREATE TABLE "channels" (
|
|
"id" TEXT NOT NULL,
|
|
"group_id" INTEGER NOT NULL,
|
|
"name" TEXT NOT NULL,
|
|
"platform" TEXT NOT NULL DEFAULT 'claude',
|
|
"rate_multiplier" DECIMAL(10,4) NOT NULL,
|
|
"description" TEXT,
|
|
"models" TEXT,
|
|
"features" TEXT,
|
|
"sort_order" INTEGER NOT NULL DEFAULT 0,
|
|
"enabled" BOOLEAN NOT NULL DEFAULT true,
|
|
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updated_at" TIMESTAMP(3) NOT NULL,
|
|
|
|
CONSTRAINT "channels_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable: subscription_plans
|
|
CREATE TABLE "subscription_plans" (
|
|
"id" TEXT NOT NULL,
|
|
"group_id" INTEGER NOT NULL,
|
|
"name" TEXT NOT NULL,
|
|
"description" TEXT,
|
|
"price" DECIMAL(10,2) NOT NULL,
|
|
"original_price" DECIMAL(10,2),
|
|
"validity_days" INTEGER NOT NULL DEFAULT 30,
|
|
"features" TEXT,
|
|
"for_sale" BOOLEAN NOT NULL DEFAULT false,
|
|
"sort_order" INTEGER NOT NULL DEFAULT 0,
|
|
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updated_at" TIMESTAMP(3) NOT NULL,
|
|
|
|
CONSTRAINT "subscription_plans_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable: system_configs
|
|
CREATE TABLE "system_configs" (
|
|
"key" TEXT NOT NULL,
|
|
"value" TEXT NOT NULL,
|
|
"group" TEXT NOT NULL DEFAULT 'general',
|
|
"label" TEXT,
|
|
"updated_at" TIMESTAMP(3) NOT NULL,
|
|
|
|
CONSTRAINT "system_configs_pkey" PRIMARY KEY ("key")
|
|
);
|
|
|
|
-- AlterTable: orders - add subscription fields
|
|
ALTER TABLE "orders" ADD COLUMN "order_type" TEXT NOT NULL DEFAULT 'balance';
|
|
ALTER TABLE "orders" ADD COLUMN "plan_id" TEXT;
|
|
ALTER TABLE "orders" ADD COLUMN "subscription_group_id" INTEGER;
|
|
ALTER TABLE "orders" ADD COLUMN "subscription_days" INTEGER;
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "channels_group_id_key" ON "channels"("group_id");
|
|
CREATE INDEX "channels_sort_order_idx" ON "channels"("sort_order");
|
|
|
|
CREATE UNIQUE INDEX "subscription_plans_group_id_key" ON "subscription_plans"("group_id");
|
|
CREATE INDEX "subscription_plans_for_sale_sort_order_idx" ON "subscription_plans"("for_sale", "sort_order");
|
|
|
|
CREATE INDEX "system_configs_group_idx" ON "system_configs"("group");
|
|
|
|
CREATE INDEX "orders_order_type_idx" ON "orders"("order_type");
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "orders" ADD CONSTRAINT "orders_plan_id_fkey" FOREIGN KEY ("plan_id") REFERENCES "subscription_plans"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|