116 lines
3.6 KiB
SQL
116 lines
3.6 KiB
SQL
-- CreateTable
|
|
CREATE TABLE "User" (
|
|
"id" TEXT NOT NULL,
|
|
"email" TEXT NOT NULL,
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
|
|
CONSTRAINT "User_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "VariableCategory" (
|
|
"id" TEXT NOT NULL,
|
|
"userId" TEXT NOT NULL,
|
|
"name" TEXT NOT NULL,
|
|
"percent" INTEGER NOT NULL,
|
|
"priority" INTEGER NOT NULL DEFAULT 100,
|
|
"isSavings" BOOLEAN NOT NULL DEFAULT false,
|
|
"balanceCents" BIGINT NOT NULL DEFAULT 0,
|
|
|
|
CONSTRAINT "VariableCategory_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "FixedPlan" (
|
|
"id" TEXT NOT NULL,
|
|
"userId" TEXT NOT NULL,
|
|
"name" TEXT NOT NULL,
|
|
"cycleStart" TIMESTAMP(3) NOT NULL,
|
|
"dueOn" TIMESTAMP(3) NOT NULL,
|
|
"totalCents" BIGINT NOT NULL,
|
|
"fundedCents" BIGINT NOT NULL DEFAULT 0,
|
|
"priority" INTEGER NOT NULL DEFAULT 100,
|
|
"fundingMode" TEXT NOT NULL DEFAULT 'auto-on-deposit',
|
|
"scheduleJson" JSONB,
|
|
|
|
CONSTRAINT "FixedPlan_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "IncomeEvent" (
|
|
"id" TEXT NOT NULL,
|
|
"userId" TEXT NOT NULL,
|
|
"postedAt" TIMESTAMP(3) NOT NULL,
|
|
"amountCents" BIGINT NOT NULL,
|
|
|
|
CONSTRAINT "IncomeEvent_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "Allocation" (
|
|
"id" TEXT NOT NULL,
|
|
"userId" TEXT NOT NULL,
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"kind" TEXT NOT NULL,
|
|
"toId" TEXT NOT NULL,
|
|
"amountCents" BIGINT NOT NULL,
|
|
"incomeId" TEXT,
|
|
|
|
CONSTRAINT "Allocation_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "Transaction" (
|
|
"id" TEXT NOT NULL,
|
|
"userId" TEXT NOT NULL,
|
|
"occurredAt" TIMESTAMP(3) NOT NULL,
|
|
"kind" TEXT NOT NULL,
|
|
"categoryId" TEXT,
|
|
"planId" TEXT,
|
|
"amountCents" BIGINT NOT NULL,
|
|
|
|
CONSTRAINT "Transaction_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "User_email_key" ON "User"("email");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "VariableCategory_userId_priority_idx" ON "VariableCategory"("userId", "priority");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "VariableCategory_userId_name_key" ON "VariableCategory"("userId", "name");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "FixedPlan_userId_dueOn_idx" ON "FixedPlan"("userId", "dueOn");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "FixedPlan_userId_priority_idx" ON "FixedPlan"("userId", "priority");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "FixedPlan_userId_name_key" ON "FixedPlan"("userId", "name");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "IncomeEvent_userId_postedAt_idx" ON "IncomeEvent"("userId", "postedAt");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "Transaction_userId_occurredAt_idx" ON "Transaction"("userId", "occurredAt");
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "VariableCategory" ADD CONSTRAINT "VariableCategory_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "FixedPlan" ADD CONSTRAINT "FixedPlan_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "IncomeEvent" ADD CONSTRAINT "IncomeEvent_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "Allocation" ADD CONSTRAINT "Allocation_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "Allocation" ADD CONSTRAINT "Allocation_incomeId_fkey" FOREIGN KEY ("incomeId") REFERENCES "IncomeEvent"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "Transaction" ADD CONSTRAINT "Transaction_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|