# ecommerce-taca/notification-service architecture

> Architecture diagram of the GitHub repository ecommerce-taca/notification-service, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-11-11). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/ecommerce-taca/notification-service
- Repository: https://github.com/ecommerce-taca/notification-service

## Overview

Taca is a notification service: it accepts commands and domain events through Kafka, prepares notification content, delivers email and in-app notifications, and exposes notification-center and administrative APIs. Its runtime also tracks delivery attempts and retries failures. The README documents the overall workflow and capabilities; several internal links below are dashed because the relevant implementation excerpts were not provided.

Main entry points: [`src/modules/dispatcher/dispatcher.service.ts`](https://github.com/ecommerce-taca/notification-service/blob/main/src/modules/dispatcher/dispatcher.service.ts) (Dispatcher), [`src/modules/notification/notification.service.ts`](https://github.com/ecommerce-taca/notification-service/blob/main/src/modules/notification/notification.service.ts) (Notification service), [`src/modules/in-app/notification.controller.ts`](https://github.com/ecommerce-taca/notification-service/blob/main/src/modules/in-app/notification.controller.ts) (In-app API), [`src/modules/admin/admin.controller.ts`](https://github.com/ecommerce-taca/notification-service/blob/main/src/modules/admin/admin.controller.ts) (Admin API)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_ingest["Event ingestion"]
  node_consumer["Kafka consumer"]
end

subgraph group_workflow["Notification workflow"]
  node_notification["Notification service"]
  node_dispatcher["Dispatcher"]
  node_templates["Template service"]
  node_preferences["Preference service"]
end

subgraph group_delivery["Delivery operations"]
  node_delivery["Delivery service"]
  node_retry["Retry and sweep"]
  node_outbox["Outbox relay"]
end

subgraph group_api["User and admin APIs"]
  node_inapp["In-app API"]
  node_inappservice["In-app service<br/>[in-app.service.ts]"]
  node_admin["Admin API"]
  node_adminservice["Admin service<br/>[admin.service.ts]"]
end

subgraph group_infra["Persistence and infrastructure"]
  node_auth["JWT verification<br/>[auth.guard.ts]"]
  node_mysql[("MySQL persistence<br/>[data-source.ts]")]
end

node_producer(("Event producers"))
node_kafka["Kafka"]
node_smtp["SMTP email"]
node_apiusers(("API users"))

node_producer -->|"publishes events"| node_kafka
node_kafka -->|"delivers messages"| node_consumer
node_consumer -.->|"initiates processing"| node_notification
node_notification -.->|"persists notifications"| node_mysql
node_delivery -->|"dispatches notification"| node_dispatcher
node_dispatcher -->|"loads template"| node_templates
node_dispatcher -->|"checks preference"| node_preferences
node_dispatcher -->|"sends email"| node_smtp
node_delivery -.->|"retries failures"| node_retry
node_outbox -.->|"publishes outcomes"| node_kafka
node_apiusers -->|"requests notifications"| node_inapp
node_inapp -->|"handles request"| node_inappservice
node_inappservice -.->|"reads and updates"| node_mysql
node_apiusers -.->|"requests delivery data"| node_admin
node_admin -->|"handles request"| node_adminservice
node_adminservice -->|"queries delivery"| node_delivery
node_adminservice -->|"queries notifications"| node_notification
node_inapp -->|"authenticates requests"| node_auth
node_admin -->|"authenticates requests"| node_auth
node_notification -->|"uses repository port"| node_mysql

click node_consumer "https://github.com/ecommerce-taca/notification-service/blob/main/src/modules/consumer/notification.consumer.ts"
click node_notification "https://github.com/ecommerce-taca/notification-service/blob/main/src/modules/notification/notification.service.ts"
click node_dispatcher "https://github.com/ecommerce-taca/notification-service/blob/main/src/modules/dispatcher/dispatcher.service.ts"
click node_templates "https://github.com/ecommerce-taca/notification-service/blob/main/src/modules/template/template.service.ts"
click node_preferences "https://github.com/ecommerce-taca/notification-service/blob/main/src/modules/preference/preference.service.ts"
click node_delivery "https://github.com/ecommerce-taca/notification-service/blob/main/src/modules/delivery/delivery.service.ts"
click node_retry "https://github.com/ecommerce-taca/notification-service/blob/main/src/modules/delivery/delivery-retry.service.ts"
click node_outbox "https://github.com/ecommerce-taca/notification-service/blob/main/src/modules/delivery/delivery-outbox-relay.service.ts"
click node_inapp "https://github.com/ecommerce-taca/notification-service/blob/main/src/modules/in-app/notification.controller.ts"
click node_inappservice "https://github.com/ecommerce-taca/notification-service/blob/main/src/modules/in-app/in-app.service.ts"
click node_admin "https://github.com/ecommerce-taca/notification-service/blob/main/src/modules/admin/admin.controller.ts"
click node_adminservice "https://github.com/ecommerce-taca/notification-service/blob/main/src/modules/admin/admin.service.ts"
click node_auth "https://github.com/ecommerce-taca/notification-service/blob/main/src/infrastructure/auth/auth.guard.ts"
click node_mysql "https://github.com/ecommerce-taca/notification-service/blob/main/src/infrastructure/persistence/data-source.ts"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_consumer,node_apiusers toneBlue
class node_notification,node_dispatcher,node_templates,node_preferences toneAmber
class node_delivery,node_retry,node_outbox toneMint
class node_inapp,node_inappservice,node_admin,node_adminservice toneRose
class node_auth,node_mysql,node_producer,node_kafka,node_smtp toneIndigo
```

## Components

### Event ingestion

- [Kafka consumer](https://github.com/ecommerce-taca/notification-service/blob/main/src/modules/consumer/notification.consumer.ts): `src/modules/consumer/notification.consumer.ts`

### Notification workflow

- [Notification service](https://github.com/ecommerce-taca/notification-service/blob/main/src/modules/notification/notification.service.ts): `src/modules/notification/notification.service.ts`
- [Dispatcher](https://github.com/ecommerce-taca/notification-service/blob/main/src/modules/dispatcher/dispatcher.service.ts): `src/modules/dispatcher/dispatcher.service.ts`
- [Template service](https://github.com/ecommerce-taca/notification-service/blob/main/src/modules/template/template.service.ts): `src/modules/template/template.service.ts`
- [Preference service](https://github.com/ecommerce-taca/notification-service/blob/main/src/modules/preference/preference.service.ts): `src/modules/preference/preference.service.ts`

### Delivery operations

- [Delivery service](https://github.com/ecommerce-taca/notification-service/blob/main/src/modules/delivery/delivery.service.ts): `src/modules/delivery/delivery.service.ts`
- [Retry and sweep](https://github.com/ecommerce-taca/notification-service/blob/main/src/modules/delivery/delivery-retry.service.ts): `src/modules/delivery/delivery-retry.service.ts`
- [Outbox relay](https://github.com/ecommerce-taca/notification-service/blob/main/src/modules/delivery/delivery-outbox-relay.service.ts): `src/modules/delivery/delivery-outbox-relay.service.ts`

### User and admin APIs

- [In-app API](https://github.com/ecommerce-taca/notification-service/blob/main/src/modules/in-app/notification.controller.ts): `src/modules/in-app/notification.controller.ts`
- [In-app service](https://github.com/ecommerce-taca/notification-service/blob/main/src/modules/in-app/in-app.service.ts): `src/modules/in-app/in-app.service.ts`
- [Admin API](https://github.com/ecommerce-taca/notification-service/blob/main/src/modules/admin/admin.controller.ts): `src/modules/admin/admin.controller.ts`
- [Admin service](https://github.com/ecommerce-taca/notification-service/blob/main/src/modules/admin/admin.service.ts): `src/modules/admin/admin.service.ts`

### Persistence and infrastructure

- [JWT verification](https://github.com/ecommerce-taca/notification-service/blob/main/src/infrastructure/auth/auth.guard.ts): `src/infrastructure/auth/auth.guard.ts`
- [MySQL persistence](https://github.com/ecommerce-taca/notification-service/blob/main/src/infrastructure/persistence/data-source.ts): `src/infrastructure/persistence/data-source.ts`

### Other components

- **Event producers**
- **Kafka**
- **SMTP email**
- **API users**

## Connections

- Event producers → Kafka: publishes events (evidence: `README.md`)
- Kafka → Kafka consumer: delivers messages (evidence: `README.md`)
- Kafka consumer → Notification service: initiates processing
- Notification service → MySQL persistence: persists notifications
- Delivery service → Dispatcher: dispatches notification (evidence: `src/modules/delivery/delivery.service.ts`)
- Dispatcher → Template service: loads template (evidence: `src/modules/dispatcher/dispatcher.service.ts`)
- Dispatcher → Preference service: checks preference (evidence: `src/modules/dispatcher/dispatcher.service.ts`)
- Dispatcher → SMTP email: sends email (evidence: `README.md`)
- Delivery service → Retry and sweep: retries failures
- Outbox relay → Kafka: publishes outcomes
- API users → In-app API: requests notifications (evidence: `README.md`)
- In-app API → In-app service: handles request (evidence: `src/modules/in-app/notification.controller.ts`)
- In-app service → MySQL persistence: reads and updates
- API users → Admin API: requests delivery data
- Admin API → Admin service: handles request (evidence: `src/modules/admin/admin.controller.ts`)
- Admin service → Delivery service: queries delivery (evidence: `src/modules/admin/admin.service.ts`)
- Admin service → Notification service: queries notifications (evidence: `src/modules/admin/admin.service.ts`)
- In-app API → JWT verification: authenticates requests (evidence: `src/modules/in-app/notification.controller.ts`)
- Admin API → JWT verification: authenticates requests (evidence: `src/modules/admin/admin.controller.ts`)
- Notification service → MySQL persistence: uses repository port (evidence: `src/modules/notification/notification.service.ts`)
