Add Democratic fundraising platform.
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -0,0 +1,33 @@
|
||||
-- AlterEnum
|
||||
ALTER TYPE "LedgerType" ADD VALUE 'DEBIT_POLL_VOTE';
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "PollVote" (
|
||||
"id" TEXT NOT NULL,
|
||||
"pollSlug" TEXT NOT NULL,
|
||||
"userId" TEXT NOT NULL,
|
||||
"displayName" TEXT NOT NULL,
|
||||
"normalizedKey" TEXT NOT NULL,
|
||||
"creditsSpent" INTEGER NOT NULL,
|
||||
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
|
||||
CONSTRAINT "PollVote_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateIndex
|
||||
CREATE UNIQUE INDEX "PollVote_pollSlug_userId_key" ON "PollVote"("pollSlug", "userId");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "PollVote_pollSlug_normalizedKey_idx" ON "PollVote"("pollSlug", "normalizedKey");
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "PollVote" ADD CONSTRAINT "PollVote_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
||||
|
||||
-- AlterTable
|
||||
ALTER TABLE "LedgerEntry" ADD COLUMN "pollVoteId" TEXT;
|
||||
|
||||
-- CreateIndex
|
||||
CREATE UNIQUE INDEX "LedgerEntry_pollVoteId_key" ON "LedgerEntry"("pollVoteId");
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "LedgerEntry" ADD CONSTRAINT "LedgerEntry_pollVoteId_fkey" FOREIGN KEY ("pollVoteId") REFERENCES "PollVote"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
||||
@@ -0,0 +1,8 @@
|
||||
-- AlterTable
|
||||
ALTER TABLE "LedgerEntry" ADD COLUMN "raffleEntryId" TEXT;
|
||||
|
||||
-- CreateIndex
|
||||
CREATE UNIQUE INDEX "LedgerEntry_raffleEntryId_key" ON "LedgerEntry"("raffleEntryId");
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "LedgerEntry" ADD CONSTRAINT "LedgerEntry_raffleEntryId_fkey" FOREIGN KEY ("raffleEntryId") REFERENCES "RaffleEntry"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
||||
@@ -0,0 +1,9 @@
|
||||
-- AlterTable: guest donations + optional donor contact (CRM / disclosure tooling)
|
||||
ALTER TABLE "Donation" DROP CONSTRAINT IF EXISTS "Donation_userId_fkey";
|
||||
|
||||
ALTER TABLE "Donation" ALTER COLUMN "userId" DROP NOT NULL;
|
||||
|
||||
ALTER TABLE "Donation" ADD COLUMN "donorEmail" TEXT;
|
||||
ALTER TABLE "Donation" ADD COLUMN "donorName" TEXT;
|
||||
|
||||
ALTER TABLE "Donation" ADD CONSTRAINT "Donation_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
||||
95
prisma/migrations/20260510220000_casino_games/migration.sql
Normal file
95
prisma/migrations/20260510220000_casino_games/migration.sql
Normal file
@@ -0,0 +1,95 @@
|
||||
-- AlterEnum
|
||||
ALTER TYPE "LedgerType" ADD VALUE 'DEBIT_GAME_BET';
|
||||
ALTER TYPE "LedgerType" ADD VALUE 'CREDIT_GAME_WIN';
|
||||
ALTER TYPE "LedgerType" ADD VALUE 'CREDIT_GAME_REFUND';
|
||||
|
||||
-- CreateEnum
|
||||
CREATE TYPE "GameType" AS ENUM ('CRASH', 'DICE', 'MINES', 'TOWER', 'SLOTS', 'BLACKJACK', 'ROULETTE', 'COIN_FLIP', 'PONG', 'PREDICTION');
|
||||
|
||||
-- CreateEnum
|
||||
CREATE TYPE "RoomStatus" AS ENUM ('WAITING', 'ACTIVE', 'RESOLVED', 'EXPIRED');
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "GameSession" (
|
||||
"id" TEXT NOT NULL,
|
||||
"userId" TEXT NOT NULL,
|
||||
"gameType" "GameType" NOT NULL,
|
||||
"wageredBLW" INTEGER NOT NULL,
|
||||
"payoutBLW" INTEGER NOT NULL DEFAULT 0,
|
||||
"multiplier" DOUBLE PRECISION NOT NULL DEFAULT 0,
|
||||
"outcome" TEXT NOT NULL,
|
||||
"serverSeed" TEXT NOT NULL,
|
||||
"clientSeed" TEXT,
|
||||
"resultData" JSONB,
|
||||
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
|
||||
CONSTRAINT "GameSession_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "GameSession_userId_idx" ON "GameSession"("userId");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "GameSession_userId_gameType_idx" ON "GameSession"("userId", "gameType");
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "GameSession" ADD CONSTRAINT "GameSession_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "GameRoom" (
|
||||
"id" TEXT NOT NULL,
|
||||
"gameType" "GameType" NOT NULL,
|
||||
"creatorId" TEXT NOT NULL,
|
||||
"joinerId" TEXT,
|
||||
"wageBLW" INTEGER NOT NULL,
|
||||
"status" "RoomStatus" NOT NULL DEFAULT 'WAITING',
|
||||
"resultData" JSONB,
|
||||
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"expiresAt" TIMESTAMP(3) NOT NULL,
|
||||
|
||||
CONSTRAINT "GameRoom_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "GameRoom_status_idx" ON "GameRoom"("status");
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "PredictionMarket" (
|
||||
"id" TEXT NOT NULL,
|
||||
"creatorId" TEXT NOT NULL,
|
||||
"question" TEXT NOT NULL,
|
||||
"endsAt" TIMESTAMP(3) NOT NULL,
|
||||
"resolvedTo" BOOLEAN,
|
||||
"totalYes" INTEGER NOT NULL DEFAULT 0,
|
||||
"totalNo" INTEGER NOT NULL DEFAULT 0,
|
||||
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
|
||||
CONSTRAINT "PredictionMarket_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "PredictionMarket_endsAt_idx" ON "PredictionMarket"("endsAt");
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "PredictionBet" (
|
||||
"id" TEXT NOT NULL,
|
||||
"marketId" TEXT NOT NULL,
|
||||
"userId" TEXT NOT NULL,
|
||||
"side" BOOLEAN NOT NULL,
|
||||
"blwAmount" INTEGER NOT NULL,
|
||||
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
|
||||
CONSTRAINT "PredictionBet_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "PredictionBet_marketId_idx" ON "PredictionBet"("marketId");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "PredictionBet_userId_idx" ON "PredictionBet"("userId");
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "PredictionBet" ADD CONSTRAINT "PredictionBet_marketId_fkey" FOREIGN KEY ("marketId") REFERENCES "PredictionMarket"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "PredictionBet" ADD CONSTRAINT "PredictionBet_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
||||
33
prisma/migrations/20260510230000_mission_spend/migration.sql
Normal file
33
prisma/migrations/20260510230000_mission_spend/migration.sql
Normal file
@@ -0,0 +1,33 @@
|
||||
-- AlterEnum
|
||||
ALTER TYPE "LedgerType" ADD VALUE 'DEBIT_MISSION_SPEND';
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "MissionSpend" (
|
||||
"id" TEXT NOT NULL,
|
||||
"userId" TEXT NOT NULL,
|
||||
"missionSlug" TEXT NOT NULL,
|
||||
"missionTitle" TEXT NOT NULL,
|
||||
"creditsSpent" INTEGER NOT NULL,
|
||||
"supporterNote" TEXT,
|
||||
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
|
||||
CONSTRAINT "MissionSpend_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "MissionSpend_userId_idx" ON "MissionSpend"("userId");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "MissionSpend_missionSlug_idx" ON "MissionSpend"("missionSlug");
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "MissionSpend" ADD CONSTRAINT "MissionSpend_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
||||
|
||||
-- AlterTable
|
||||
ALTER TABLE "LedgerEntry" ADD COLUMN "missionSpendId" TEXT;
|
||||
|
||||
-- CreateIndex
|
||||
CREATE UNIQUE INDEX "LedgerEntry_missionSpendId_key" ON "LedgerEntry"("missionSpendId");
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "LedgerEntry" ADD CONSTRAINT "LedgerEntry_missionSpendId_fkey" FOREIGN KEY ("missionSpendId") REFERENCES "MissionSpend"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
||||
@@ -0,0 +1,15 @@
|
||||
-- Official platform priorities + nullable creator for community rows (one non-null creatorId still unique)
|
||||
|
||||
CREATE TYPE "DemocraticInitiativeOrigin" AS ENUM ('PLATFORM', 'COMMUNITY');
|
||||
|
||||
ALTER TABLE "DemocraticInitiative" DROP CONSTRAINT IF EXISTS "DemocraticInitiative_creatorId_key";
|
||||
|
||||
ALTER TABLE "DemocraticInitiative" ADD COLUMN "origin" "DemocraticInitiativeOrigin" NOT NULL DEFAULT 'COMMUNITY';
|
||||
ALTER TABLE "DemocraticInitiative" ADD COLUMN "sortOrder" INTEGER NOT NULL DEFAULT 0;
|
||||
|
||||
ALTER TABLE "DemocraticInitiative" ALTER COLUMN "creatorId" DROP NOT NULL;
|
||||
|
||||
CREATE UNIQUE INDEX "DemocraticInitiative_creatorId_key" ON "DemocraticInitiative"("creatorId");
|
||||
|
||||
CREATE INDEX "DemocraticInitiative_origin_sortOrder_idx" ON "DemocraticInitiative"("origin", "sortOrder");
|
||||
CREATE INDEX "DemocraticInitiative_origin_createdAt_idx" ON "DemocraticInitiative"("origin", "createdAt");
|
||||
26
prisma/migrations/20260515210000_user_username/migration.sql
Normal file
26
prisma/migrations/20260515210000_user_username/migration.sql
Normal file
@@ -0,0 +1,26 @@
|
||||
-- Add optional username column, backfill, then constrain.
|
||||
ALTER TABLE "User" ADD COLUMN "username" TEXT;
|
||||
|
||||
UPDATE "User"
|
||||
SET "username" =
|
||||
LEFT(
|
||||
COALESCE(
|
||||
NULLIF(
|
||||
regexp_replace(
|
||||
lower(trim(split_part("email", '@', 1))),
|
||||
'[^a-z0-9_]',
|
||||
'_',
|
||||
'g'
|
||||
),
|
||||
''
|
||||
),
|
||||
'supporter'
|
||||
),
|
||||
23
|
||||
)
|
||||
|| '_'
|
||||
|| right(replace("id", '-', ''), 8);
|
||||
|
||||
ALTER TABLE "User" ALTER COLUMN "username" SET NOT NULL;
|
||||
|
||||
CREATE UNIQUE INDEX "User_username_key" ON "User" ("username");
|
||||
Reference in New Issue
Block a user