101 lines
2.4 KiB
Markdown
101 lines
2.4 KiB
Markdown
# 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
|
||
|
||
### `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>@<HOST>:<PORT>/<DB_NAME>?schema=public"
|
||
|
||
***
|
||
|
||
### `Structure de prisma/schema.prisma`
|
||
|
||
```graphql
|
||
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'
|
||
}
|
||
```
|
||
|
||
***
|
||
|
||
### `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
|
||
|
||
`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 |