schemaVersion: "1"
type: "design"
id: "new-design"
nodes:
  - id: "desktop-app"
    component: "desktop-app"
    group: "system"
  - id: "mobile-app"
    component: "mobile-app"
    group: "system"
  - id: "sdk-client"
    component: "sdk-client"
  - id: "web-browser"
    component: "web-browser"
    group: "system"
  - id: "cdn"
    component: "cloudflare-cdn"
    group: "system-6"
    label: "CDN"
  - id: "backend"
    component: "azure-app-service"
    label: "Backend"
    group: "system-7"
  - id: "notifications-function"
    component: "azure-functions"
    label: "Notifications Function"
    group: "system-7"
  - id: "new-notifications-queue"
    component: "azure-queue-storage"
    label: "New Notifications Queue"
    props:
      deadLetterQueue: true
    group: "system-7"
  - id: "notifications-function-2"
    component: "azure-functions"
    label: "Notifications Orchestrator"
    group: "system-7"
  - id: "new-notifications-queue-2"
    component: "azure-queue-storage"
    label: "Android Notifications Queue"
    props:
      deadLetterQueue: true
    group: "system-7"
  - id: "new-notifications-queue-3"
    component: "azure-queue-storage"
    label: "iOS Notifications Queue"
    props:
      deadLetterQueue: true
    group: "system-7"
  - id: "new-notifications-queue-4"
    component: "azure-queue-storage"
    label: "SMS Notifications Queue"
    props:
      deadLetterQueue: true
    group: "system-7"
  - id: "new-notifications-queue-5"
    component: "azure-queue-storage"
    label: "Email Notifications Queue"
    props:
      deadLetterQueue: true
    group: "system-7"
  - id: "sms-notifications-worker"
    component: "azure-functions"
    label: "Android Notifications Worker"
    group: "system-4"
  - id: "sms-notifications-worker-2"
    component: "azure-functions"
    label: "iOS Notifications Worker"
    group: "system-4"
  - id: "sms-notifications-worker-3"
    component: "azure-functions"
    label: "SMS Notifications Worker"
    group: "system-4"
  - id: "sms-notifications-worker-4"
    component: "azure-functions"
    label: "Email Notifications Worker"
    group: "system-4"
  - id: "apn"
    component: "apns"
    label: "APN"
    group: "system-3"
  - id: "fcm"
    component: "fcm"
    label: "FCM"
    group: "system-3"
  - id: "azure-communication-services"
    component: "azure-communication-services"
    group: "system-3"
  - id: "ios"
    component: "mobile-app"
    label: "iOS"
    group: "system-5"
  - id: "web-browser-2"
    component: "web-browser"
    group: "system-2"
  - id: "desktop-app-2"
    component: "desktop-app"
    group: "system-2"
  - id: "notifications-database"
    component: "azure-sql"
    label: "Notifications Database"
    group: "system-7"
  - id: "android"
    component: "mobile-app"
    label: "Android"
    group: "system-5"
  - id: "android-2"
    component: "mobile-app"
    label: "Other"
    group: "system-5"
  - id: "rate-limiter"
    component: "cloudflare-rate-limiting"
    group: "system-6"
    label: "Rate Limiter"
  - id: "notification-templates"
    component: "azure-cache-for-redis"
    label: "Notification Templates"
    group: "system-7"
  - id: "logs"
    component: "azure-log-analytics"
    label: "Logs"
    group: "system-8"
  - id: "monitor"
    component: "azure-monitor"
    label: "Monitor"
    group: "system-8"
  - id: "azure-application-insights"
    component: "azure-application-insights"
    group: "system-8"
  - id: "kusto"
    component: "azure-data-explorer"
    label: "KUSTO"
    group: "system-8"
edges:
  - from: "notifications-function-2"
    to: "new-notifications-queue-2"
    protocol: "http"
    mode: "sync"
    auth: "managed-identity"
  - from: "sms-notifications-worker-3"
    to: "azure-communication-services"
    protocol: "http"
    mode: "sync"
    auth: "managed-identity"
  - from: "system-6"
    to: "notifications-function"
    protocol: "http"
    mode: "sync"
    label: "Function Key"
    auth: "api-key"
  - from: "backend"
    to: "notifications-function"
    protocol: "http"
    mode: "sync"
    auth: "managed-identity"
  - from: "notifications-function"
    to: "new-notifications-queue"
    protocol: "http"
    mode: "sync"
    auth: "managed-identity"
  - from: "notifications-function-2"
    to: "new-notifications-queue"
    protocol: "http"
    mode: "sync"
    auth: "managed-identity"
    label: "Trigger"
  - from: "notifications-function-2"
    to: "new-notifications-queue-4"
    protocol: "http"
    mode: "sync"
    auth: "managed-identity"
  - from: "notifications-function-2"
    to: "new-notifications-queue-5"
    protocol: "http"
    mode: "sync"
    auth: "managed-identity"
  - from: "notifications-function-2"
    to: "new-notifications-queue-3"
    protocol: "http"
    mode: "sync"
    auth: "managed-identity"
  - from: "new-notifications-queue-2"
    to: "sms-notifications-worker"
    protocol: "http"
    mode: "sync"
    auth: "managed-identity"
  - from: "new-notifications-queue-3"
    to: "sms-notifications-worker-2"
    protocol: "http"
    mode: "sync"
    auth: "managed-identity"
  - from: "new-notifications-queue-4"
    to: "sms-notifications-worker-3"
    protocol: "http"
    mode: "sync"
    auth: "managed-identity"
  - from: "new-notifications-queue-5"
    to: "sms-notifications-worker-4"
    protocol: "http"
    mode: "sync"
    auth: "managed-identity"
  - from: "sms-notifications-worker-4"
    to: "azure-communication-services"
    protocol: "http"
    mode: "sync"
    auth: "managed-identity"
  - from: "sms-notifications-worker"
    to: "fcm"
    protocol: "http"
    mode: "sync"
    auth: "service-account"
  - from: "sms-notifications-worker-2"
    to: "apn"
    protocol: "http"
    mode: "sync"
    auth: "service-account"
  - from: "azure-communication-services"
    to: "system-2"
    protocol: "http"
    mode: "sync"
  - from: "system-4"
    to: "notifications-database"
    protocol: "http"
    mode: "sync"
    auth: "managed-identity"
    label: "Store"
  - from: "system-3"
    to: "system-5"
    protocol: "http"
    mode: "sync"
  - from: "system-4"
    to: "notification-templates"
    protocol: "http"
    mode: "sync"
    auth: "managed-identity"
  - from: "system-7"
    to: "system-8"
    protocol: "http"
    mode: "sync"
    auth: "managed-identity"
  - from: "system"
    to: "system-6"
    protocol: "http"
    mode: "sync"
  - from: "sdk-client"
    to: "system-6"
    protocol: "http"
    mode: "sync"
  - from: "system-6"
    to: "backend"
    protocol: "http"
    mode: "sync"
groups:
  - id: "system"
    kind: "system"
    label: "Users"
  - id: "system-2"
    kind: "system"
    label: "Desktop/Browser"
  - id: "system-3"
    kind: "system"
    label: "Mobile"
    parent: "system-7"
  - id: "system-4"
    kind: "system"
    label: "Workers"
    parent: "system-7"
  - id: "system-5"
    kind: "system"
  - id: "system-6"
    kind: "system"
    label: "CDN"
  - id: "system-7"
    kind: "system"
    label: "Resources"
  - id: "system-8"
    kind: "system"
    label: "Logs & Analytics"
requirements:
  security:
    credentialRotationDays: 0
