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.id: Unique identifier (CUID)name: User’s full nameemail: Unique email addressemailVerified: Whether email is verifiedimage: Optional profile image URLrole: User’s permission level (defaults to GUEST)createdAt: Account creation timestampupdatedAt: Last update timestamp
sessions: Authentication sessions for this useraccounts: OAuth/credential accounts for this user
WhatsAppSession
WhatsApp connection session for sending messages.id: Unique identifiersessionName: Unique session name for WAHA APIphoneNumber: Associated phone numberuserId: Owner user ID (unique)status: Connection statuscreatedAt: Session creation timestampupdatedAt: Last update timestamp
WhatsAppGroups: Groups accessible through this sessionMessageCampaign: Campaigns using this session
- Each user can have only one session
- Unique combination of userId and status
WhatsAppGroup
WhatsApp group or contact for sending messages.id: Unique identifiergroupName: Display name of group or contactgroupId: WhatsApp group ID or contact IDsessionId: Associated session IDcreatedAt: Creation timestampupdatedAt: Last update timestamp
session: Parent WhatsApp session (cascades on delete)campaigns: Message campaigns targeting this group
- Unique combination of groupId and sessionId
MessageCampaign
Scheduled message campaign for a group or contact.id: Unique identifiersessionId: WhatsApp session to usegroupId: Target group or contacttitle: Optional campaign titletargetAmount: Optional fundraising targetstartDate: Campaign start dateendDate: Campaign end datesendTimeUtc: Scheduled send time (UTC)timeZone: User’s time zone for schedulingtemplate: Message template with placeholdersstatus: Campaign lifecycle statusrecurrence: Recurrence pattern (if recurring)isRecurring: Whether campaign repeatsisDeleted: Soft delete flagisEdited: Whether campaign was modifiedisCompleted: Whether all messages sentnextSendAt: Next scheduled send timecreatedAt: Creation timestampupdatedAt: Last update timestamp
session: WhatsApp session (cascades on delete)group: Target group (cascades on delete)messages: Individual scheduled messages
Message
Individual scheduled message in a campaign.id: Unique identifiersessionId: WhatsApp session to usecontent: Rendered message contentscheduledAt: When to send the messagesentAt: Actual send timestampisPicked: Whether message is being processedretryCount: Number of send attemptsmaxRetries: Maximum retry attempts (default 3)MessageCampaignId: Parent campaign IDisDeleted: Soft delete flagisEdited: Whether message was modifiedisSent: Whether message was sent successfullyisFailed: Whether message failed permanentlyfailedReason: Error message if failedcreatedAt: Creation timestampupdatedAt: Last update timestamp
MessageCampaign: Parent campaign (cascades on delete)
Session
User authentication session (Better Auth).id: Unique identifierexpiresAt: Session expiration timestamptoken: Unique session tokencreatedAt: Session creation timestampupdatedAt: Last activity timestampipAddress: Client IP addressuserAgent: Client user agentuserId: Associated user ID
user: Session owner (cascades on delete)
Account
OAuth provider or credential account (Better Auth).id: Unique identifieraccountId: Provider account IDproviderId: OAuth provider IDuserId: Associated user IDaccessToken: OAuth access tokenrefreshToken: OAuth refresh tokenidToken: OAuth ID tokenaccessTokenExpiresAt: Access token expirationrefreshTokenExpiresAt: Refresh token expirationscope: OAuth scopespassword: Hashed password (for credential provider)createdAt: Creation timestampupdatedAt: Last update timestamp
user: Account owner (cascades on delete)
Verification
Email verification and password reset tokens.id: Unique identifieridentifier: User identifier (email)value: Verification tokenexpiresAt: Token expiration timestampcreatedAt: Creation timestampupdatedAt: Last update timestamp