fix(schema): 统一使用 TEXT 类型替代 VARCHAR
问题: - 之前 schema 和 migration 中使用了 VARCHAR(n) 限制字段长度 - Prisma 的 String 类型默认映射到 PostgreSQL TEXT - VARCHAR 和 TEXT 在 PostgreSQL 中性能相同,VARCHAR 限制反而增加风险 修复: 1. contribution-service: - schema: 移除 accountType/baseType/regionCode/name 的 @db.VarChar - migration: VARCHAR -> TEXT 2. mining-service: - schema: 移除 accountType/baseType/regionCode/name 的 @db.VarChar - migration: VARCHAR -> TEXT 3. mining-admin-service: - migration: VARCHAR -> TEXT (schema 已使用 TEXT) 原则:Prisma String 直接使用,不加 @db.VarChar() Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
parent
5f2f223f7b
commit
9c816266ac
|
|
@ -1,9 +1,9 @@
|
|||
-- 系统账户按省市细分: 添加 base_type 和 region_code 字段
|
||||
-- 将 accountType 从简单枚举改为组合键(如 PROVINCE_440000, CITY_440100)
|
||||
|
||||
-- 1. 添加新字段
|
||||
ALTER TABLE "system_accounts" ADD COLUMN "base_type" VARCHAR(20);
|
||||
ALTER TABLE "system_accounts" ADD COLUMN "region_code" VARCHAR(10);
|
||||
-- 1. 添加新字段 (使用 TEXT 类型与 Prisma String 一致)
|
||||
ALTER TABLE "system_accounts" ADD COLUMN "base_type" TEXT;
|
||||
ALTER TABLE "system_accounts" ADD COLUMN "region_code" TEXT;
|
||||
|
||||
-- 2. 设置现有数据的 base_type(与 account_type 相同)
|
||||
UPDATE "system_accounts" SET "base_type" = "account_type" WHERE "base_type" IS NULL;
|
||||
|
|
@ -11,9 +11,6 @@ UPDATE "system_accounts" SET "base_type" = "account_type" WHERE "base_type" IS N
|
|||
-- 3. 将 base_type 设置为非空
|
||||
ALTER TABLE "system_accounts" ALTER COLUMN "base_type" SET NOT NULL;
|
||||
|
||||
-- 4. 修改 account_type 字段长度以支持组合键
|
||||
ALTER TABLE "system_accounts" ALTER COLUMN "account_type" TYPE VARCHAR(50);
|
||||
|
||||
-- 5. 创建索引(Prisma 默认命名格式: {table}_{field}_idx)
|
||||
-- 4. 创建索引(Prisma 默认命名格式: {table}_{field}_idx)
|
||||
CREATE INDEX IF NOT EXISTS "system_accounts_base_type_idx" ON "system_accounts"("base_type");
|
||||
CREATE INDEX IF NOT EXISTS "system_accounts_region_code_idx" ON "system_accounts"("region_code");
|
||||
|
|
|
|||
|
|
@ -302,10 +302,10 @@ model UnallocatedContribution {
|
|||
// PROVINCE_440000, CITY_440100 等 (按省市细分的账户)
|
||||
model SystemAccount {
|
||||
id BigInt @id @default(autoincrement())
|
||||
accountType String @unique @map("account_type") @db.VarChar(50) // 组合键: PROVINCE_440000, CITY_440100 等
|
||||
baseType String @map("base_type") @db.VarChar(20) // 基础类型: OPERATION / PROVINCE / CITY / HEADQUARTERS
|
||||
regionCode String? @map("region_code") @db.VarChar(10) // 区域代码: 省/市代码,如 440000, 440100
|
||||
name String @db.VarChar(100)
|
||||
accountType String @unique @map("account_type") // 组合键: PROVINCE_440000, CITY_440100 等
|
||||
baseType String @map("base_type") // 基础类型: OPERATION / PROVINCE / CITY / HEADQUARTERS
|
||||
regionCode String? @map("region_code") // 区域代码: 省/市代码,如 440000, 440100
|
||||
name String
|
||||
|
||||
contributionBalance Decimal @default(0) @map("contribution_balance") @db.Decimal(30, 10)
|
||||
contributionNeverExpires Boolean @default(false) @map("contribution_never_expires")
|
||||
|
|
|
|||
|
|
@ -1,9 +1,9 @@
|
|||
-- 同步的系统账户算力表按省市细分: 添加 base_type 和 region_code 字段
|
||||
-- 支持组合键(如 PROVINCE_440000, CITY_440100)
|
||||
|
||||
-- 1. 添加新字段
|
||||
ALTER TABLE "synced_system_contributions" ADD COLUMN "base_type" VARCHAR(20) DEFAULT '';
|
||||
ALTER TABLE "synced_system_contributions" ADD COLUMN "region_code" VARCHAR(10);
|
||||
-- 1. 添加新字段 (使用 TEXT 类型与 Prisma String 一致)
|
||||
ALTER TABLE "synced_system_contributions" ADD COLUMN "base_type" TEXT NOT NULL DEFAULT '';
|
||||
ALTER TABLE "synced_system_contributions" ADD COLUMN "region_code" TEXT;
|
||||
|
||||
-- 2. 设置现有数据的 base_type(根据 account_type 提取)
|
||||
UPDATE "synced_system_contributions"
|
||||
|
|
@ -12,11 +12,8 @@ SET "base_type" = CASE
|
|||
WHEN "account_type" LIKE 'CITY_%' THEN 'CITY'
|
||||
ELSE "account_type"
|
||||
END
|
||||
WHERE "base_type" = '' OR "base_type" IS NULL;
|
||||
WHERE "base_type" = '';
|
||||
|
||||
-- 3. 将 base_type 设置为非空
|
||||
ALTER TABLE "synced_system_contributions" ALTER COLUMN "base_type" SET NOT NULL;
|
||||
|
||||
-- 4. 创建索引(Prisma 默认命名格式: {table}_{field}_idx)
|
||||
-- 3. 创建索引(Prisma 默认命名格式: {table}_{field}_idx)
|
||||
CREATE INDEX IF NOT EXISTS "synced_system_contributions_base_type_idx" ON "synced_system_contributions"("base_type");
|
||||
CREATE INDEX IF NOT EXISTS "synced_system_contributions_region_code_idx" ON "synced_system_contributions"("region_code");
|
||||
|
|
|
|||
|
|
@ -11,10 +11,10 @@ ALTER TABLE "system_mining_transactions" DROP CONSTRAINT IF EXISTS "system_minin
|
|||
-- 步骤 2: 修改 system_mining_accounts 主表
|
||||
-- ============================================================
|
||||
|
||||
-- 2.1 添加新列
|
||||
ALTER TABLE "system_mining_accounts" ADD COLUMN "account_type_new" VARCHAR(50);
|
||||
ALTER TABLE "system_mining_accounts" ADD COLUMN "base_type" VARCHAR(20);
|
||||
ALTER TABLE "system_mining_accounts" ADD COLUMN "region_code" VARCHAR(10);
|
||||
-- 2.1 添加新列 (使用 TEXT 类型与 Prisma String 一致)
|
||||
ALTER TABLE "system_mining_accounts" ADD COLUMN "account_type_new" TEXT;
|
||||
ALTER TABLE "system_mining_accounts" ADD COLUMN "base_type" TEXT;
|
||||
ALTER TABLE "system_mining_accounts" ADD COLUMN "region_code" TEXT;
|
||||
|
||||
-- 2.2 迁移数据:将枚举值转为字符串
|
||||
UPDATE "system_mining_accounts"
|
||||
|
|
@ -42,8 +42,8 @@ CREATE INDEX IF NOT EXISTS "system_mining_accounts_region_code_idx" ON "system_m
|
|||
-- 步骤 3: 修改 system_mining_records 表
|
||||
-- ============================================================
|
||||
|
||||
-- 3.1 添加新列并迁移数据
|
||||
ALTER TABLE "system_mining_records" ADD COLUMN "account_type_new" VARCHAR(50);
|
||||
-- 3.1 添加新列并迁移数据 (使用 TEXT)
|
||||
ALTER TABLE "system_mining_records" ADD COLUMN "account_type_new" TEXT;
|
||||
UPDATE "system_mining_records" SET "account_type_new" = "account_type"::TEXT;
|
||||
|
||||
-- 3.2 删除旧的唯一索引和列
|
||||
|
|
@ -67,8 +67,8 @@ ALTER TABLE "system_mining_records"
|
|||
-- 步骤 4: 修改 system_mining_transactions 表
|
||||
-- ============================================================
|
||||
|
||||
-- 4.1 添加新列并迁移数据
|
||||
ALTER TABLE "system_mining_transactions" ADD COLUMN "account_type_new" VARCHAR(50);
|
||||
-- 4.1 添加新列并迁移数据 (使用 TEXT)
|
||||
ALTER TABLE "system_mining_transactions" ADD COLUMN "account_type_new" TEXT;
|
||||
UPDATE "system_mining_transactions" SET "account_type_new" = "account_type"::TEXT;
|
||||
|
||||
-- 4.2 删除旧列
|
||||
|
|
|
|||
|
|
@ -57,10 +57,10 @@ model MiningEra {
|
|||
// PROVINCE_440000, CITY_440100 等 (按省市细分的账户)
|
||||
model SystemMiningAccount {
|
||||
id String @id @default(uuid())
|
||||
accountType String @unique @map("account_type") @db.VarChar(50) // 组合键
|
||||
baseType String @map("base_type") @db.VarChar(20) // 基础类型: OPERATION/PROVINCE/CITY/HEADQUARTERS
|
||||
regionCode String? @map("region_code") @db.VarChar(10) // 区域代码
|
||||
name String @db.VarChar(100)
|
||||
accountType String @unique @map("account_type") // 组合键
|
||||
baseType String @map("base_type") // 基础类型: OPERATION/PROVINCE/CITY/HEADQUARTERS
|
||||
regionCode String? @map("region_code") // 区域代码
|
||||
name String
|
||||
totalMined Decimal @default(0) @db.Decimal(30, 8) // 总挖到的积分股
|
||||
availableBalance Decimal @default(0) @db.Decimal(30, 8) // 可用余额
|
||||
totalContribution Decimal @default(0) @db.Decimal(30, 8) // 当前算力(从 contribution-service 同步)
|
||||
|
|
@ -80,7 +80,7 @@ model SystemMiningAccount {
|
|||
// 系统账户挖矿记录(分钟级别汇总)
|
||||
model SystemMiningRecord {
|
||||
id String @id @default(uuid())
|
||||
accountType String @map("account_type") @db.VarChar(50) // 组合键
|
||||
accountType String @map("account_type") // 组合键
|
||||
miningMinute DateTime @map("mining_minute")
|
||||
contributionRatio Decimal @db.Decimal(30, 18) @map("contribution_ratio")
|
||||
totalContribution Decimal @db.Decimal(30, 8) @map("total_contribution")
|
||||
|
|
@ -98,7 +98,7 @@ model SystemMiningRecord {
|
|||
// 系统账户交易流水
|
||||
model SystemMiningTransaction {
|
||||
id String @id @default(uuid())
|
||||
accountType String @map("account_type") @db.VarChar(50) // 组合键
|
||||
accountType String @map("account_type") // 组合键
|
||||
type String // MINE, TRANSFER_OUT, ADJUSTMENT
|
||||
amount Decimal @db.Decimal(30, 8)
|
||||
balanceBefore Decimal @db.Decimal(30, 8) @map("balance_before")
|
||||
|
|
|
|||
Loading…
Reference in New Issue