Claude-skill-registry db

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.

install
source · Clone the upstream repo
git clone https://github.com/majiayu000/claude-skill-registry
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/majiayu000/claude-skill-registry "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/data/db" ~/.claude/skills/majiayu000-claude-skill-registry-db && rm -rf "$T"
manifest: skills/data/db/SKILL.md
source content

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

Modèles existants

User (central)

model User {
  id                String             @id @default(cuid())
  email             String             @unique
  name              String             @default("")
  firstName         String?
  lastName          String?
  profileTitle      String?
  localisation      String?
  image             String?
  emailVerified     Boolean            @default(false)
  freeLetters       Int                @default(5)
  keyAchievements   String[]
  softSkills        String[]
  technicalSkills   String[]
  createdAt         DateTime           @default(now())
  updatedAt         DateTime           @updatedAt

  // Relations
  accounts          Account[]
  sessions          Session[]
  apiKeys           ApiKey[]
  experiences       Experience[]
  degrees           Degree[]
  links             Link[]
  projects          Project[]
  motivationLetters MotivationLetter[]
  userCV            UserCV?
}

Entités métier

ModèleDescriptionRelation
ExperienceExpériences proUser 1:N
DegreeDiplômesUser 1:N
ProjectProjets portfolioUser 1:N
LinkLiens sociauxUser 1:N
MotivationLetterLettres généréesUser 1:N
UserCVCV PDF uploadéUser 1:1
ApiKeyClés API providersUser 1:N

Auth (Better Auth)

ModèleDescription
AccountComptes OAuth/credentials
SessionSessions utilisateur
VerificationTokens de vérification
AuthenticatorWebAuthn

Conventions de schéma

Champs obligatoires

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

UsageType 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

  1. Tester localement avec
    migrate dev
  2. Commit des fichiers de migration
  3. En production:
    migrate deploy
    (via script build)

Checklist nouvelle table

  1. ID avec
    @id @default(cuid())
  2. createdAt
    et
    updatedAt
  3. userId
    avec relation et
    onDelete: Cascade
  4. @@index([userId])
  5. Relation ajoutée dans User
  6. Migration créée et testée
  7. Server actions créées
  8. Schéma Zod ajouté