targo-backend/prisma/postgres/READMEprisma.md

3.2 KiB
Raw Permalink Blame History

TARGO-BACKEND prisma

*******************************************************************************************************

MAJOR PRISMA UPDATE 2026-02-04 => from 6.13 to 7.3. A lot has changed and this read me needs updating.|

added functionnalities to manage many schema files with many instance of clients and services |

added scripts to generate, migrate and manage one or many database at once |

*******************************************************************************************************

Ce document court présente la configuration de Prisma et les conventions à respecter dans prisma/schema.prisma. http://prisma.io/docs/orm/prisma-schema

Installation

npm install prisma @prisma/client --save-dev npx prisma init

Le fichier .env est généré à la racine

Fichier .env

<Définissez votre URL de connexion PostgreSQL :

  • DATABASE_URL="postgresql://<DB_USER>:<DB_PASSWORD>@:/<DB_NAME>?schema=public"

Structure de prisma/schema.prisma

generator client {
  provider = "prisma-client-js"
  output   = "../generated/prisma"
}

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

enum Roles {
  USER
  ADMIN
  CUSTOMER
  EMPLOYEE
  # …
}

model User {
  user_id      Int        @id @default(autoincrement())
  first_name   String
  last_name    String
  email        String?    @unique   # le ? de 'String#' indique NULLABLE
  role         Roles      @default(USER)
  created_at   DateTime   @default(now())

  customer      Customers? @relation("UserCustomer")   # back-relation du model/table customers
  

  @@map("users")   # mappe vers la table 'users'
}


```graphql
model Customers {
  customer_id         Int     @id @default(autoincrement())
  user                Users   @relation("UserCustomer", fields: [user_id], references:[user_id])   # foreign key relation
  user_id             Int     @unique   # actual foreign key
  invoice_id          Int     @unique
  role                Roles   @default(CUSTOMER)

  @@map("customers") # mappe vers la table 'customers'
}
### `Structure de prisma/schema.prisma-legaacy`
generator client {
  provider = "prisma-client-js"
  output   = "../node_modules/@prisma/client-legacy"
}

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

Conventions

Modèles : nom en PascalCase (singulier) → map vers table lowercase avec @@map("…").

Not-NULL : Tout type sans ? est par default not-null. si nullable on doit mettre ?

Champs : snake_case

Types date/heure : DateTime.

Relations : toujours bidirectionnelles ou explicitez @relation("NomRelation").

Enums : définis en PascalCase, sans mapping interne (le mapping de la table se fait sur le type enum, pas sur ses valeurs).

##4. Commandes utiles

Afficher laide Prisma npx prisma help

Générer le client JS npx prisma generate

npx prisma generate schema=prisma-legacy/schema.prisma

Créer ou appliquer une migration npx prisma migrate dev --name <titre_de_migration>

Explorer la base avec Prisma Studio npx prisma studio

Récupérer le schéma existant depuis la BDD npx prisma db pull