Skip to content

Latest commit

 

History

History
123 lines (100 loc) · 2.95 KB

File metadata and controls

123 lines (100 loc) · 2.95 KB

05 - Database Design

Overview

MultiWA uses PostgreSQL with Prisma ORM for type-safe database access.


Entity Relationship Diagram

┌────────────────┐       ┌────────────────┐
│  Organization  │───────│   Workspace    │
└────────────────┘       └───────┬────────┘
                                 │
                    ┌────────────┼────────────┐
                    │            │            │
             ┌──────▼───┐  ┌─────▼────┐ ┌─────▼────┐
             │ Profile  │  │  Account │ │  User    │
             └────┬─────┘  └──────────┘ └──────────┘
                  │
     ┌────────────┼────────────┬─────────────┐
     │            │            │             │
┌────▼───┐  ┌─────▼────┐ ┌─────▼────┐ ┌──────▼─────┐
│Contact │  │ Message  │ │Broadcast │ │ Automation │
└────────┘  └──────────┘ └──────────┘ └────────────┘

Core Models

Profile (WhatsApp Session)

model Profile {
  id          String    @id @default(cuid())
  name        String
  phone       String?
  status      SessionStatus @default(DISCONNECTED)
  engine      EngineType    @default(BAILEYS)
  webhookUrl  String?
  createdAt   DateTime  @default(now())
  
  contacts    Contact[]
  messages    Message[]
  broadcasts  Broadcast[]
}

Contact

model Contact {
  id        String   @id @default(cuid())
  phone     String
  name      String?
  email     String?
  tags      String[] @default([])
  metadata  Json?
  
  profileId String
  profile   Profile  @relation(...)
}

Message

model Message {
  id          String      @id @default(cuid())
  waMessageId String?     @unique
  fromMe      Boolean
  type        MessageType
  content     String
  status      MessageStatus
  timestamp   DateTime    @default(now())
  
  profileId   String
  contactId   String?
}

Enums

enum SessionStatus {
  DISCONNECTED
  CONNECTING
  QR_READY
  CONNECTED
}

enum EngineType {
  BAILEYS
  WHATSAPP_WEB_JS
}

enum MessageType {
  TEXT
  IMAGE
  VIDEO
  AUDIO
  DOCUMENT
  LOCATION
  CONTACT
  POLL
}

Indexes

@@index([profileId])
@@index([phone])
@@index([createdAt])
@@index([status])

← System Architecture · Documentation Index · Engine Abstraction →