targo-backend/prisma/postgres/READMEprisma.md

121 lines
3.2 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
# *******************************************************************************************************
# 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`.
<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'
}
```
```graphql
### `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