Skip to main content
The WhatsApp WAHA Dashboard uses MongoDB with Prisma ORM. This page documents all database models and their relationships.

Overview

The database schema consists of the following main entities:
  • User: Application users with role-based access
  • WhatsAppSession: WhatsApp connection sessions
  • WhatsAppGroup: WhatsApp groups and contacts
  • MessageCampaign: Scheduled message campaigns
  • Message: Individual scheduled messages
  • Session: User authentication sessions
  • Account: OAuth and credential accounts
  • Verification: Email verification tokens

Enums

UserRole

User permission levels in the application.

CampaignStatus

Lifecycle status of message campaigns.

WhatsAppSessionStatus

Connection status of WhatsApp sessions.

Recurrence

Recurrence patterns for message campaigns.

Models

User

Application users with authentication and authorization.
Fields:
  • id: Unique identifier (CUID)
  • name: User’s full name
  • email: Unique email address
  • emailVerified: Whether email is verified
  • image: Optional profile image URL
  • role: User’s permission level (defaults to GUEST)
  • createdAt: Account creation timestamp
  • updatedAt: Last update timestamp
Relations:
  • sessions: Authentication sessions for this user
  • accounts: OAuth/credential accounts for this user

WhatsAppSession

WhatsApp connection session for sending messages.
Fields:
  • id: Unique identifier
  • sessionName: Unique session name for WAHA API
  • phoneNumber: Associated phone number
  • userId: Owner user ID (unique)
  • status: Connection status
  • createdAt: Session creation timestamp
  • updatedAt: Last update timestamp
Relations:
  • WhatsAppGroups: Groups accessible through this session
  • MessageCampaign: Campaigns using this session
Constraints:
  • Each user can have only one session
  • Unique combination of userId and status

WhatsAppGroup

WhatsApp group or contact for sending messages.
Fields:
  • id: Unique identifier
  • groupName: Display name of group or contact
  • groupId: WhatsApp group ID or contact ID
  • sessionId: Associated session ID
  • createdAt: Creation timestamp
  • updatedAt: Last update timestamp
Relations:
  • session: Parent WhatsApp session (cascades on delete)
  • campaigns: Message campaigns targeting this group
Constraints:
  • Unique combination of groupId and sessionId

MessageCampaign

Scheduled message campaign for a group or contact.
Fields:
  • id: Unique identifier
  • sessionId: WhatsApp session to use
  • groupId: Target group or contact
  • title: Optional campaign title
  • targetAmount: Optional fundraising target
  • startDate: Campaign start date
  • endDate: Campaign end date
  • sendTimeUtc: Scheduled send time (UTC)
  • timeZone: User’s time zone for scheduling
  • template: Message template with placeholders
  • status: Campaign lifecycle status
  • recurrence: Recurrence pattern (if recurring)
  • isRecurring: Whether campaign repeats
  • isDeleted: Soft delete flag
  • isEdited: Whether campaign was modified
  • isCompleted: Whether all messages sent
  • nextSendAt: Next scheduled send time
  • createdAt: Creation timestamp
  • updatedAt: Last update timestamp
Relations:
  • session: WhatsApp session (cascades on delete)
  • group: Target group (cascades on delete)
  • messages: Individual scheduled messages

Message

Individual scheduled message in a campaign.
Fields:
  • id: Unique identifier
  • sessionId: WhatsApp session to use
  • content: Rendered message content
  • scheduledAt: When to send the message
  • sentAt: Actual send timestamp
  • isPicked: Whether message is being processed
  • retryCount: Number of send attempts
  • maxRetries: Maximum retry attempts (default 3)
  • MessageCampaignId: Parent campaign ID
  • isDeleted: Soft delete flag
  • isEdited: Whether message was modified
  • isSent: Whether message was sent successfully
  • isFailed: Whether message failed permanently
  • failedReason: Error message if failed
  • createdAt: Creation timestamp
  • updatedAt: Last update timestamp
Relations:
  • MessageCampaign: Parent campaign (cascades on delete)

Session

User authentication session (Better Auth).
Fields:
  • id: Unique identifier
  • expiresAt: Session expiration timestamp
  • token: Unique session token
  • createdAt: Session creation timestamp
  • updatedAt: Last activity timestamp
  • ipAddress: Client IP address
  • userAgent: Client user agent
  • userId: Associated user ID
Relations:
  • user: Session owner (cascades on delete)

Account

OAuth provider or credential account (Better Auth).
Fields:
  • id: Unique identifier
  • accountId: Provider account ID
  • providerId: OAuth provider ID
  • userId: Associated user ID
  • accessToken: OAuth access token
  • refreshToken: OAuth refresh token
  • idToken: OAuth ID token
  • accessTokenExpiresAt: Access token expiration
  • refreshTokenExpiresAt: Refresh token expiration
  • scope: OAuth scopes
  • password: Hashed password (for credential provider)
  • createdAt: Creation timestamp
  • updatedAt: Last update timestamp
Relations:
  • user: Account owner (cascades on delete)

Verification

Email verification and password reset tokens.
Fields:
  • id: Unique identifier
  • identifier: User identifier (email)
  • value: Verification token
  • expiresAt: Token expiration timestamp
  • createdAt: Creation timestamp
  • updatedAt: Last update timestamp

Relationships Diagram


Database Configuration

Environment Variable: