Files
incudal/server/prisma/migrations/20260130200000_add_entertainment_lottery_tables/migration.sql
T
2026-06-20 14:26:29 +08:00

146 lines
5.2 KiB
SQL

-- CreateEnum
CREATE TYPE "PointsLogType" AS ENUM ('convert', 'lottery_win', 'lottery_spend', 'admin_adjust');
-- CreateEnum
CREATE TYPE "LotteryPrizeType" AS ENUM ('nothing', 'points', 'balance', 'instance');
-- CreateEnum
CREATE TYPE "LotteryRecordStatus" AS ENUM ('pending', 'delivered', 'claimed', 'expired');
-- CreateTable
CREATE TABLE "user_points" (
"user_id" INTEGER NOT NULL,
"points" INTEGER NOT NULL DEFAULT 0,
"total_earned" INTEGER NOT NULL DEFAULT 0,
"total_spent" INTEGER NOT NULL DEFAULT 0,
"converted_consume" DECIMAL(10,2) NOT NULL DEFAULT 0,
"last_converted_at" TIMESTAMP(3),
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updated_at" TIMESTAMP(3) NOT NULL,
CONSTRAINT "user_points_pkey" PRIMARY KEY ("user_id")
);
-- CreateTable
CREATE TABLE "points_logs" (
"id" SERIAL NOT NULL,
"user_id" INTEGER NOT NULL,
"type" "PointsLogType" NOT NULL,
"amount" INTEGER NOT NULL,
"points_before" INTEGER NOT NULL,
"points_after" INTEGER NOT NULL,
"related_id" INTEGER,
"remark" TEXT,
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
CONSTRAINT "points_logs_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "lotteries" (
"id" SERIAL NOT NULL,
"name" TEXT NOT NULL,
"description" TEXT,
"cost_points" INTEGER NOT NULL,
"is_active" BOOLEAN NOT NULL DEFAULT true,
"start_at" TIMESTAMP(3),
"end_at" TIMESTAMP(3),
"total_draws" INTEGER NOT NULL DEFAULT 0,
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updated_at" TIMESTAMP(3) NOT NULL,
"created_by" INTEGER NOT NULL,
CONSTRAINT "lotteries_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "lottery_prizes" (
"id" SERIAL NOT NULL,
"lottery_id" INTEGER NOT NULL,
"name" TEXT NOT NULL,
"type" "LotteryPrizeType" NOT NULL,
"value" INTEGER NOT NULL DEFAULT 0,
"probability" DECIMAL(5,2) NOT NULL,
"total_quantity" INTEGER,
"remain_quantity" INTEGER,
"display_order" INTEGER NOT NULL DEFAULT 0,
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"instance_desc" TEXT,
CONSTRAINT "lottery_prizes_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "lottery_records" (
"id" SERIAL NOT NULL,
"lottery_id" INTEGER NOT NULL,
"prize_id" INTEGER NOT NULL,
"user_id" INTEGER NOT NULL,
"prize_type" "LotteryPrizeType" NOT NULL,
"prize_value" INTEGER NOT NULL,
"prize_name" TEXT NOT NULL,
"status" "LotteryRecordStatus" NOT NULL DEFAULT 'delivered',
"points_spent" INTEGER NOT NULL,
"delivered_at" TIMESTAMP(3),
"delivered_by" INTEGER,
"ticket_id" INTEGER,
"notification_sent" BOOLEAN NOT NULL DEFAULT false,
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
CONSTRAINT "lottery_records_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "lottery_notification_configs" (
"id" SERIAL NOT NULL,
"lottery_id" INTEGER NOT NULL,
"enabled" BOOLEAN NOT NULL DEFAULT true,
"type" TEXT NOT NULL,
"config" JSONB NOT NULL,
"notify_balance" BOOLEAN NOT NULL DEFAULT true,
"notify_instance" BOOLEAN NOT NULL DEFAULT true,
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updated_at" TIMESTAMP(3) NOT NULL,
CONSTRAINT "lottery_notification_configs_pkey" PRIMARY KEY ("id")
);
-- CreateIndex
CREATE INDEX "points_logs_user_id_created_at_idx" ON "points_logs"("user_id", "created_at" DESC);
-- CreateIndex
CREATE INDEX "lottery_prizes_lottery_id_idx" ON "lottery_prizes"("lottery_id");
-- CreateIndex
CREATE INDEX "lottery_records_user_id_created_at_idx" ON "lottery_records"("user_id", "created_at" DESC);
-- CreateIndex
CREATE INDEX "lottery_records_lottery_id_idx" ON "lottery_records"("lottery_id");
-- CreateIndex
CREATE INDEX "lottery_records_status_idx" ON "lottery_records"("status");
-- CreateIndex
CREATE UNIQUE INDEX "lottery_notification_configs_lottery_id_key" ON "lottery_notification_configs"("lottery_id");
-- AddForeignKey
ALTER TABLE "user_points" ADD CONSTRAINT "user_points_user_id_fkey" FOREIGN KEY ("user_id") REFERENCES "users"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "points_logs" ADD CONSTRAINT "points_logs_user_id_fkey" FOREIGN KEY ("user_id") REFERENCES "users"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "lottery_prizes" ADD CONSTRAINT "lottery_prizes_lottery_id_fkey" FOREIGN KEY ("lottery_id") REFERENCES "lotteries"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "lottery_records" ADD CONSTRAINT "lottery_records_lottery_id_fkey" FOREIGN KEY ("lottery_id") REFERENCES "lotteries"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "lottery_records" ADD CONSTRAINT "lottery_records_prize_id_fkey" FOREIGN KEY ("prize_id") REFERENCES "lottery_prizes"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "lottery_records" ADD CONSTRAINT "lottery_records_user_id_fkey" FOREIGN KEY ("user_id") REFERENCES "users"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "lottery_notification_configs" ADD CONSTRAINT "lottery_notification_configs_lottery_id_fkey" FOREIGN KEY ("lottery_id") REFERENCES "lotteries"("id") ON DELETE CASCADE ON UPDATE CASCADE;