Install Prisma and Dependencies

In your backend project (e.g., /packages/backend or root if monorepo):

pnpm install prisma @prisma/client

Then initialize Prisma:

npx prisma init

change Prisma/schema.prisma

generator client {
  provider = "prisma-client-js"
}

datasource db {
  provider = "postgresql"
  url      = env("DATABASE_URL")
}

Configure .env to point to Docker Postgres

If your Docker Compose uses service name postgres and credentials like:

POSTGRES_USER=devarena
POSTGRES_PASSWORD=supersecretpassword
POSTGRES_DB=devarenadb
POSTGRES_PORT=5432

Then set Prisma’s env as:

DATABASE_URL="postgresql://devarena:supersecretpassword@localhost:5432/devarenadb?schema=public"

✅ If you run the backend inside Docker, use host postgres instead of localhost:

DATABASE_URL="postgresql://devsync:supersecretpassword@postgres:5432/devsyncdb?schema=public"

🧠 Step 3: Define Your Schema

Example minimal Prisma schema (inside prisma/schema.prisma):

generator client {
  provider = "prisma-client-js"
}

datasource db {
  provider = "postgresql"
  url      = env("DATABASE_URL")
}

model Users {
  id         String     @id @default(uuid())
  username   String     @unique
  email      String
  sessions   Sessions[]
  created_at DateTime   @default(now())
  updated_at DateTime   @updatedAt

  @@index([email])
  @@index([username])
}

model Sessions {
  id           String   @id @default(uuid())
  userId       String
  user         Users    @relation(fields: [userId], references: [id], onDelete: Cascade)
  refreshToken String   @unique
  userAgent    String?
  ip           String?
  createdAt    DateTime @default(now())
  expiresAt    DateTime

  @@index([userId])
  @@index([refreshToken])
  @@index([expiresAt])
}