109 lines
3.4 KiB
MySQL
109 lines
3.4 KiB
MySQL
|
-- CreateEnum
|
||
|
CREATE TYPE "MoneyUpdateType" AS ENUM ('START', 'WIN_CHALLENGE', 'BUY_TRAIN');
|
||
|
|
||
|
-- CreateTable
|
||
|
CREATE TABLE "User" (
|
||
|
"id" SERIAL NOT NULL,
|
||
|
"name" TEXT NOT NULL,
|
||
|
"money" INTEGER NOT NULL DEFAULT 0,
|
||
|
"currentRunner" BOOLEAN NOT NULL DEFAULT false,
|
||
|
|
||
|
CONSTRAINT "User_pkey" PRIMARY KEY ("id")
|
||
|
);
|
||
|
|
||
|
-- CreateTable
|
||
|
CREATE TABLE "Geolocation" (
|
||
|
"id" SERIAL NOT NULL,
|
||
|
"userId" INTEGER NOT NULL,
|
||
|
"longitude" DOUBLE PRECISION NOT NULL,
|
||
|
"latitude" DOUBLE PRECISION NOT NULL,
|
||
|
"timestamp" TIMESTAMP(3) NOT NULL,
|
||
|
|
||
|
CONSTRAINT "Geolocation_pkey" PRIMARY KEY ("id")
|
||
|
);
|
||
|
|
||
|
-- CreateTable
|
||
|
CREATE TABLE "Challenge" (
|
||
|
"id" SERIAL NOT NULL,
|
||
|
"title" TEXT NOT NULL,
|
||
|
"description" TEXT NOT NULL,
|
||
|
"reward" INTEGER NOT NULL,
|
||
|
|
||
|
CONSTRAINT "Challenge_pkey" PRIMARY KEY ("id")
|
||
|
);
|
||
|
|
||
|
-- CreateTable
|
||
|
CREATE TABLE "ChallengeAction" (
|
||
|
"id" SERIAL NOT NULL,
|
||
|
"userId" INTEGER NOT NULL,
|
||
|
"challengeId" INTEGER NOT NULL,
|
||
|
"active" BOOLEAN NOT NULL DEFAULT false,
|
||
|
"success" BOOLEAN NOT NULL DEFAULT false,
|
||
|
|
||
|
CONSTRAINT "ChallengeAction_pkey" PRIMARY KEY ("id")
|
||
|
);
|
||
|
|
||
|
-- CreateTable
|
||
|
CREATE TABLE "TrainTrip" (
|
||
|
"id" TEXT NOT NULL,
|
||
|
"userId" INTEGER NOT NULL,
|
||
|
"distance" DOUBLE PRECISION NOT NULL,
|
||
|
"from" TEXT NOT NULL,
|
||
|
"to" TEXT NOT NULL,
|
||
|
"departureTime" TIMESTAMP(3) NOT NULL,
|
||
|
"arrivalTime" TIMESTAMP(3) NOT NULL,
|
||
|
"infoJson" JSONB NOT NULL,
|
||
|
"geometry" TEXT NOT NULL,
|
||
|
|
||
|
CONSTRAINT "TrainTrip_pkey" PRIMARY KEY ("id")
|
||
|
);
|
||
|
|
||
|
-- CreateTable
|
||
|
CREATE TABLE "MoneyUpdate" (
|
||
|
"id" SERIAL NOT NULL,
|
||
|
"userId" INTEGER NOT NULL,
|
||
|
"before" INTEGER NOT NULL,
|
||
|
"after" INTEGER NOT NULL,
|
||
|
"reason" "MoneyUpdateType" NOT NULL,
|
||
|
"actionId" INTEGER,
|
||
|
"tripId" TEXT,
|
||
|
|
||
|
CONSTRAINT "MoneyUpdate_pkey" PRIMARY KEY ("id")
|
||
|
);
|
||
|
|
||
|
-- CreateIndex
|
||
|
CREATE UNIQUE INDEX "User_name_key" ON "User"("name");
|
||
|
|
||
|
-- CreateIndex
|
||
|
CREATE UNIQUE INDEX "Challenge_title_key" ON "Challenge"("title");
|
||
|
|
||
|
-- CreateIndex
|
||
|
CREATE UNIQUE INDEX "ChallengeAction_challengeId_key" ON "ChallengeAction"("challengeId");
|
||
|
|
||
|
-- CreateIndex
|
||
|
CREATE UNIQUE INDEX "MoneyUpdate_actionId_key" ON "MoneyUpdate"("actionId");
|
||
|
|
||
|
-- CreateIndex
|
||
|
CREATE UNIQUE INDEX "MoneyUpdate_tripId_key" ON "MoneyUpdate"("tripId");
|
||
|
|
||
|
-- AddForeignKey
|
||
|
ALTER TABLE "Geolocation" ADD CONSTRAINT "Geolocation_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
||
|
|
||
|
-- AddForeignKey
|
||
|
ALTER TABLE "ChallengeAction" ADD CONSTRAINT "ChallengeAction_challengeId_fkey" FOREIGN KEY ("challengeId") REFERENCES "Challenge"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
||
|
|
||
|
-- AddForeignKey
|
||
|
ALTER TABLE "ChallengeAction" ADD CONSTRAINT "ChallengeAction_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
||
|
|
||
|
-- AddForeignKey
|
||
|
ALTER TABLE "TrainTrip" ADD CONSTRAINT "TrainTrip_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
||
|
|
||
|
-- AddForeignKey
|
||
|
ALTER TABLE "MoneyUpdate" ADD CONSTRAINT "MoneyUpdate_actionId_fkey" FOREIGN KEY ("actionId") REFERENCES "ChallengeAction"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
||
|
|
||
|
-- AddForeignKey
|
||
|
ALTER TABLE "MoneyUpdate" ADD CONSTRAINT "MoneyUpdate_tripId_fkey" FOREIGN KEY ("tripId") REFERENCES "TrainTrip"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
||
|
|
||
|
-- AddForeignKey
|
||
|
ALTER TABLE "MoneyUpdate" ADD CONSTRAINT "MoneyUpdate_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|