πŸ—οΈ Architecture

Notification Architecture

How notifications flow through the Gauzy system.

Notification Channels

Diagram; its source is available below
Diagram source
graph TB
    Event[Business Event] --> NService[Notification Service]
    NService --> InApp[In-App Notification]
    NService --> Email[Email Notification]
    NService --> Push[Push Notification]
    NService --> WS[WebSocket Real-Time]

Channel Matrix

EventIn-AppEmailPushWebSocket
Task assignedβœ…βœ…βœ…βœ…
Timesheet submittedβœ…βœ…βŒβœ…
Timesheet approvedβœ…βœ…βœ…βœ…
Invoice sentβœ…βœ…βŒβŒ
@mentionβœ…βœ…βœ…βœ…
Team updateβœ…βŒβŒβœ…
Timer startedβŒβŒβŒβœ…

Service Implementation

@Injectable()
export class NotificationService {
  async notify(recipientId: string, type: NotificationType, data: any) {
    // 1. Check user preferences
    const prefs = await this.getPreferences(recipientId);

    // 2. Create in-app notification
    if (prefs.inApp) {
      await this.createInAppNotification(recipientId, type, data);
    }

    // 3. Send email
    if (prefs.email) {
      await this.emailQueue.add("notify", { recipientId, type, data });
    }

    // 4. Push via WebSocket
    if (prefs.push) {
      this.wsGateway.sendToUser(recipientId, "notification", { type, data });
    }
  }
}

User Preferences

Users configure notification preferences per channel:

{
  "assignTask": { "inApp": true, "email": true, "push": true },
  "mention": { "inApp": true, "email": true, "push": true },
  "approval": { "inApp": true, "email": true, "push": false },
  "teams": { "inApp": true, "email": false, "push": false }
}

Edit this page

Copyright Β© 2023-Present Ever Co. LTD.Docs by Sourcey