3.2 KiB
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 l’aide 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