feat(leaderboard-service): 添加 Prisma 初始 migration
- 创建 leaderboard_rankings 表 - 创建 leaderboard_configs 表 - 创建 virtual_accounts 表 - 创建 virtual_ranking_entries 表 - 创建 leaderboard_snapshots 表 - 创建 virtual_account_transactions 表 - 创建 leaderboard_events 表 - 插入默认配置数据 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
parent
bb989bd80f
commit
4bd25d4e3c
|
|
@ -0,0 +1,192 @@
|
|||
-- CreateTable
|
||||
CREATE TABLE "leaderboard_rankings" (
|
||||
"ranking_id" BIGSERIAL NOT NULL,
|
||||
"leaderboard_type" VARCHAR(30) NOT NULL,
|
||||
"period_key" VARCHAR(20) NOT NULL,
|
||||
"user_id" BIGINT NOT NULL,
|
||||
"is_virtual" BOOLEAN NOT NULL DEFAULT false,
|
||||
"rank_position" INTEGER NOT NULL,
|
||||
"display_position" INTEGER NOT NULL,
|
||||
"previous_rank" INTEGER,
|
||||
"total_team_planting" INTEGER NOT NULL DEFAULT 0,
|
||||
"max_direct_team_planting" INTEGER NOT NULL DEFAULT 0,
|
||||
"effective_score" INTEGER NOT NULL DEFAULT 0,
|
||||
"user_snapshot" JSONB NOT NULL,
|
||||
"period_start_at" TIMESTAMP(3) NOT NULL,
|
||||
"period_end_at" TIMESTAMP(3) NOT NULL,
|
||||
"calculated_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
|
||||
CONSTRAINT "leaderboard_rankings_pkey" PRIMARY KEY ("ranking_id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "leaderboard_configs" (
|
||||
"config_id" BIGSERIAL NOT NULL,
|
||||
"config_key" VARCHAR(50) NOT NULL,
|
||||
"daily_enabled" BOOLEAN NOT NULL DEFAULT true,
|
||||
"weekly_enabled" BOOLEAN NOT NULL DEFAULT true,
|
||||
"monthly_enabled" BOOLEAN NOT NULL DEFAULT true,
|
||||
"virtual_ranking_enabled" BOOLEAN NOT NULL DEFAULT false,
|
||||
"virtual_account_count" INTEGER NOT NULL DEFAULT 0,
|
||||
"display_limit" INTEGER NOT NULL DEFAULT 30,
|
||||
"refresh_interval_minutes" INTEGER NOT NULL DEFAULT 5,
|
||||
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"updated_at" TIMESTAMP(3) NOT NULL,
|
||||
|
||||
CONSTRAINT "leaderboard_configs_pkey" PRIMARY KEY ("config_id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "virtual_accounts" (
|
||||
"virtual_account_id" BIGSERIAL NOT NULL,
|
||||
"account_type" VARCHAR(30) NOT NULL,
|
||||
"display_name" VARCHAR(100) NOT NULL,
|
||||
"avatar" VARCHAR(255),
|
||||
"province_code" VARCHAR(10),
|
||||
"city_code" VARCHAR(10),
|
||||
"min_score" INTEGER,
|
||||
"max_score" INTEGER,
|
||||
"current_score" INTEGER NOT NULL DEFAULT 0,
|
||||
"usdt_balance" DECIMAL(20,8) NOT NULL DEFAULT 0,
|
||||
"hashpower_balance" DECIMAL(20,8) NOT NULL DEFAULT 0,
|
||||
"is_active" BOOLEAN NOT NULL DEFAULT true,
|
||||
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"updated_at" TIMESTAMP(3) NOT NULL,
|
||||
|
||||
CONSTRAINT "virtual_accounts_pkey" PRIMARY KEY ("virtual_account_id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "virtual_ranking_entries" (
|
||||
"entry_id" BIGSERIAL NOT NULL,
|
||||
"virtual_account_id" BIGINT NOT NULL,
|
||||
"leaderboard_type" VARCHAR(30) NOT NULL,
|
||||
"period_key" VARCHAR(20) NOT NULL,
|
||||
"display_position" INTEGER NOT NULL,
|
||||
"generated_score" INTEGER NOT NULL,
|
||||
"display_name" VARCHAR(100) NOT NULL,
|
||||
"avatar" VARCHAR(255),
|
||||
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
|
||||
CONSTRAINT "virtual_ranking_entries_pkey" PRIMARY KEY ("entry_id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "leaderboard_snapshots" (
|
||||
"snapshot_id" BIGSERIAL NOT NULL,
|
||||
"leaderboard_type" VARCHAR(30) NOT NULL,
|
||||
"period_key" VARCHAR(20) NOT NULL,
|
||||
"rankings_data" JSONB NOT NULL,
|
||||
"total_participants" INTEGER NOT NULL,
|
||||
"top_score" INTEGER NOT NULL,
|
||||
"average_score" INTEGER NOT NULL,
|
||||
"period_start_at" TIMESTAMP(3) NOT NULL,
|
||||
"period_end_at" TIMESTAMP(3) NOT NULL,
|
||||
"snapshot_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
|
||||
CONSTRAINT "leaderboard_snapshots_pkey" PRIMARY KEY ("snapshot_id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "virtual_account_transactions" (
|
||||
"transaction_id" BIGSERIAL NOT NULL,
|
||||
"virtual_account_id" BIGINT NOT NULL,
|
||||
"transaction_type" VARCHAR(30) NOT NULL,
|
||||
"amount" DECIMAL(20,8) NOT NULL,
|
||||
"currency" VARCHAR(10) NOT NULL,
|
||||
"source_type" VARCHAR(50),
|
||||
"source_id" VARCHAR(100),
|
||||
"source_user_id" BIGINT,
|
||||
"memo" VARCHAR(500),
|
||||
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
|
||||
CONSTRAINT "virtual_account_transactions_pkey" PRIMARY KEY ("transaction_id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "leaderboard_events" (
|
||||
"event_id" BIGSERIAL NOT NULL,
|
||||
"event_type" VARCHAR(50) NOT NULL,
|
||||
"aggregate_id" VARCHAR(100) NOT NULL,
|
||||
"aggregate_type" VARCHAR(50) NOT NULL,
|
||||
"event_data" JSONB NOT NULL,
|
||||
"user_id" BIGINT,
|
||||
"occurred_at" TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"version" INTEGER NOT NULL DEFAULT 1,
|
||||
|
||||
CONSTRAINT "leaderboard_events_pkey" PRIMARY KEY ("event_id")
|
||||
);
|
||||
|
||||
-- CreateIndex
|
||||
CREATE UNIQUE INDEX "uk_type_period_user" ON "leaderboard_rankings"("leaderboard_type", "period_key", "user_id");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "idx_display_rank" ON "leaderboard_rankings"("leaderboard_type", "period_key", "display_position");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "idx_score" ON "leaderboard_rankings"("leaderboard_type", "period_key", "effective_score" DESC);
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "idx_ranking_user" ON "leaderboard_rankings"("user_id");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "idx_period" ON "leaderboard_rankings"("period_key");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "idx_virtual" ON "leaderboard_rankings"("is_virtual");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE UNIQUE INDEX "leaderboard_configs_config_key_key" ON "leaderboard_configs"("config_key");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "idx_va_type" ON "virtual_accounts"("account_type");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "idx_va_province" ON "virtual_accounts"("province_code");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "idx_va_city" ON "virtual_accounts"("city_code");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "idx_va_active" ON "virtual_accounts"("is_active");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE UNIQUE INDEX "uk_vr_type_period_pos" ON "virtual_ranking_entries"("leaderboard_type", "period_key", "display_position");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "idx_vr_va" ON "virtual_ranking_entries"("virtual_account_id");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "idx_vr_type_period" ON "virtual_ranking_entries"("leaderboard_type", "period_key");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE UNIQUE INDEX "uk_snapshot_type_period" ON "leaderboard_snapshots"("leaderboard_type", "period_key");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "idx_snapshot_type" ON "leaderboard_snapshots"("leaderboard_type");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "idx_snapshot_period" ON "leaderboard_snapshots"("period_key");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "idx_vat_account" ON "virtual_account_transactions"("virtual_account_id");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "idx_vat_type" ON "virtual_account_transactions"("transaction_type");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "idx_vat_created" ON "virtual_account_transactions"("created_at" DESC);
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "idx_lb_event_aggregate" ON "leaderboard_events"("aggregate_type", "aggregate_id");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "idx_lb_event_type" ON "leaderboard_events"("event_type");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "idx_lb_event_occurred" ON "leaderboard_events"("occurred_at");
|
||||
|
||||
-- Insert default config
|
||||
INSERT INTO "leaderboard_configs" ("config_key", "daily_enabled", "weekly_enabled", "monthly_enabled", "virtual_ranking_enabled", "virtual_account_count", "display_limit", "refresh_interval_minutes", "updated_at")
|
||||
VALUES ('GLOBAL', true, true, true, false, 0, 30, 5, CURRENT_TIMESTAMP);
|
||||
Loading…
Reference in New Issue