Untitled
unknown
prisma
3 months ago
6.9 kB
2
Indexable
// Définition du générateur Prisma generator client { provider = "prisma-client-js" // Génère le client Prisma pour TypeScript/JavaScript } // Configuration de la source de données (PostgreSQL) datasource db { provider = "postgresql" url = env("DATABASE_URL") } // Modèle Utilisateur model User { id String @id @default(uuid()) // Identifiant unique email String @unique // Email unique pour l'authentification passwordHash String // Mot de passe hashé firstName String? // Prénom (optionnel) lastName String? // Nom (optionnel) avatarUrl String? // URL de l'avatar (optionnel) createdAt DateTime @default(now()) // Date de création du compte // Relations collections Collection[] // Collections créées par l'utilisateur opinions UserOpinion[] // Opinions données par l'utilisateur managedCollections CollectionManager[] // Collections gérées par l'utilisateur @@index([email]) // Index sur l'email pour optimiser les requêtes } // Modèle Collection model Collection { id String @id @default(uuid()) // Identifiant unique title String // Titre de la collection description String // Description de la collection isPublic Boolean @default(false) // Visibilité publique (false par défaut) createdAt DateTime @default(now()) // Date de création // Relations owner User @relation(fields: [ownerId], references: [id]) // Propriétaire de la collection ownerId String elements Element[] // Liste des éléments dans la collection opinionConfigs CollectionOpinionConfig[] // Configuration des types d'opinions managers CollectionManager[] // Gestion des droits d'accès @@index([title]) // Index sur le titre pour faciliter la recherche } // Modèle Élément model Element { id String @id @default(uuid()) // Identifiant unique title String // Titre de l'élément description String // Description de l'élément images String[] // Tableau d'URLs pour les images createdAt DateTime @default(now()) // Date de création // Relations collection Collection @relation(fields: [collectionId], references: [id]) // Collection associée collectionId String author User @relation(fields: [authorId], references: [id]) // Auteur de l'élément authorId String metadata Metadata[] // Métadonnées associées à l'élément opinions UserOpinion[] // Opinions reçues sur l'élément @@index([title]) // Index sur le titre pour optimiser les recherches } // Modèle Métadonnées model Metadata { id String @id @default(uuid()) // Identifiant unique element Element @relation(fields: [elementId], references: [id]) // Élément parent elementId String type MetadataType // Type de métadonnée (enum) data Json // Données structurées au format JSON schema String? // Schéma optionnel pour la validation des données @@index([type]) // Index sur le type pour améliorer les performances des recherches } // Enumération pour les Types de Métadonnées enum MetadataType { ADDRESS // Adresse physique OPENING_HOURS // Horaires d'ouverture NUTRITION // Informations nutritionnelles CUSTOM // Métadonnées personnalisées } // Modèle Opinion Utilisateur model UserOpinion { id String @id @default(uuid()) // Identifiant unique user User @relation(fields: [userId], references: [id]) // Utilisateur ayant donné l'opinion userId String element Element @relation(fields: [elementId], references: [id]) // Élément concerné elementId String type String // Type d'opinion (ex. "like", "dislike", "je ne connais pas") weight Float @default(1.0) // Poids du vote (identique pour tous les utilisateurs, modulé via le type d'opinion) createdAt DateTime @default(now()) // Date de l'opinion // Optionnel : référence à la configuration d'opinion spécifique à la collection config CollectionOpinionConfig? @relation(fields: [configId], references: [id]) configId String? @@unique([userId, elementId]) // Une seule opinion par utilisateur et par élément @@index([elementId, type]) // Optimisation pour les recherches par élément et type @@index([userId, createdAt]) // Historique des swipes par utilisateur } // Modèle Configuration des Opinions d'une Collection model CollectionOpinionConfig { id String @id @default(uuid()) // Identifiant unique collection Collection @relation(fields: [collectionId], references: [id]) // Collection associée collectionId String type String // Code interne du type d'opinion (ex. "like", "dislike", etc.) label String // Libellé affiché (ex. "J'aime", "Je n'aime pas") color String // Couleur associée au type d'opinion (ex. "#FF6B6B") defaultWeight Float @default(1.0) // Poids par défaut du type d'opinion @@unique([collectionId, type]) // Un type d'opinion unique par collection } // Modèle Gestionnaire de Collection model CollectionManager { user User @relation(fields: [userId], references: [id]) // Utilisateur gérant la collection userId String collection Collection @relation(fields: [collectionId], references: [id]) // Collection concernée collectionId String role Role @default(EDITOR) // Rôle attribué (par défaut EDITOR) @@id([userId, collectionId]) // Clé primaire composée } // Enumération des Rôles enum Role { OWNER // Propriétaire (accès complet) EDITOR // Éditeur (accès pour modification) VIEWER // Lecteur (accès en lecture seule) }
Editor is loading...
Leave a Comment