Gère le schéma Prisma et les migrations de Motivia. Utilise ce skill quand l'utilisateur demande de modifier la base de données, ajouter une table, un champ, une relation, ou effectuer une migration. PostgreSQL avec Prisma ORM.
# Développement
pnpm prisma generate # Générer le client Prisma
pnpm prisma migrate dev # Créer et appliquer une migration
pnpm prisma migrate dev --name add_feature # Migration nommée
pnpm prisma db push # Push direct (dev seulement)
# Production
pnpm prisma migrate deploy # Appliquer les migrations
# Utilitaires
pnpm prisma studio # Interface graphique
pnpm prisma db seed # Exécuter le seed
pnpm prisma format # Formater le schema
model NouveauModele {
id String @id @default(cuid())
// ... champs métier
userId String
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
@@index([userId])
}
Types courants
Usage
Type Prisma
ID
String @id @default(cuid())
Email
String @unique
Texte court
String
Texte long
String (pas de @db.Text nécessaire)
Date
DateTime
Date optionnelle
DateTime?
Booléen
Boolean @default(false)
Entier
Int @default(0)
Liste de strings
String[]
Relations
// 1:N (User a plusieurs Experience)
model User {
experiences Experience[]
}
model Experience {
userId String
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
}
// 1:1 (User a un CV)
model User {
userCV UserCV?
}
model UserCV {
userId String @unique
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
}
Enum
enum ApiProvider {
OPENAI
GOOGLE
ANTHROPIC
MISTRAL
XAI
}
model ApiKey {
provider ApiProvider
}
Workflow modification de schéma
1. Modifier le schéma
// prisma/schema.prisma
model User {
// Ajouter un nouveau champ
newField String?
}
2. Créer la migration
pnpm prisma migrate dev --name add_new_field
3. Mettre à jour le code
Server actions dans app/actions/
Schémas Zod dans utils/schemas.ts
Ajouter un nouveau modèle
1. Définir le modèle
model NewEntity {
id String @id @default(cuid())
name String
description String?
isActive Boolean @default(true)
userId String
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
@@index([userId])
}
2. Ajouter la relation dans User
model User {
// ... existing fields
newEntities NewEntity[]
}
3. Créer la migration
pnpm prisma migrate dev --name add_new_entity
4. Créer les server actions
Créer app/actions/new-entity.ts avec le pattern habituel.
Bonnes pratiques
Indexes
@@index([userId]) // Toujours indexer les FK
@@index([createdAt]) // Si tri fréquent
@@unique([userId, name]) // Contrainte d'unicité
Cascade
Toujours utiliser onDelete: Cascade pour les relations avec User afin de supprimer les données orphelines.
Migrations en production
Tester localement avec migrate dev
Commit des fichiers de migration
En production: migrate deploy (via script build)
Checklist nouvelle table
ID avec @id @default(cuid())
createdAt et updatedAt
userId avec relation et onDelete: Cascade
@@index([userId])
Relation ajoutée dans User
Migration créée et testée
Server actions créées
Schéma Zod ajouté
1---2name: db3description: Gère le schéma Prisma et les migrations de Motivia. Utilise ce skill quand l'utilisateur demande de modifier la base de données, ajouter une table, un champ, une relation, ou effectuer une migration. PostgreSQL avec Prisma ORM.4---56# Base de Données Motivia
78## Stack technique
910- **ORM**: Prisma
11- **BDD**: PostgreSQL (Neon)
12- **Fichier schema**: `prisma/schema.prisma`
1314## Commandes Prisma
1516```bash
17# Développement
18pnpm prisma generate # Générer le client Prisma
19pnpm prisma migrate dev # Créer et appliquer une migration
20pnpm prisma migrate dev --name add_feature # Migration nommée
21pnpm prisma db push # Push direct (dev seulement)
2223# Production
24pnpm prisma migrate deploy # Appliquer les migrations
2526# Utilitaires
27pnpm prisma studio # Interface graphique
28pnpm prisma db seed # Exécuter le seed
29pnpm prisma format # Formater le schema
30```
3132## Modèles existants
3334### User (central)
3536```prisma
37model User {
38 id String @id @default(cuid())
39 email String @unique
40 name String @default("")
41 firstName String?
42 lastName String?
43 profileTitle String?
44 localisation String?
45 image String?
46 emailVerified Boolean @default(false)
47 freeLetters Int @default(5)
48 keyAchievements String[]
49 softSkills String[]
50 technicalSkills String[]
51 createdAt DateTime @default(now())
52 updatedAt DateTime @updatedAt
5354 // Relations
55 accounts Account[]
56 sessions Session[]
57 apiKeys ApiKey[]
58 experiences Experience[]
59 degrees Degree[]
60 links Link[]
61 projects Project[]
62 motivationLetters MotivationLetter[]
63 userCV UserCV?
64}
65```
6667### Entités métier
6869| Modèle | Description | Relation |
70|--------|-------------|----------|
71| Experience | Expériences pro | User 1:N |
72| Degree | Diplômes | User 1:N |
73| Project | Projets portfolio | User 1:N |
74| Link | Liens sociaux | User 1:N |
75| MotivationLetter | Lettres générées | User 1:N |
76| UserCV | CV PDF uploadé | User 1:1 |
77| ApiKey | Clés API providers | User 1:N |
7879### Auth (Better Auth)
8081| Modèle | Description |
82|--------|-------------|
83| Account | Comptes OAuth/credentials |
84| Session | Sessions utilisateur |
85| Verification | Tokens de vérification |
86| Authenticator | WebAuthn |
8788## Conventions de schéma
8990### Champs obligatoires
9192```prisma
93model NouveauModele {
94 id String @id @default(cuid())
95 // ... champs métier
96 userId String
97 createdAt DateTime @default(now())
98 updatedAt DateTime @updatedAt
99 user User @relation(fields: [userId], references: [id], onDelete: Cascade)
100101 @@index([userId])
102}
103```
104105### Types courants
106107| Usage | Type Prisma |
108|-------|-------------|
109| ID | `String @id @default(cuid())` |
110| Email | `String @unique` |
111| Texte court | `String` |
112| Texte long | `String` (pas de @db.Text nécessaire) |
113| Date | `DateTime` |
114| Date optionnelle | `DateTime?` |
115| Booléen | `Boolean @default(false)` |
116| Entier | `Int @default(0)` |
117| Liste de strings | `String[]` |
118119### Relations
120121```prisma
122// 1:N (User a plusieurs Experience)
123model User {
124 experiences Experience[]
125}
126127model Experience {
128 userId String
129 user User @relation(fields: [userId], references: [id], onDelete: Cascade)
130}
131132// 1:1 (User a un CV)
133model User {
134 userCV UserCV?
135}
136137model UserCV {
138 userId String @unique
139 user User @relation(fields: [userId], references: [id], onDelete: Cascade)
140}
141```
142143### Enum
144145```prisma
146enum ApiProvider {
147 OPENAI
148 GOOGLE
149 ANTHROPIC
150 MISTRAL
151 XAI
152}
153154model ApiKey {
155 provider ApiProvider
156}
157```
158159## Workflow modification de schéma
160161### 1. Modifier le schéma
162163```prisma
164// prisma/schema.prisma
165model User {
166 // Ajouter un nouveau champ
167 newField String?
168}
169```
170171### 2. Créer la migration
172173```bash
174pnpm prisma migrate dev --name add_new_field
175```
176177### 3. Mettre à jour le code
178179- Server actions dans `app/actions/`
180- Schémas Zod dans `utils/schemas.ts`
181182## Ajouter un nouveau modèle
183184### 1. Définir le modèle
185186```prisma
187model NewEntity {
188 id String @id @default(cuid())
189 name String
190 description String?
191 isActive Boolean @default(true)
192 userId String
193 createdAt DateTime @default(now())
194 updatedAt DateTime @updatedAt
195 user User @relation(fields: [userId], references: [id], onDelete: Cascade)
196197 @@index([userId])
198}
199```
200201### 2. Ajouter la relation dans User
202203```prisma
204model User {
205 // ... existing fields
206 newEntities NewEntity[]
207}
208```
209210### 3. Créer la migration
211212```bash
213pnpm prisma migrate dev --name add_new_entity
214```
215216### 4. Créer les server actions
217218Créer `app/actions/new-entity.ts` avec le pattern habituel.
219220## Bonnes pratiques
221222### Indexes
223224```prisma
225@@index([userId]) // Toujours indexer les FK
226@@index([createdAt]) // Si tri fréquent
227@@unique([userId, name]) // Contrainte d'unicité
228```
229230### Cascade
231232Toujours utiliser `onDelete: Cascade` pour les relations avec User afin de supprimer les données orphelines.
233234### Migrations en production
2352361. Tester localement avec `migrate dev`
2372. Commit des fichiers de migration
2383. En production: `migrate deploy` (via script build)
239240## Checklist nouvelle table
2412421. [ ] ID avec `@id @default(cuid())`
2432. [ ] `createdAt` et `updatedAt`
2443. [ ] `userId` avec relation et `onDelete: Cascade`
2454. [ ] `@@index([userId])`
2465. [ ] Relation ajoutée dans User
2476. [ ] Migration créée et testée
2487. [ ] Server actions créées
2498. [ ] Schéma Zod ajouté
Run npx skillmds add majiayu000/db in your terminal (requires Node.js), paste this page's agent-chat prompt into Claude, Cursor, or any MCP-connected agent, or download the SKILL.md file and copy it into your agent's skills directory.
Gère le schéma Prisma et les migrations de Motivia. Utilise ce skill quand l'utilisateur demande de modifier la base de données, ajouter une table, un champ, une relation, ou effectuer une migration. PostgreSQL avec Prisma ORM. It is listed under Coding & Dev Tools on SkillMD.
This skill has not completed SkillMD's automated safety review yet. Capability flags: reads secrets. SkillMD never runs a skill's scripts for you; review the SKILL.md before installing.
This skill is tagged as working with Claude Code, Claude.ai, OpenAI Codex. SKILL.md is an open format, so most agents that read a skills directory can load it too.
Yes. Installing skills from SkillMD is free, and the skill stays under its author's original license.
majiayu000 (@majiayu000) published this skill. Their other Agent Skills are listed on their SkillMD profile.