91 lines
2.9 KiB
SQL
91 lines
2.9 KiB
SQL
-- CreateEnum
|
|
CREATE TYPE "Role" AS ENUM ('USER', 'ADMIN');
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "User" (
|
|
"id" TEXT NOT NULL,
|
|
"email" TEXT NOT NULL,
|
|
"name" TEXT,
|
|
"role" "Role" NOT NULL DEFAULT 'USER',
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" TIMESTAMP(3) NOT NULL,
|
|
|
|
CONSTRAINT "User_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "Listing" (
|
|
"id" TEXT NOT NULL,
|
|
"ownerId" TEXT NOT NULL,
|
|
"country" TEXT NOT NULL,
|
|
"region" TEXT NOT NULL,
|
|
"city" TEXT NOT NULL,
|
|
"addressNote" TEXT,
|
|
"latitude" DOUBLE PRECISION,
|
|
"longitude" DOUBLE PRECISION,
|
|
"maxGuests" INTEGER NOT NULL,
|
|
"bedrooms" INTEGER NOT NULL,
|
|
"beds" INTEGER NOT NULL,
|
|
"bathrooms" INTEGER NOT NULL,
|
|
"hasSauna" BOOLEAN NOT NULL DEFAULT false,
|
|
"hasFireplace" BOOLEAN NOT NULL DEFAULT false,
|
|
"hasWifi" BOOLEAN NOT NULL DEFAULT false,
|
|
"petsAllowed" BOOLEAN NOT NULL DEFAULT false,
|
|
"byTheLake" BOOLEAN NOT NULL DEFAULT false,
|
|
"priceHintPerNightCents" INTEGER,
|
|
"contactName" TEXT NOT NULL,
|
|
"contactEmail" TEXT NOT NULL,
|
|
"contactPhone" TEXT,
|
|
"externalUrl" TEXT,
|
|
"published" BOOLEAN NOT NULL DEFAULT true,
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" TIMESTAMP(3) NOT NULL,
|
|
|
|
CONSTRAINT "Listing_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "ListingTranslation" (
|
|
"id" TEXT NOT NULL,
|
|
"listingId" TEXT NOT NULL,
|
|
"locale" TEXT NOT NULL,
|
|
"title" TEXT NOT NULL,
|
|
"slug" TEXT NOT NULL,
|
|
"description" TEXT NOT NULL,
|
|
"teaser" TEXT,
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" TIMESTAMP(3) NOT NULL,
|
|
|
|
CONSTRAINT "ListingTranslation_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "ListingImage" (
|
|
"id" TEXT NOT NULL,
|
|
"listingId" TEXT NOT NULL,
|
|
"url" TEXT NOT NULL,
|
|
"altText" TEXT,
|
|
"order" INTEGER NOT NULL DEFAULT 0,
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" TIMESTAMP(3) NOT NULL,
|
|
|
|
CONSTRAINT "ListingImage_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "User_email_key" ON "User"("email");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "ListingTranslation_listingId_locale_key" ON "ListingTranslation"("listingId", "locale");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "ListingTranslation_slug_locale_key" ON "ListingTranslation"("slug", "locale");
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "Listing" ADD CONSTRAINT "Listing_ownerId_fkey" FOREIGN KEY ("ownerId") REFERENCES "User"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "ListingTranslation" ADD CONSTRAINT "ListingTranslation_listingId_fkey" FOREIGN KEY ("listingId") REFERENCES "Listing"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "ListingImage" ADD CONSTRAINT "ListingImage_listingId_fkey" FOREIGN KEY ("listingId") REFERENCES "Listing"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|