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.
name: db
description: 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.
allowed-tools: Read, Write, Edit, Bash, Glob, Grep
Base de Données Motivia
Stack technique
ORM: Prisma
BDD: PostgreSQL (Neon)
Fichier schema: prisma/schema.prisma
Commandes Prisma
# 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.