Receber por email
← Voltar para o catálogo

db

Gerencia o esquema Prisma e as migrações do Motivia. Use esta skill quando o usuário solicitar modificações no banco de dados, como adicionar uma tabela, campo, relação ou realizar uma migração, utilizando PostgreSQL com Prisma ORM.

556estrelas
Atualizado há 2 meses

Ver no GitHub ↗ Licença: MIT

Como adicionar

/plugin marketplace add majiayu000/claude-skill-registry

O comando exato pode variar conforme o repositório. Confira o README no GitHub.

Para o autor da skill

Cole no README do seu repo

Mostra que sua skill está catalogada na Skillteca, gera backlink e tráfego rastreável.

[![Skillteca](https://www.skillteca.com.br/api/badge/db/svg)](https://www.skillteca.com.br/skills/db)

Skills relacionadas

Ver todas de Pesquisa e Web →

Alerta por categoria

Receba novas skills de Pesquisa e Web toda segunda

1 email curto, só com as skills novas de Pesquisa e Web. 4 minutos de leitura, sem spam, cancela com 1 clique.

Você confirma o email no primeiro envio. Sem spam. Cancela com 1 clique.

Ler descrição completa

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èle | Description | Relation | |--------|-------------|----------| | Experience | Expériences pro | User 1:N | | Degree | Diplômes | User 1:N | | Project | Projets portfolio | User 1:N | | Link | Liens sociaux | User 1:N | | MotivationLetter | Lettres générées | User 1:N | | UserCV | CV PDF uploadé | User 1:1 | | ApiKey | Clés API providers | User 1:N |

Auth (Better Auth)

| Modèle | Description | |--------|-------------| | Account | Comptes OAuth/credentials | | Session | Sessions utilisateur | | Verification | Tokens de vérification | | Authenticator | WebAuthn |

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

| 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

  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é
Compartilhar X LinkedIn