etouch docs
Base de donnees

Base de donnees

Vue d'ensemble du schema PostgreSQL et de l'ORM Prisma dans etouch

etouch utilise PostgreSQL avec Prisma ORM. Le schema est defini dans packages/db/prisma/schema.prisma.

Vue d'ensemble des relations

┌──────────────┐     ┌──────────────────┐     ┌─────────────┐
│ Organization │────>│ UserOrganization │<────│    User     │
└──────────────┘     └──────────────────┘     └─────────────┘
       │                                             │
       ├── Projects ─────────────── Assets ──── RetouchVersions
       ├── GuidelineFiles                            │
       ├── Invoices ──── InvoiceItems         UploadSessions
       ├── Payments                                  │
       └── Notifications ─── NotificationRecipients ─┘

Modeles principaux

ModeleDescriptionTable
OrganizationOrganisations multi-tenant (studio, client, retoucher, platform)Organization
UserUtilisateurs avec appartenance multi-organisationsUser
UserOrganizationJointure utilisateur-organisation avec rolesUserOrganization
ProjectProjets de retouche avec machine a etats workflowProject
AssetFichiers individuels (photos, videos, documents)Asset
GuidelineFileSpecifications et images de reference pour la retoucheGuidelineFile
RetouchRoundRounds de retouche (iterations)RetouchRound
RetouchVersionVersions de retouche par assetRetouchVersion
CommentCommentaires sur projets et assetsComment
WorkflowEventHistorique des transitions workflowWorkflowEvent

Modeles de facturation

ModeleDescription
InvoiceFactures integrees Stripe
InvoiceItemLignes de facture
PaymentTransactions de paiement
ProjectPricingItemTarification par projet
RetouchCategoryCategories de retouche (studio)
ClientPricingTarifs client par studio
GuidelinePricingCategoryCategories de prix des guidelines
GuidelineOrganizationPricePrix des guidelines par organisation

Modeles de notification

ModeleDescription
NotificationNotifications multi-canal
NotificationRecipientLivraison par utilisateur

Modeles d'authentification

ModeleDescription
SessionSessions Better Auth avec org active
AccountLiaison de comptes OAuth
VerificationTokens de verification
InvitationInvitations utilisateurs

Modeles d'integration

ModeleDescription
IntegrationInstallationInstallations d'integrations par org
ImportJobJobs d'import (Pennylane, etc.)
FtpSyncJobJobs de synchronisation FTP

Enums importantes

EnumValeurs
OrganizationTypePLATFORM, STUDIO, CLIENT, RETOUCHER
UserRoleSUPER_ADMIN, ADMIN, PLATFORM_ADMIN, STUDIO_ADMIN, STUDIO_USER, CLIENT_ADMIN, CLIENT_USER, RETOUCH_ADMIN, RETOUCH_USER
ProjectWorkflowStateSTUDIO_REVIEW, CLIENT_REVIEW, SELECTION_CONFIRMATION, IN_RETOUCH, CLIENT_VALIDATION, DONE, ARCHIVED
AssetTypePHOTO, VIDEO, DOCUMENT
AssetStatusUPLOADING, UPLOADED, PROCESSING, READY, DELIVERED, ARCHIVED
PaymentStatusUNPAID, PAID, PENDING, PROCESSING, SUCCEEDED, FAILED, CANCELED, REFUNDED
InvoiceStatusDRAFT, OPEN, PAID, VOID, UNCOLLECTIBLE

Index principaux

-- Organizations
@@index([parentOrganizationId])
@@index([stripeCustomerId])

-- Users
@@index([email])

-- Projects
@@index([studioId])
@@index([clientId])
@@index([workflowState])
@@index([publicToken])

-- Assets
@@index([projectId, status])
@@index([projectId, extraFormat])
@@index([assetType])

-- Notifications
@@index([organizationId])
@@index([projectId])
@@index([createdAt])

Commandes de migration

# Generer le client Prisma
pnpm prisma:generate

# Appliquer les migrations
pnpm prisma:migrate

# Creer une nouvelle migration
pnpm --filter @etouch/db db:migrate:dev --name nom_migration

# Ouvrir Prisma Studio
pnpm prisma:studio

# Migration securisee (avec backup)
pnpm db:migrate:safe

Le projet utilise prisma migrate deploy (pas de shadow database).