generator client { provider = "prisma-client-js" } datasource db { provider = "postgresql" } model User { id String @id @default(uuid()) name String email String @unique password String role UserRole @default(VISITOR) avatar String? createdAt DateTime @default(now()) updatedAt DateTime @updatedAt bio String? location String? phone String? isSuspended Boolean @default(false) suspensionReason String? businesses Business? comments Comment[] conversations ConversationParticipant[] sentMessages Message[] reports MessageReport[] } model Business { id String @id @default(uuid()) name String category String location String description String logoUrl String videoUrl String? contactEmail String contactPhone String? socialLinks Json? verified Boolean @default(false) viewCount Int @default(0) rating Float @default(0.0) tags String[] isFeatured Boolean @default(false) founderName String? founderImageUrl String? keyMetric String? ownerId String @unique createdAt DateTime @default(now()) updatedAt DateTime @updatedAt slug String? @unique isActive Boolean @default(false) showEmail Boolean @default(true) showPhone Boolean @default(true) showSocials Boolean @default(true) websiteUrl String? isSuspended Boolean @default(false) suspensionReason String? owner User @relation(fields: [ownerId], references: [id]) comments Comment[] conversations Conversation[] offers Offer[] } model Offer { id String @id @default(uuid()) title String type OfferType price Float currency String @default("XOF") description String? imageUrl String active Boolean @default(true) businessId String createdAt DateTime @default(now()) updatedAt DateTime @updatedAt business Business @relation(fields: [businessId], references: [id], onDelete: Cascade) } model BlogPost { id String @id @default(uuid()) title String excerpt String content String author String date DateTime @default(now()) imageUrl String createdAt DateTime @default(now()) updatedAt DateTime @updatedAt } model Interview { id String @id @default(uuid()) title String guestName String companyName String role String type InterviewType thumbnailUrl String videoUrl String? content String? excerpt String date DateTime @default(now()) duration String? createdAt DateTime @default(now()) updatedAt DateTime @updatedAt } model Comment { id String @id @default(uuid()) content String authorId String businessId String createdAt DateTime @default(now()) updatedAt DateTime @updatedAt author User @relation(fields: [authorId], references: [id], onDelete: Cascade) business Business @relation(fields: [businessId], references: [id], onDelete: Cascade) } model AnalyticsEvent { id String @id @default(uuid()) type String path String label String? value Float? metadata Json? createdAt DateTime @default(now()) } model Conversation { id String @id @default(uuid()) businessId String createdAt DateTime @default(now()) updatedAt DateTime @updatedAt business Business @relation(fields: [businessId], references: [id], onDelete: Cascade) participants ConversationParticipant[] messages Message[] } model ConversationParticipant { id String @id @default(uuid()) userId String conversationId String isArchived Boolean @default(false) conversation Conversation @relation(fields: [conversationId], references: [id], onDelete: Cascade) user User @relation(fields: [userId], references: [id], onDelete: Cascade) @@unique([userId, conversationId]) } model Message { id String @id @default(uuid()) content String senderId String conversationId String createdAt DateTime @default(now()) read Boolean @default(false) conversation Conversation @relation(fields: [conversationId], references: [id], onDelete: Cascade) sender User @relation(fields: [senderId], references: [id], onDelete: Cascade) reports MessageReport[] } model MessageReport { id String @id @default(uuid()) reason String? messageId String reporterId String status ReportStatus @default(PENDING) createdAt DateTime @default(now()) message Message @relation(fields: [messageId], references: [id], onDelete: Cascade) reporter User @relation(fields: [reporterId], references: [id], onDelete: Cascade) } enum ReportStatus { PENDING RESOLVED DISMISSED } enum UserRole { VISITOR ENTREPRENEUR ADMIN } enum OfferType { PRODUCT SERVICE } enum InterviewType { VIDEO ARTICLE }