etouch docs
Base de donnees

Modeles Prisma

Documentation exhaustive de tous les modeles du schema Prisma etouch

Documentation complete de tous les modeles definis dans packages/db/prisma/schema.prisma.

Organization

Organisation multi-tenant supportant differents types.

ChampTypeDescription
idString @id @default(cuid())Cle primaire
typeOrganizationTypePLATFORM, STUDIO, CLIENT, RETOUCHER
nameStringNom d'affichage
slugString @uniqueIdentifiant URL-friendly
parentOrganizationIdString?Support hierarchique
localeString @default("fr-FR")Locale par defaut
timezoneString @default("Europe/Paris")Fuseau horaire
stripeCustomerIdString? @uniqueIntegration Stripe
billingEmailString?Email de facturation
createdAtDateTimeDate de creation
updatedAtDateTimeDate de mise a jour

Relations : guidelineFiles, invitations, invoices, parent, children, profile, settings, payments, projectsAsClient, projectsAsStudio, retouchAssignments, retouchCategories, users, activeSessions, integrations, notifications, importJobs, clientPricings, studioClientPricings

OrganizationSettings

ChampTypeDescription
idString @idCle primaire
organizationIdString @uniqueFK vers Organization
notificationPrefsJsonPreferences de notification
storageLimitsGbInt @default(500)Limite de stockage en Go
autoArchiveDaysInt @default(180)Jours avant auto-archivage
studioBrandingJson?Configuration branding studio

OrganizationProfile

ChampTypeDescription
idString @idCle primaire
organizationIdString @uniqueFK vers Organization
contactNameString?Nom du contact
contactEmailString?Email du contact
contactPhoneString?Telephone du contact
addressLine1String?Adresse ligne 1
addressLine2String?Adresse ligne 2
addressPostalCodeString?Code postal
addressCityString?Ville
addressCountryString?Pays
billingAddressLine1String?Adresse facturation ligne 1
billingAddressLine2String?Adresse facturation ligne 2
billingAddressPostalCodeString?Code postal facturation
billingAddressCityString?Ville facturation
billingAddressCountryString?Pays facturation
sirenString?Numero SIREN
avatarUrlString?URL avatar
studioStatusString?Statut studio
clientStatusString?Statut client
retoucherStatusString?Statut retoucheur
tagsString[]Tags
projectsCountInt @default(0)Compteur projets
sourceOrganizationSource?Source (SYSTEM, PENNYLANE)
sourceIdString?ID source externe
tradeNameString?Nom commercial
vatNumberString?Numero TVA
downloadAuthorizationDownloadAuthorization @default(LOW)Niveau d'autorisation telechargement

User

ChampTypeDescription
idString @idCle primaire
emailString @uniqueEmail unique
displayNameStringNom d'affichage
passwordHashString?Hash mot de passe
emailVerifiedBoolean @default(false)Verification email
mfaEnabledBoolean @default(false)MFA active
localeString? @default("fr-FR")Preference locale
lastLoginAtDateTime?Derniere connexion
avatarUrlString?URL avatar
roleString?Role global
bannedBoolean? @default(false)Banni
banReasonString?Raison du ban
banExpiresDateTime?Expiration du ban
deletedAtDateTime?Suppression logique

Relations : Asset, comments, invitations, legalConsents, RetouchVersion, UploadSession, organizations, workflowEvents, notifications, Account, Session, downloadEvents

Invitation

ChampTypeDescription
idString @idCle primaire
emailStringEmail invite
tokenString @uniqueToken unique
expiresAtDateTimeExpiration
usedAtDateTime?Date d'utilisation
organizationIdStringFK vers Organization
roleUserRoleRole attribue
userIdString?FK vers User (si existant)

UserOrganization

ChampTypeDescription
idString @idCle primaire
userIdStringFK vers User
organizationIdStringFK vers Organization
roleUserRoleNiveau de permission
scopesString[]Permissions additionnelles
defaultContextJson?Contexte par defaut

Contrainte unique : [userId, organizationId]

Project

ChampTypeDescription
idString @idCle primaire
referenceString @uniqueReference unique
nameStringNom du projet
studioIdStringFK vers Organization (studio)
clientIdStringFK vers Organization (client)
workflowStateProjectWorkflowState @default(STUDIO_REVIEW)Etat courant
retouchEnabledBoolean @default(true)Retouche activee
retouchingCategoryRetouchingCategory?Categorie de retouche
guidelineFileIdString?FK vers GuidelineFile
currentRoundNumberInt @default(0)Numero round courant
metadataJsonMetadonnees
visibilityString @default("studio_only")Visibilite
shootingDateDateTimeDate de shooting
kickoffDateDateTime?Date de kickoff
deadlineDateDateTime?Date limite
archivedAtDateTime?Date d'archivage
downloadUnlockedBoolean @default(false)Telechargement debloque
quoteStatusQuoteStatus @default(DRAFT)Statut du devis
paymentStatusPaymentStatus @default(UNPAID)Statut paiement
isPublicBoolean @default(false)Projet public
publicTokenString? @uniqueToken public
ftpBasePathString?Chemin FTP de base
billingCurrencyString?Devise facturation
billingPricingModelString?Modele de tarification
billingClientUnitPriceInt?Prix unitaire client
billingEstimatedTotalRevenueInt?Revenu estime total
billingRetoucherUnitPriceInt?Prix unitaire retoucheur
billingEstimatedTotalCostInt?Cout estime total
billingEstimatedMarginInt?Marge estimee
billingEstimatedMarginPercentFloat?Pourcentage marge
priceMatchTypePriceMatchType?Type de correspondance prix
guidelinePricingCategoryIdString?FK vers GuidelinePricingCategory
agreedPriceCentsInt?Prix convenu en centimes

Relations : assets, comments, invoice, payments, client, guidelineFile, studio, pricingItems, retouchVendors, retouchRounds, uploadSessions, workflowEvents, notifications, ftpSyncJobs, downloadEvents

ProjectRetouchVendor

ChampTypeDescription
idString @idCle primaire
projectIdStringFK vers Project
organizationIdStringFK vers Organization
statusString @default("pending")Statut
assignedAtDateTimeDate d'assignation
releasedAtDateTime?Date de liberation

Asset

ChampTypeDescription
idString @idCle primaire
projectIdStringFK vers Project
uploaderIdStringFK vers User
assetTypeAssetType @default(PHOTO)Type (PHOTO, VIDEO, DOCUMENT)
statusAssetStatus @default(UPLOADING)Statut de traitement
storageKeyString @uniqueCle de stockage R2
originalUrlString?URL fichier original
previewUrlString?URL preview
thumbnailUrlString?URL miniature
sizeInBytesBigInt?Taille du fichier
skuString?SKU produit
viewString?Type de vue
viewIndexInt?Index de vue
variationString?Variation
extraFormatString?Format supplementaire
priorityInt @default(0)Priorite
isHighEndRetouchBoolean @default(false)Retouche high-end
isSelectedBoolean @default(false)Selection client
clientValidationStatusClientValidationStatus @default(PENDING)Statut validation
formatString?Format de fichier
uploadedAtDateTimeDate d'upload
deliveredAtDateTime?Date de livraison
deletedAtDateTime?Suppression logique
metadataJsonMetadonnees

Relations : project, uploader, comments, invoiceItems, retouchVersions, uploadSessions

GuidelineFile

ChampTypeDescription
idString @idCle primaire
organizationIdStringFK vers Organization
nameStringNom de la guideline
categoryGuidelineCategoryCategorie
filePathStringChemin stockage
fileNameStringNom du fichier
extensionStringExtension
sizeInBytesBigInt?Taille
viewStringType de vue
imageSpecificationsJson?Specifications image
referenceImagesJson?Images de reference

Relations : organization, guidelineOrganizationPrices, GuidelinePricingCategory, projects

RetouchRound

ChampTypeDescription
idString @idCle primaire
projectIdStringFK vers Project
roundNumberIntNumero de round
statusString @default("pending")Statut
startedAtDateTime?Date de debut
completedAtDateTime?Date de fin

Contrainte unique : [projectId, roundNumber]

RetouchVersion

ChampTypeDescription
idString @idCle primaire
roundIdStringFK vers RetouchRound
assetIdStringFK vers Asset
filePathStringChemin fichier
previewUrlString?URL preview
thumbnailUrlString?URL miniature
uploadedByIdStringFK vers User
statusString @default("pending")Statut
feedbackString?Feedback

Comment

ChampTypeDescription
idString @idCle primaire
projectIdStringFK vers Project
assetIdString?FK vers Asset (optionnel)
authorIdStringFK vers User
bodyStringContenu du commentaire
contextJson?Contexte (annotations, position)
repliedToIdString?FK vers Comment parent
deletedAtDateTime?Suppression logique

Relations : asset, author, project, parent, replies

WorkflowEvent

ChampTypeDescription
idString @idCle primaire
projectIdStringFK vers Project
actorIdStringFK vers User
fromStateProjectWorkflowState?Etat source
toStateProjectWorkflowStateEtat cible
messageString?Message
metadataJson?Metadonnees

Notification

ChampTypeDescription
idString @idCle primaire
typeStringType de notification
titleStringTitre
messageStringMessage
payloadJson?Donnees additionnelles
organizationIdString?FK vers Organization
projectIdString?FK vers Project

NotificationRecipient

ChampTypeDescription
idString @idCle primaire
notificationIdStringFK vers Notification
userIdStringFK vers User
channelNotificationChannel @default(IN_APP)Canal
statusString @default("pending")Statut livraison
deliveredAtDateTime?Date de livraison
readAtDateTime?Date de lecture

Contrainte unique : [notificationId, userId, channel]

Invoice

ChampTypeDescription
idString @idCle primaire
organizationIdStringFK vers Organization
projectIdString @uniqueFK vers Project (1:1)
stripeInvoiceIdString? @uniqueID Stripe
stripePaymentIntentIdString? @uniquePaymentIntent Stripe
stripeCheckoutSessionIdString? @uniqueCheckoutSession Stripe
stripeInvoiceUrlString?URL facture Stripe
stripeInvoicePdfString?URL PDF Stripe
stripeHostedUrlString?URL hebergee Stripe
totalCentsIntTotal en centimes
subtotalCentsIntSous-total
taxCentsInt @default(0)Taxes
currencyString @default("EUR")Devise
statusInvoiceStatus @default(DRAFT)Statut
dueDateDateTime?Date d'echeance
paidAtDateTime?Date de paiement
voidedAtDateTime?Date d'annulation

InvoiceItem

ChampTypeDescription
idString @idCle primaire
invoiceIdStringFK vers Invoice
descriptionStringDescription
quantityInt @default(1)Quantite
unitPriceCentsIntPrix unitaire
totalCentsIntTotal
currencyString @default("EUR")Devise
assetIdString?FK vers Asset
metadataJson?Metadonnees

Payment

ChampTypeDescription
idString @idCle primaire
organizationIdStringFK vers Organization
projectIdStringFK vers Project
invoiceIdString?FK vers Invoice
stripePaymentIntentIdString? @uniquePaymentIntent Stripe
stripeChargeIdString?Charge ID Stripe
statusPaymentStatus @default(PENDING)Statut
amountCentsIntMontant en centimes
currencyString @default("EUR")Devise
paymentMethodString?Methode de paiement
failureCodeString?Code erreur
failureMessageString?Message erreur
receiptUrlString?URL recu

ProjectPricingItem

ChampTypeDescription
idString @idCle primaire
projectIdStringFK vers Project
categoryIdString?FK vers RetouchCategory
labelString?Label
clientUnitPriceCentsIntPrix unitaire client
retoucherUnitPriceCentsIntPrix unitaire retoucheur
quantityIntQuantite
totalClientPriceCentsIntTotal client
totalRetoucherCostCentsIntTotal retoucheur
vatRatePercentFloat @default(20.0)Taux TVA

RetouchCategory

ChampTypeDescription
idString @idCle primaire
organizationIdStringFK vers Organization
codeStringCode unique par org
labelStringLabel
descriptionString?Description
isActiveBoolean @default(true)Actif

Contrainte unique : [organizationId, code]

ClientPricing

ChampTypeDescription
idString @idCle primaire
studioIdStringFK vers Organization (studio)
clientIdStringFK vers Organization (client)
categoryIdString?FK vers RetouchCategory
labelString?Label
clientUnitPriceCentsIntPrix unitaire client
vatRatePercentFloat @default(20.0)Taux TVA
currencyString @default("EUR")Devise

Contrainte unique : [studioId, clientId, categoryId]

UploadSession

ChampTypeDescription
idString @idCle primaire
projectIdStringFK vers Project
assetIdString?FK vers Asset
createdByIdStringFK vers User
providerString @default("r2")Provider de stockage
presignedUrlStringURL presignee
expiresAtDateTimeExpiration
completedAtDateTime?Date de completion
statusString @default("pending")Statut
metadataJson?Metadonnees

Session (Better Auth)

ChampTypeDescription
idString @idCle primaire
tokenString @uniqueToken de session
userIdStringFK vers User
expiresAtDateTimeExpiration
activeOrganizationIdString?Organisation active
impersonatedByString?Admin usurpateur
ipAddressString?Adresse IP
userAgentString?User Agent

Account

ChampTypeDescription
idString @idCle primaire
userIdStringFK vers User
providerIdStringID provider OAuth
accountIdStringID compte externe
accessTokenString?Token d'acces
refreshTokenString?Token de rafraichissement
accessTokenExpiresAtDateTime?Expiration token
tokenTypeString?Type de token
scopeString?Scopes

Contrainte unique : [providerId, accountId]

ImportJob

ChampTypeDescription
idString @idCle primaire
organizationIdStringFK vers Organization
typeImportJobTypePENNYLANE_CUSTOMERS
statusImportJobStatus @default(PENDING)Statut
totalItemsInt?Total elements
processedItemsInt @default(0)Elements traites
importedItemsInt @default(0)Elements importes
skippedItemsInt @default(0)Elements ignores
failedItemsInt @default(0)Elements en erreur
configJson?Configuration
lastCursorString?Dernier curseur
errorMessageString?Message d'erreur
completedAtDateTime?Date de completion

FtpSyncJob

ChampTypeDescription
idString @idCle primaire
projectIdStringFK vers Project
integrationIdStringID integration
directionFtpSyncDirectionPUSH ou PULL
folderTypeFtpSyncFolderTypeRAW ou RETOUCHED
statusFtpSyncStatus @default(PENDING)Statut
filesTotalInt @default(0)Fichiers total
filesProcessedInt @default(0)Fichiers traites
filesSkippedInt @default(0)Fichiers ignores
errorMessageString?Message d'erreur
completedAtDateTime?Date de completion

DownloadEvent

ChampTypeDescription
idString @idCle primaire
projectIdStringFK vers Project
userIdStringFK vers User
assetIdsString[]IDs des assets telecharges
assetCountIntNombre d'assets
downloadTypeStringType de telechargement

LegalAgreementConsent

ChampTypeDescription
idString @idCle primaire
userIdStringFK vers User
invitationIdString?FK vers Invitation
documentLegalDocumentTypeTERMS_OF_USE ou PRIVACY_POLICY
versionStringVersion du document
localeString? @default("fr")Locale
acceptedAtDateTimeDate d'acceptation

GuidelinePricingCategory

ChampTypeDescription
idString @idCle primaire
guidelineIdStringFK vers GuidelineFile
nameStringNom de la categorie
basePriceCentsIntPrix de base
retoucherBasePriceCentsInt @default(0)Prix retoucheur de base
currencyString @default("EUR")Devise

GuidelineOrganizationPrice

ChampTypeDescription
idString @idCle primaire
guidelineIdStringFK vers GuidelineFile
organizationIdStringFK vers Organization
guidelinePricingCategoryIdString?FK vers GuidelinePricingCategory
priceCentsIntPrix en centimes
currencyString @default("EUR")Devise

Contrainte unique : [guidelineId, organizationId, guidelinePricingCategoryId]

RetouchingCategoryPrice

ChampTypeDescription
idString @idCle primaire
studioIdStringFK vers Organization
categoryRetouchingCategoryCategorie de retouche
unitPriceCentsIntPrix unitaire
currencyString @default("EUR")Devise

Contrainte unique : [studioId, category]

IntegrationInstallation

ChampTypeDescription
idString @idCle primaire
organizationIdStringFK vers Organization
integrationIdStringID integration
settingsJson?Configuration

Contrainte unique : [organizationId, integrationId]