chore:合并数据库变更文件
This commit is contained in:
1 parent
87dd40e4be
commit
917afb338a
3 files changed
+140
-113
No files matched your search
@@ -1,47 +0,0 @@
|
||||
-- +goose Up
|
||||
-- 租户等级系统:基于累计充值的自动等级体系
|
||||
|
||||
-- 1. 新建等级配置表
|
||||
CREATE TABLE tnt_tenant_level_configs (
|
||||
id BIGSERIAL PRIMARY KEY,
|
||||
level INT NOT NULL,
|
||||
name VARCHAR(32) NOT NULL,
|
||||
cumulative_recharge_threshold NUMERIC(20,10) NOT NULL,
|
||||
max_members INT NOT NULL DEFAULT 5,
|
||||
max_concurrency INT NOT NULL DEFAULT 10,
|
||||
price_multiplier NUMERIC(5,4) NOT NULL DEFAULT 1.0000,
|
||||
sort_order INT NOT NULL DEFAULT 0,
|
||||
created_at TIMESTAMPTZ DEFAULT now() NOT NULL,
|
||||
updated_at TIMESTAMPTZ DEFAULT now() NOT NULL,
|
||||
CONSTRAINT uk_tnt_tenant_level_configs_level UNIQUE (level)
|
||||
);
|
||||
|
||||
COMMENT ON TABLE tnt_tenant_level_configs IS '租户等级配置表';
|
||||
COMMENT ON COLUMN tnt_tenant_level_configs.level IS '等级号(1, 2, 3...)';
|
||||
COMMENT ON COLUMN tnt_tenant_level_configs.name IS '等级名称';
|
||||
COMMENT ON COLUMN tnt_tenant_level_configs.cumulative_recharge_threshold IS '累计充值阈值(USD),达到此值自动升级';
|
||||
COMMENT ON COLUMN tnt_tenant_level_configs.max_members IS '该等级最大成员数';
|
||||
COMMENT ON COLUMN tnt_tenant_level_configs.max_concurrency IS '该等级最大并发数,0=无限';
|
||||
COMMENT ON COLUMN tnt_tenant_level_configs.price_multiplier IS '价格乘数(折扣,如 0.9=九折)';
|
||||
COMMENT ON COLUMN tnt_tenant_level_configs.sort_order IS '排序权重';
|
||||
|
||||
-- 2. 插入默认等级数据
|
||||
INSERT INTO tnt_tenant_level_configs (level, name, cumulative_recharge_threshold, max_members, max_concurrency, price_multiplier, sort_order) VALUES
|
||||
(1, 'LV1', 0, 5, 10, 1.0000, 1),
|
||||
(2, 'LV2', 100, 10, 20, 0.9500, 2),
|
||||
(3, 'LV3', 500, 20, 50, 0.9000, 3),
|
||||
(4, 'LV4', 2000, 50, 100, 0.8500, 4),
|
||||
(5, 'LV5', 10000, 0, 0, 0.8000, 5);
|
||||
|
||||
-- 3. bil_wallets 添加累计充值字段
|
||||
ALTER TABLE bil_wallets ADD COLUMN cumulative_recharge NUMERIC(20,10) DEFAULT 0 NOT NULL;
|
||||
COMMENT ON COLUMN bil_wallets.cumulative_recharge IS '累计充值总额(USD)';
|
||||
|
||||
-- 4. tnt_tenants 添加等级字段
|
||||
ALTER TABLE tnt_tenants ADD COLUMN level INT DEFAULT 1 NOT NULL;
|
||||
COMMENT ON COLUMN tnt_tenants.level IS '当前等级(对应 tnt_tenant_level_configs.level)';
|
||||
|
||||
-- +goose Down
|
||||
ALTER TABLE tnt_tenants DROP COLUMN IF EXISTS level;
|
||||
ALTER TABLE bil_wallets DROP COLUMN IF EXISTS cumulative_recharge;
|
||||
DROP TABLE IF EXISTS tnt_tenant_level_configs;
|
||||
@@ -0,0 +1,140 @@
|
||||
-- +goose Up
|
||||
-- 租户等级系统 + 模型分组功能 + 补充缺失索引
|
||||
|
||||
-- ============================================================
|
||||
-- 一、租户等级系统:基于累计充值的自动等级体系
|
||||
-- ============================================================
|
||||
|
||||
-- 1. 新建等级配置表
|
||||
CREATE TABLE tnt_tenant_level_configs (
|
||||
id BIGSERIAL PRIMARY KEY,
|
||||
level INT NOT NULL,
|
||||
name VARCHAR(32) NOT NULL,
|
||||
cumulative_recharge_threshold NUMERIC(20,10) NOT NULL,
|
||||
max_members INT NOT NULL DEFAULT 5,
|
||||
max_concurrency INT NOT NULL DEFAULT 10,
|
||||
price_multiplier NUMERIC(5,4) NOT NULL DEFAULT 1.0000,
|
||||
sort_order INT NOT NULL DEFAULT 0,
|
||||
created_at TIMESTAMPTZ DEFAULT now() NOT NULL,
|
||||
updated_at TIMESTAMPTZ DEFAULT now() NOT NULL,
|
||||
CONSTRAINT uk_tnt_tenant_level_configs_level UNIQUE (level)
|
||||
);
|
||||
|
||||
COMMENT ON TABLE tnt_tenant_level_configs IS '租户等级配置表';
|
||||
COMMENT ON COLUMN tnt_tenant_level_configs.level IS '等级号(1, 2, 3...)';
|
||||
COMMENT ON COLUMN tnt_tenant_level_configs.name IS '等级名称';
|
||||
COMMENT ON COLUMN tnt_tenant_level_configs.cumulative_recharge_threshold IS '累计充值阈值(USD),达到此值自动升级';
|
||||
COMMENT ON COLUMN tnt_tenant_level_configs.max_members IS '该等级最大成员数';
|
||||
COMMENT ON COLUMN tnt_tenant_level_configs.max_concurrency IS '该等级最大并发数,0=无限';
|
||||
COMMENT ON COLUMN tnt_tenant_level_configs.price_multiplier IS '价格乘数(折扣,如 0.9=九折)';
|
||||
COMMENT ON COLUMN tnt_tenant_level_configs.sort_order IS '排序权重';
|
||||
|
||||
-- 2. 插入默认等级数据
|
||||
INSERT INTO tnt_tenant_level_configs (level, name, cumulative_recharge_threshold, max_members, max_concurrency, price_multiplier, sort_order) VALUES
|
||||
(1, 'LV1', 0, 5, 10, 1.0000, 1),
|
||||
(2, 'LV2', 100, 10, 20, 0.9500, 2),
|
||||
(3, 'LV3', 500, 20, 50, 0.9000, 3),
|
||||
(4, 'LV4', 2000, 50, 100, 0.8500, 4),
|
||||
(5, 'LV5', 10000, 0, 0, 0.8000, 5);
|
||||
|
||||
-- 3. bil_wallets 添加累计充值字段
|
||||
ALTER TABLE bil_wallets ADD COLUMN cumulative_recharge NUMERIC(20,10) DEFAULT 0 NOT NULL;
|
||||
COMMENT ON COLUMN bil_wallets.cumulative_recharge IS '累计充值总额(USD)';
|
||||
|
||||
-- 4. tnt_tenants 添加等级字段
|
||||
ALTER TABLE tnt_tenants ADD COLUMN level INT DEFAULT 1 NOT NULL;
|
||||
COMMENT ON COLUMN tnt_tenants.level IS '当前等级(对应 tnt_tenant_level_configs.level)';
|
||||
|
||||
-- ============================================================
|
||||
-- 二、模型分组功能:通过分组批量管理租户可用的模型
|
||||
-- ============================================================
|
||||
|
||||
-- 模型分组定义
|
||||
CREATE TABLE mdl_model_groups (
|
||||
id BIGSERIAL PRIMARY KEY,
|
||||
name VARCHAR(100) NOT NULL,
|
||||
code VARCHAR(50) NOT NULL,
|
||||
description TEXT,
|
||||
status VARCHAR(20) DEFAULT 'active' NOT NULL,
|
||||
created_at TIMESTAMPTZ DEFAULT now() NOT NULL,
|
||||
updated_at TIMESTAMPTZ DEFAULT now() NOT NULL,
|
||||
CONSTRAINT uk_mdl_model_groups_code UNIQUE (code)
|
||||
);
|
||||
|
||||
COMMENT ON TABLE mdl_model_groups IS '模型分组定义';
|
||||
COMMENT ON COLUMN mdl_model_groups.id IS '主键ID';
|
||||
COMMENT ON COLUMN mdl_model_groups.name IS '分组名称(如"全量模型"、"基础对话")';
|
||||
COMMENT ON COLUMN mdl_model_groups.code IS '分组唯一标识(如 full_access、basic_chat)';
|
||||
COMMENT ON COLUMN mdl_model_groups.description IS '分组描述';
|
||||
COMMENT ON COLUMN mdl_model_groups.status IS '状态:active(启用)/ disabled(禁用)';
|
||||
COMMENT ON COLUMN mdl_model_groups.created_at IS '创建时间';
|
||||
COMMENT ON COLUMN mdl_model_groups.updated_at IS '更新时间';
|
||||
|
||||
-- 分组-模型关联(多对多)
|
||||
CREATE TABLE mdl_group_models (
|
||||
id BIGSERIAL PRIMARY KEY,
|
||||
group_id BIGINT NOT NULL,
|
||||
model_id BIGINT NOT NULL,
|
||||
created_at TIMESTAMPTZ DEFAULT now() NOT NULL,
|
||||
updated_at TIMESTAMPTZ DEFAULT now() NOT NULL,
|
||||
CONSTRAINT uk_mdl_group_models UNIQUE (group_id, model_id)
|
||||
);
|
||||
|
||||
CREATE INDEX idx_mdl_group_models_model_id ON mdl_group_models (model_id);
|
||||
|
||||
COMMENT ON TABLE mdl_group_models IS '分组-模型关联';
|
||||
COMMENT ON COLUMN mdl_group_models.id IS '主键ID';
|
||||
COMMENT ON COLUMN mdl_group_models.group_id IS '分组ID(关联 mdl_model_groups.id)';
|
||||
COMMENT ON COLUMN mdl_group_models.model_id IS '模型ID(关联 mdl_models.id)';
|
||||
COMMENT ON COLUMN mdl_group_models.created_at IS '创建时间';
|
||||
COMMENT ON COLUMN mdl_group_models.updated_at IS '更新时间';
|
||||
|
||||
-- 租户-分组关联(多对多)
|
||||
CREATE TABLE mdl_tenant_groups (
|
||||
id BIGSERIAL PRIMARY KEY,
|
||||
tenant_id BIGINT NOT NULL,
|
||||
group_id BIGINT NOT NULL,
|
||||
created_at TIMESTAMPTZ DEFAULT now() NOT NULL,
|
||||
updated_at TIMESTAMPTZ DEFAULT now() NOT NULL,
|
||||
CONSTRAINT uk_mdl_tenant_groups UNIQUE (tenant_id, group_id)
|
||||
);
|
||||
|
||||
CREATE INDEX idx_mdl_tenant_groups_tenant_id ON mdl_tenant_groups (tenant_id);
|
||||
|
||||
COMMENT ON TABLE mdl_tenant_groups IS '租户-分组关联';
|
||||
COMMENT ON COLUMN mdl_tenant_groups.id IS '主键ID';
|
||||
COMMENT ON COLUMN mdl_tenant_groups.tenant_id IS '租户ID(关联 tnt_tenants.id)';
|
||||
COMMENT ON COLUMN mdl_tenant_groups.group_id IS '分组ID(关联 mdl_model_groups.id)';
|
||||
COMMENT ON COLUMN mdl_tenant_groups.created_at IS '创建时间';
|
||||
COMMENT ON COLUMN mdl_tenant_groups.updated_at IS '更新时间';
|
||||
|
||||
-- ============================================================
|
||||
-- 三、补充缺失的外键列索引
|
||||
-- ============================================================
|
||||
|
||||
CREATE INDEX idx_api_keys_user ON api_keys (user_id);
|
||||
CREATE INDEX idx_bil_records_channel ON bil_records (channel_id) WHERE channel_id IS NOT NULL;
|
||||
CREATE INDEX idx_fil_files_user ON fil_files (user_id);
|
||||
CREATE INDEX idx_ord_promo_code_usages_user ON ord_promo_code_usages (user_id);
|
||||
CREATE INDEX idx_ord_promo_code_usages_order ON ord_promo_code_usages (order_id);
|
||||
CREATE INDEX idx_pln_tenant_plans_plan ON pln_tenant_plans (plan_id);
|
||||
CREATE INDEX idx_spt_feedbacks_user ON spt_feedbacks (tenant_id, user_id);
|
||||
CREATE INDEX idx_spt_replies_user ON spt_replies (user_id);
|
||||
|
||||
-- +goose Down
|
||||
DROP INDEX IF EXISTS idx_spt_replies_user;
|
||||
DROP INDEX IF EXISTS idx_spt_feedbacks_user;
|
||||
DROP INDEX IF EXISTS idx_pln_tenant_plans_plan;
|
||||
DROP INDEX IF EXISTS idx_ord_promo_code_usages_order;
|
||||
DROP INDEX IF EXISTS idx_ord_promo_code_usages_user;
|
||||
DROP INDEX IF EXISTS idx_fil_files_user;
|
||||
DROP INDEX IF EXISTS idx_bil_records_channel;
|
||||
DROP INDEX IF EXISTS idx_api_keys_user;
|
||||
|
||||
DROP TABLE IF EXISTS mdl_tenant_groups;
|
||||
DROP TABLE IF EXISTS mdl_group_models;
|
||||
DROP TABLE IF EXISTS mdl_model_groups;
|
||||
|
||||
ALTER TABLE tnt_tenants DROP COLUMN IF EXISTS level;
|
||||
ALTER TABLE bil_wallets DROP COLUMN IF EXISTS cumulative_recharge;
|
||||
DROP TABLE IF EXISTS tnt_tenant_level_configs;
|
||||
@@ -1,66 +0,0 @@
|
||||
-- +goose Up
|
||||
-- 模型分组功能:通过分组批量管理租户可用的模型
|
||||
|
||||
-- 模型分组定义
|
||||
CREATE TABLE mdl_model_groups (
|
||||
id BIGSERIAL PRIMARY KEY,
|
||||
name VARCHAR(100) NOT NULL,
|
||||
code VARCHAR(50) NOT NULL,
|
||||
description TEXT,
|
||||
status VARCHAR(20) DEFAULT 'active' NOT NULL,
|
||||
created_at TIMESTAMPTZ DEFAULT now() NOT NULL,
|
||||
updated_at TIMESTAMPTZ DEFAULT now() NOT NULL,
|
||||
CONSTRAINT uk_mdl_model_groups_code UNIQUE (code)
|
||||
);
|
||||
|
||||
COMMENT ON TABLE mdl_model_groups IS '模型分组定义';
|
||||
COMMENT ON COLUMN mdl_model_groups.id IS '主键ID';
|
||||
COMMENT ON COLUMN mdl_model_groups.name IS '分组名称(如"全量模型"、"基础对话")';
|
||||
COMMENT ON COLUMN mdl_model_groups.code IS '分组唯一标识(如 full_access、basic_chat)';
|
||||
COMMENT ON COLUMN mdl_model_groups.description IS '分组描述';
|
||||
COMMENT ON COLUMN mdl_model_groups.status IS '状态:active(启用)/ disabled(禁用)';
|
||||
COMMENT ON COLUMN mdl_model_groups.created_at IS '创建时间';
|
||||
COMMENT ON COLUMN mdl_model_groups.updated_at IS '更新时间';
|
||||
|
||||
-- 分组-模型关联(多对多)
|
||||
CREATE TABLE mdl_group_models (
|
||||
id BIGSERIAL PRIMARY KEY,
|
||||
group_id BIGINT NOT NULL,
|
||||
model_id BIGINT NOT NULL,
|
||||
created_at TIMESTAMPTZ DEFAULT now() NOT NULL,
|
||||
updated_at TIMESTAMPTZ DEFAULT now() NOT NULL,
|
||||
CONSTRAINT uk_mdl_group_models UNIQUE (group_id, model_id)
|
||||
);
|
||||
|
||||
CREATE INDEX idx_mdl_group_models_model_id ON mdl_group_models (model_id);
|
||||
|
||||
COMMENT ON TABLE mdl_group_models IS '分组-模型关联';
|
||||
COMMENT ON COLUMN mdl_group_models.id IS '主键ID';
|
||||
COMMENT ON COLUMN mdl_group_models.group_id IS '分组ID(关联 mdl_model_groups.id)';
|
||||
COMMENT ON COLUMN mdl_group_models.model_id IS '模型ID(关联 mdl_models.id)';
|
||||
COMMENT ON COLUMN mdl_group_models.created_at IS '创建时间';
|
||||
COMMENT ON COLUMN mdl_group_models.updated_at IS '更新时间';
|
||||
|
||||
-- 租户-分组关联(多对多)
|
||||
CREATE TABLE mdl_tenant_groups (
|
||||
id BIGSERIAL PRIMARY KEY,
|
||||
tenant_id BIGINT NOT NULL,
|
||||
group_id BIGINT NOT NULL,
|
||||
created_at TIMESTAMPTZ DEFAULT now() NOT NULL,
|
||||
updated_at TIMESTAMPTZ DEFAULT now() NOT NULL,
|
||||
CONSTRAINT uk_mdl_tenant_groups UNIQUE (tenant_id, group_id)
|
||||
);
|
||||
|
||||
CREATE INDEX idx_mdl_tenant_groups_tenant_id ON mdl_tenant_groups (tenant_id);
|
||||
|
||||
COMMENT ON TABLE mdl_tenant_groups IS '租户-分组关联';
|
||||
COMMENT ON COLUMN mdl_tenant_groups.id IS '主键ID';
|
||||
COMMENT ON COLUMN mdl_tenant_groups.tenant_id IS '租户ID(关联 tnt_tenants.id)';
|
||||
COMMENT ON COLUMN mdl_tenant_groups.group_id IS '分组ID(关联 mdl_model_groups.id)';
|
||||
COMMENT ON COLUMN mdl_tenant_groups.created_at IS '创建时间';
|
||||
COMMENT ON COLUMN mdl_tenant_groups.updated_at IS '更新时间';
|
||||
|
||||
-- +goose Down
|
||||
DROP TABLE IF EXISTS mdl_tenant_groups;
|
||||
DROP TABLE IF EXISTS mdl_group_models;
|
||||
DROP TABLE IF EXISTS mdl_model_groups;
|
||||
Reference in new issue
Block a user