From 2bdfb884ecaaf50be0ca3269034e228f2188566f Mon Sep 17 00:00:00 2001 From: Timur Ercan Date: Tue, 4 Apr 2023 12:02:09 +0200 Subject: [PATCH] added database init script --- README.md | 1 + package.json | 1 + .../migration.sql | 148 ++++++++++++++++++ .../prisma/migrations/migration_lock.toml | 3 + 4 files changed, 153 insertions(+) create mode 100644 packages/prisma/migrations/20230404095503_initial_migration/migration.sql create mode 100644 packages/prisma/migrations/migration_lock.toml diff --git a/README.md b/README.md index 9c3d4b659..802088e73 100644 --- a/README.md +++ b/README.md @@ -110,6 +110,7 @@ Follow these steps to setup documenso on you local machnine: - Set DATABASE_URL value in .env file - You can use the provided test database url (may be wiped at any point) - Or setup a local postgres sql instance (recommened) +- Create the database scheme by running db-migrate:dev - Set SENDGRID_API_KEY value in .env file - You need SendGrid account, which you can create [here](https://signup.sendgrid.com/). - Documenso uses [Nodemailer](https://nodemailer.com/about/) so you can easily use your own smtp server diff --git a/package.json b/package.json index 87d575921..96efb8f04 100644 --- a/package.json +++ b/package.json @@ -5,6 +5,7 @@ "dev": "cd apps && cd web && next dev", "build": "npm i && cd apps && cd web && npm i && next build", "start": "cd apps && cd web && next start", + "db-migrate:dev": "prisma migrate dev", "db-seed": "prisma db seed", "db-studio": "prisma studio" }, diff --git a/packages/prisma/migrations/20230404095503_initial_migration/migration.sql b/packages/prisma/migrations/20230404095503_initial_migration/migration.sql new file mode 100644 index 000000000..052d9f032 --- /dev/null +++ b/packages/prisma/migrations/20230404095503_initial_migration/migration.sql @@ -0,0 +1,148 @@ +-- CreateEnum +CREATE TYPE "IdentityProvider" AS ENUM ('DOCUMENSO', 'GOOGLE'); + +-- CreateEnum +CREATE TYPE "DocumentStatus" AS ENUM ('DRAFT', 'PENDING', 'COMPLETED'); + +-- CreateEnum +CREATE TYPE "ReadStatus" AS ENUM ('NOT_OPENED', 'OPENED'); + +-- CreateEnum +CREATE TYPE "SendStatus" AS ENUM ('NOT_SENT', 'SENT'); + +-- CreateEnum +CREATE TYPE "SigningStatus" AS ENUM ('NOT_SIGNED', 'SIGNED'); + +-- CreateEnum +CREATE TYPE "FieldType" AS ENUM ('SIGNATURE', 'FREE_SIGNATURE', 'DATE', 'TEXT'); + +-- CreateTable +CREATE TABLE "User" ( + "id" SERIAL NOT NULL, + "name" TEXT, + "email" TEXT NOT NULL, + "emailVerified" TIMESTAMP(3), + "password" TEXT, + "source" TEXT, + "identityProvider" "IdentityProvider" NOT NULL DEFAULT 'DOCUMENSO', + + CONSTRAINT "User_pkey" PRIMARY KEY ("id") +); + +-- 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, + "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 "Document" ( + "id" SERIAL NOT NULL, + "created" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "userId" INTEGER NOT NULL, + "title" TEXT NOT NULL, + "status" "DocumentStatus" NOT NULL DEFAULT 'DRAFT', + "document" TEXT NOT NULL, + + CONSTRAINT "Document_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "Recipient" ( + "id" SERIAL NOT NULL, + "documentId" INTEGER NOT NULL, + "email" VARCHAR(255) NOT NULL, + "name" VARCHAR(255) NOT NULL DEFAULT '', + "token" TEXT NOT NULL, + "expired" TIMESTAMP(3), + "readStatus" "ReadStatus" NOT NULL DEFAULT 'NOT_OPENED', + "signingStatus" "SigningStatus" NOT NULL DEFAULT 'NOT_SIGNED', + "sendStatus" "SendStatus" NOT NULL DEFAULT 'NOT_SENT', + + CONSTRAINT "Recipient_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "Field" ( + "id" SERIAL NOT NULL, + "documentId" INTEGER NOT NULL, + "recipientId" INTEGER, + "type" "FieldType" NOT NULL, + "page" INTEGER NOT NULL, + "positionX" INTEGER NOT NULL DEFAULT 0, + "positionY" INTEGER NOT NULL DEFAULT 0, + "customText" TEXT NOT NULL, + "inserted" BOOLEAN NOT NULL, + + CONSTRAINT "Field_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "Signature" ( + "id" SERIAL NOT NULL, + "created" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "recipientId" INTEGER NOT NULL, + "fieldId" INTEGER NOT NULL, + "signatureImageAsBase64" TEXT, + "typedSignature" TEXT, + + CONSTRAINT "Signature_pkey" PRIMARY KEY ("id") +); + +-- CreateIndex +CREATE UNIQUE INDEX "User_email_key" ON "User"("email"); + +-- 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 "Signature_fieldId_key" ON "Signature"("fieldId"); + +-- 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 "Document" ADD CONSTRAINT "Document_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "Recipient" ADD CONSTRAINT "Recipient_documentId_fkey" FOREIGN KEY ("documentId") REFERENCES "Document"("id") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "Field" ADD CONSTRAINT "Field_documentId_fkey" FOREIGN KEY ("documentId") REFERENCES "Document"("id") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "Field" ADD CONSTRAINT "Field_recipientId_fkey" FOREIGN KEY ("recipientId") REFERENCES "Recipient"("id") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "Signature" ADD CONSTRAINT "Signature_recipientId_fkey" FOREIGN KEY ("recipientId") REFERENCES "Recipient"("id") ON DELETE RESTRICT ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "Signature" ADD CONSTRAINT "Signature_fieldId_fkey" FOREIGN KEY ("fieldId") REFERENCES "Field"("id") ON DELETE RESTRICT ON UPDATE CASCADE; diff --git a/packages/prisma/migrations/migration_lock.toml b/packages/prisma/migrations/migration_lock.toml new file mode 100644 index 000000000..fbffa92c2 --- /dev/null +++ b/packages/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