mirror of
https://github.com/pacnpal/thrillwiki_django_no_react.git
synced 2025-12-21 10:31:09 -05:00
117 lines
4.1 KiB
SQL
117 lines
4.1 KiB
SQL
-- CreateExtension
|
|
CREATE EXTENSION IF NOT EXISTS "postgis";
|
|
|
|
-- CreateEnum
|
|
CREATE TYPE "ParkStatus" AS ENUM ('OPERATING', 'CLOSED_TEMP', 'CLOSED_PERM', 'UNDER_CONSTRUCTION', 'DEMOLISHED', 'RELOCATED');
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "User" (
|
|
"id" SERIAL PRIMARY KEY,
|
|
"email" TEXT NOT NULL,
|
|
"username" TEXT NOT NULL,
|
|
"password" TEXT,
|
|
"dateJoined" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"isActive" BOOLEAN NOT NULL DEFAULT true,
|
|
"isStaff" BOOLEAN NOT NULL DEFAULT false,
|
|
"isSuperuser" BOOLEAN NOT NULL DEFAULT false,
|
|
"lastLogin" TIMESTAMP(3)
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "Park" (
|
|
"id" SERIAL PRIMARY KEY,
|
|
"name" TEXT NOT NULL,
|
|
"slug" TEXT NOT NULL,
|
|
"description" TEXT,
|
|
"status" "ParkStatus" NOT NULL DEFAULT 'OPERATING',
|
|
"location" JSONB,
|
|
"opening_date" DATE,
|
|
"closing_date" DATE,
|
|
"operating_season" TEXT,
|
|
"size_acres" DECIMAL(10,2),
|
|
"website" TEXT,
|
|
"average_rating" DECIMAL(3,2),
|
|
"ride_count" INTEGER,
|
|
"coaster_count" INTEGER,
|
|
"creatorId" INTEGER,
|
|
"ownerId" INTEGER,
|
|
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updated_at" TIMESTAMP(3) NOT NULL
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "ParkArea" (
|
|
"id" SERIAL PRIMARY KEY,
|
|
"name" TEXT NOT NULL,
|
|
"slug" TEXT NOT NULL,
|
|
"description" TEXT,
|
|
"opening_date" DATE,
|
|
"closing_date" DATE,
|
|
"parkId" INTEGER NOT NULL,
|
|
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updated_at" TIMESTAMP(3) NOT NULL
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "Company" (
|
|
"id" SERIAL PRIMARY KEY,
|
|
"name" TEXT NOT NULL,
|
|
"website" TEXT,
|
|
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updated_at" TIMESTAMP(3) NOT NULL
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "Review" (
|
|
"id" SERIAL PRIMARY KEY,
|
|
"content" TEXT NOT NULL,
|
|
"rating" INTEGER NOT NULL,
|
|
"parkId" INTEGER NOT NULL,
|
|
"userId" INTEGER NOT NULL,
|
|
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updated_at" TIMESTAMP(3) NOT NULL
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "Photo" (
|
|
"id" SERIAL PRIMARY KEY,
|
|
"url" TEXT NOT NULL,
|
|
"caption" TEXT,
|
|
"parkId" INTEGER,
|
|
"reviewId" INTEGER,
|
|
"userId" INTEGER NOT NULL,
|
|
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updated_at" TIMESTAMP(3) NOT NULL
|
|
);
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "User_email_key" ON "User"("email");
|
|
CREATE UNIQUE INDEX "User_username_key" ON "User"("username");
|
|
CREATE UNIQUE INDEX "Park_slug_key" ON "Park"("slug");
|
|
CREATE UNIQUE INDEX "ParkArea_parkId_slug_key" ON "ParkArea"("parkId", "slug");
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "Park" ADD CONSTRAINT "Park_creatorId_fkey" FOREIGN KEY ("creatorId") REFERENCES "User"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
|
ALTER TABLE "Park" ADD CONSTRAINT "Park_ownerId_fkey" FOREIGN KEY ("ownerId") REFERENCES "Company"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "ParkArea" ADD CONSTRAINT "ParkArea_parkId_fkey" FOREIGN KEY ("parkId") REFERENCES "Park"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "Review" ADD CONSTRAINT "Review_parkId_fkey" FOREIGN KEY ("parkId") REFERENCES "Park"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
|
ALTER TABLE "Review" ADD CONSTRAINT "Review_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "Photo" ADD CONSTRAINT "Photo_parkId_fkey" FOREIGN KEY ("parkId") REFERENCES "Park"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
|
ALTER TABLE "Photo" ADD CONSTRAINT "Photo_reviewId_fkey" FOREIGN KEY ("reviewId") REFERENCES "Review"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
|
ALTER TABLE "Photo" ADD CONSTRAINT "Photo_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "Park_slug_idx" ON "Park"("slug");
|
|
CREATE INDEX "ParkArea_slug_idx" ON "ParkArea"("slug");
|
|
CREATE INDEX "Review_parkId_idx" ON "Review"("parkId");
|
|
CREATE INDEX "Review_userId_idx" ON "Review"("userId");
|
|
CREATE INDEX "Photo_parkId_idx" ON "Photo"("parkId");
|
|
CREATE INDEX "Photo_reviewId_idx" ON "Photo"("reviewId");
|
|
CREATE INDEX "Photo_userId_idx" ON "Photo"("userId");
|