From 39d6e48083ffe37e86abaf0870823cddbc5f36ba Mon Sep 17 00:00:00 2001 From: KMKoushik Date: Sun, 21 Apr 2024 08:38:10 +1000 Subject: [PATCH] Add migration --- .../20240420223207_init/migration.sql | 199 ++++++++++++++++++ .../web/prisma/migrations/migration_lock.toml | 3 + 2 files changed, 202 insertions(+) create mode 100644 apps/web/prisma/migrations/20240420223207_init/migration.sql create mode 100644 apps/web/prisma/migrations/migration_lock.toml diff --git a/apps/web/prisma/migrations/20240420223207_init/migration.sql b/apps/web/prisma/migrations/20240420223207_init/migration.sql new file mode 100644 index 0000000..cbb4b23 --- /dev/null +++ b/apps/web/prisma/migrations/20240420223207_init/migration.sql @@ -0,0 +1,199 @@ +-- CreateEnum +CREATE TYPE "Role" AS ENUM ('ADMIN', 'MEMBER'); + +-- CreateEnum +CREATE TYPE "DomainStatus" AS ENUM ('NOT_STARTED', 'PENDING', 'SUCCESS', 'FAILED', 'TEMPORARY_FAILURE'); + +-- CreateEnum +CREATE TYPE "ApiPermission" AS ENUM ('FULL', 'SENDING'); + +-- CreateEnum +CREATE TYPE "EmailStatus" AS ENUM ('SENT', 'OPENED', 'CLICKED', 'BOUNCED', 'COMPLAINED', 'DELIVERED', 'REJECTED', 'RENDERING_FAILURE', 'DELIVERY_DELAYED'); + +-- CreateTable +CREATE TABLE "AppSetting" ( + "key" TEXT NOT NULL, + "value" TEXT NOT NULL, + + CONSTRAINT "AppSetting_pkey" PRIMARY KEY ("key") +); + +-- CreateTable +CREATE TABLE "Account" ( + "id" TEXT NOT NULL, + "userId" INTEGER NOT NULL, + "type" TEXT NOT NULL, + "provider" TEXT NOT NULL, + "providerAccountId" TEXT NOT NULL, + "refresh_token" TEXT, + "access_token" TEXT, + "refresh_token_expires_in" INTEGER, + "expires_at" INTEGER, + "token_type" TEXT, + "scope" TEXT, + "id_token" TEXT, + "session_state" TEXT, + + CONSTRAINT "Account_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "Session" ( + "id" TEXT NOT NULL, + "sessionToken" TEXT NOT NULL, + "userId" INTEGER NOT NULL, + "expires" TIMESTAMP(3) NOT NULL, + + CONSTRAINT "Session_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "VerificationToken" ( + "identifier" TEXT NOT NULL, + "token" TEXT NOT NULL, + "expires" TIMESTAMP(3) NOT NULL +); + +-- CreateTable +CREATE TABLE "User" ( + "id" SERIAL NOT NULL, + "name" TEXT, + "email" TEXT, + "emailVerified" TIMESTAMP(3), + "image" TEXT, + + CONSTRAINT "User_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "Team" ( + "id" SERIAL NOT NULL, + "name" TEXT NOT NULL, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updatedAt" TIMESTAMP(3) NOT NULL, + + CONSTRAINT "Team_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "TeamUser" ( + "teamId" INTEGER NOT NULL, + "userId" INTEGER NOT NULL, + "role" "Role" NOT NULL +); + +-- CreateTable +CREATE TABLE "Domain" ( + "id" SERIAL NOT NULL, + "name" TEXT NOT NULL, + "teamId" INTEGER NOT NULL, + "status" "DomainStatus" NOT NULL DEFAULT 'PENDING', + "region" TEXT NOT NULL DEFAULT 'us-east-1', + "clickTracking" BOOLEAN NOT NULL DEFAULT false, + "openTracking" BOOLEAN NOT NULL DEFAULT false, + "publicKey" TEXT NOT NULL, + "dkimStatus" TEXT, + "spfDetails" TEXT, + "dmarcAdded" BOOLEAN NOT NULL DEFAULT false, + "errorMessage" TEXT, + "subdomain" TEXT, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updatedAt" TIMESTAMP(3) NOT NULL, + + CONSTRAINT "Domain_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "ApiKey" ( + "id" SERIAL NOT NULL, + "tokenHash" TEXT NOT NULL, + "partialToken" TEXT NOT NULL, + "name" TEXT NOT NULL, + "permission" "ApiPermission" NOT NULL DEFAULT 'SENDING', + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updatedAt" TIMESTAMP(3) NOT NULL, + "lastUsed" TIMESTAMP(3), + "teamId" INTEGER NOT NULL, + + CONSTRAINT "ApiKey_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "Email" ( + "id" TEXT NOT NULL, + "sesEmailId" TEXT, + "to" TEXT NOT NULL, + "from" TEXT NOT NULL, + "subject" TEXT NOT NULL, + "text" TEXT, + "html" TEXT, + "latestStatus" "EmailStatus" NOT NULL DEFAULT 'SENT', + "teamId" INTEGER NOT NULL, + "domainId" INTEGER, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updatedAt" TIMESTAMP(3) NOT NULL, + + CONSTRAINT "Email_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "EmailEvent" ( + "emailId" TEXT NOT NULL, + "status" "EmailStatus" NOT NULL, + "data" JSONB, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP +); + +-- CreateIndex +CREATE UNIQUE INDEX "Account_provider_providerAccountId_key" ON "Account"("provider", "providerAccountId"); + +-- CreateIndex +CREATE UNIQUE INDEX "Session_sessionToken_key" ON "Session"("sessionToken"); + +-- CreateIndex +CREATE UNIQUE INDEX "VerificationToken_token_key" ON "VerificationToken"("token"); + +-- CreateIndex +CREATE UNIQUE INDEX "VerificationToken_identifier_token_key" ON "VerificationToken"("identifier", "token"); + +-- CreateIndex +CREATE UNIQUE INDEX "User_email_key" ON "User"("email"); + +-- CreateIndex +CREATE UNIQUE INDEX "TeamUser_teamId_userId_key" ON "TeamUser"("teamId", "userId"); + +-- CreateIndex +CREATE UNIQUE INDEX "Domain_name_key" ON "Domain"("name"); + +-- CreateIndex +CREATE UNIQUE INDEX "ApiKey_tokenHash_key" ON "ApiKey"("tokenHash"); + +-- CreateIndex +CREATE UNIQUE INDEX "Email_sesEmailId_key" ON "Email"("sesEmailId"); + +-- CreateIndex +CREATE UNIQUE INDEX "EmailEvent_emailId_status_key" ON "EmailEvent"("emailId", "status"); + +-- AddForeignKey +ALTER TABLE "Account" ADD CONSTRAINT "Account_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "Session" ADD CONSTRAINT "Session_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "TeamUser" ADD CONSTRAINT "TeamUser_teamId_fkey" FOREIGN KEY ("teamId") REFERENCES "Team"("id") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "TeamUser" ADD CONSTRAINT "TeamUser_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "Domain" ADD CONSTRAINT "Domain_teamId_fkey" FOREIGN KEY ("teamId") REFERENCES "Team"("id") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "ApiKey" ADD CONSTRAINT "ApiKey_teamId_fkey" FOREIGN KEY ("teamId") REFERENCES "Team"("id") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "Email" ADD CONSTRAINT "Email_teamId_fkey" FOREIGN KEY ("teamId") REFERENCES "Team"("id") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "EmailEvent" ADD CONSTRAINT "EmailEvent_emailId_fkey" FOREIGN KEY ("emailId") REFERENCES "Email"("id") ON DELETE CASCADE ON UPDATE CASCADE; diff --git a/apps/web/prisma/migrations/migration_lock.toml b/apps/web/prisma/migrations/migration_lock.toml new file mode 100644 index 0000000..fbffa92 --- /dev/null +++ b/apps/web/prisma/migrations/migration_lock.toml @@ -0,0 +1,3 @@ +# Please do not edit this file manually +# It should be added in your version-control system (i.e. Git) +provider = "postgresql" \ No newline at end of file