targo-backend/prisma/READMEprisma.md
Matthieu Haineault e22c33b29e first commit
2025-07-15 10:41:53 -04:00

103 lines
2.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# TARGO-BACKEND prisma
Ce document court présente la configuration de Prisma et les conventions à respecter dans `prisma/schema.prisma`.
<source> http://prisma.io/docs/orm/prisma-schema
`## 1. Installation`
npm install prisma @prisma/client --save-dev
npx prisma init
<Le fichier .env est généré à la racine
`##2. Fichier .env`
<Définissez votre URL de connexion PostgreSQL :
- `DATABASE_URL`="postgresql://<DB_USER>:<DB_PASSWORD>@<HOST>:<PORT>/<DB_NAME>?schema=public"
`##3. 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 ? 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
}
model Customers {
customer_id Int @id @default(autoincrement())
user Users @relation("UserCustomer", fields: [user_id], references:[user_id])
# ^^^ FK relation
user_id Int @unique
# ^^^ actual FK
invoice_id Int @unique
role Roles @default(CUSTOMER)
@@map("customers")
# ^^^ mappe vers la table customers
}
`##### 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
`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