feat: add prisma

This commit is contained in:
Riccardo
2024-06-21 10:28:34 +02:00
parent 4cbc89aef7
commit 8f60f0b139
6 changed files with 86 additions and 1 deletions

2
.env.example Normal file
View File

@@ -0,0 +1,2 @@
DATABASE_URL=postgresql://postgres:postgres@localhost:5432/postgres
DATABASE_URL_NON_POOLING=postgresql://postgres:postgres@localhost:5432/postgres

View File

@@ -2,7 +2,6 @@
## To do ## To do
- [ ] Add database schema
- [ ] Add user authentication - [ ] Add user authentication
- [ ] Add user roles - [ ] Add user roles
- [ ] Add user permissions - [ ] Add user permissions

View File

@@ -0,0 +1,36 @@
-- CreateEnum
CREATE TYPE "ModuleType" AS ENUM ('TYPE1', 'TYPE2', 'TYPE3');
-- CreateTable
CREATE TABLE "User" (
"id" TEXT NOT NULL,
"name" TEXT NOT NULL,
"email" TEXT NOT NULL,
"deleted" BOOLEAN NOT NULL DEFAULT false,
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updatedAt" TIMESTAMP(3) NOT NULL,
CONSTRAINT "User_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "Module" (
"id" DOUBLE PRECISION NOT NULL,
"type" "ModuleType" NOT NULL,
"text" TEXT NOT NULL,
"deleted" BOOLEAN NOT NULL DEFAULT false,
"createdById" TEXT NOT NULL,
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updatedAt" TIMESTAMP(3) NOT NULL,
CONSTRAINT "Module_pkey" PRIMARY KEY ("id")
);
-- CreateIndex
CREATE UNIQUE INDEX "User_email_key" ON "User"("email");
-- CreateIndex
CREATE UNIQUE INDEX "Module_id_key" ON "Module"("id");
-- AddForeignKey
ALTER TABLE "Module" ADD CONSTRAINT "Module_createdById_fkey" FOREIGN KEY ("createdById") REFERENCES "User"("id") ON DELETE RESTRICT ON UPDATE CASCADE;

View File

@@ -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"

9
prisma/prisma.ts Normal file
View File

@@ -0,0 +1,9 @@
import { PrismaClient } from '@prisma/client';
const globalForPrisma = global as unknown as { prisma: PrismaClient };
export const prisma = globalForPrisma.prisma || new PrismaClient();
if (process.env.NODE_ENV !== 'production') globalForPrisma.prisma = prisma;
export default prisma;

36
prisma/schema.prisma Normal file
View File

@@ -0,0 +1,36 @@
generator client {
provider = "prisma-client-js"
}
datasource db {
provider = "postgresql"
url = env("DATABASE_URL") // uses connection pooling
directUrl = env("DATABASE_URL_NON_POOLING") // uses a direct connection
}
enum ModuleType {
TYPE1
TYPE2
TYPE3
}
model User {
id String @id @default(cuid())
name String
email String @unique
deleted Boolean @default(false)
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
Module Module[]
}
model Module {
id Float @id @unique
type ModuleType
text String
deleted Boolean @default(false)
createdById String
createdBy User @relation(fields: [createdById], references: [id])
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
}