# ceoalmaloco/ms-barriodigital-notify architecture

> Architecture diagram of the GitHub repository ceoalmaloco/ms-barriodigital-notify, 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/ceoalmaloco/ms-barriodigital-notify
- Repository: https://github.com/ceoalmaloco/ms-barriodigital-notify

## Overview

ms-barriodigital-notify is an internal RabbitMQ event consumer, not a public API. Events published by the requests service enter three command queues and trigger email, crew-ticket, or PDF-certificate work. Each listener hands the raw message and channel to shared parsing and manual-ACK/retry/idempotency logic before its domain handler runs. The README documents queue behavior and email delivery modes; sampled source confirms shared processing and certificate/crew service behavior. Unsampled details of some domain implementations are represented at their existing directories.

Main entry points: [`src/main/java/cl/duoc/barriodigital/notify/messaging/ManualAckProcessor.java`](https://github.com/ceoalmaloco/ms-barriodigital-notify/blob/main/src/main/java/cl/duoc/barriodigital/notify/messaging/ManualAckProcessor.java) (Manual ACK processor), [`src/main/java/cl/duoc/barriodigital/notify/consumer/email/EmailConsumer.java`](https://github.com/ceoalmaloco/ms-barriodigital-notify/blob/main/src/main/java/cl/duoc/barriodigital/notify/consumer/email/EmailConsumer.java) (Email consumer), [`src/main/java/cl/duoc/barriodigital/notify/consumer/crew/CrewConsumer.java`](https://github.com/ceoalmaloco/ms-barriodigital-notify/blob/main/src/main/java/cl/duoc/barriodigital/notify/consumer/crew/CrewConsumer.java) (Crew consumer), [`src/main/java/cl/duoc/barriodigital/notify/consumer/certificate/CertificateConsumer.java`](https://github.com/ceoalmaloco/ms-barriodigital-notify/blob/main/src/main/java/cl/duoc/barriodigital/notify/consumer/certificate/CertificateConsumer.java) (Certificate consumer)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_messaging["Rabbit messaging"]
  node_processor["Manual ACK processor"]
  node_parser["Envelope parser"]
  node_processed["Processed events"]
end

subgraph group_email["Email delivery"]
  node_email_consumer["Email consumer<br/>[EmailConsumer.java]"]
  node_email_sender["Email sender<br/>[EmailSender.java]"]
  node_smtp["SMTP sender"]
  node_logging_sender["Logging sender"]
end

subgraph group_crew["Crew tickets"]
  node_crew_consumer["Crew consumer<br/>[CrewConsumer.java]"]
  node_crew_service["Crew ticket service"]
end

subgraph group_certificates["PDF certificates"]
  node_certificate_consumer["Certificate consumer"]
  node_certificate_service["Certificate service"]
  node_pdf_generator["PDF generator"]
  node_file_store["Certificate file store"]
end

subgraph group_configuration["Runtime configuration"]
  node_topology["Queue topology"]
  node_rabbit_names["Queue names"]
end

node_requests(("Requests service"))
node_rabbit["RabbitMQ broker"]
node_smtp_service(("SMTP server"))
node_pdf_volume[("PDF volume")]

node_requests -->|"publishes events"| node_rabbit
node_rabbit -->|"delivers email commands"| node_email_consumer
node_rabbit -->|"delivers crew commands"| node_crew_consumer
node_rabbit -->|"delivers certificate commands"| node_certificate_consumer
node_topology -->|"uses names"| node_rabbit_names
node_email_consumer -->|"reads queue name"| node_rabbit_names
node_crew_consumer -->|"reads queue name"| node_rabbit_names
node_certificate_consumer -->|"reads queue name"| node_rabbit_names
node_email_consumer -->|"submits message"| node_processor
node_crew_consumer -->|"submits message"| node_processor
node_certificate_consumer -->|"submits message"| node_processor
node_processor -->|"parses body"| node_parser
node_processor -->|"checks and marks"| node_processed
node_email_consumer -->|"sends composed email"| node_email_sender
node_email_sender -.->|"sends via SMTP"| node_smtp
node_email_sender -.->|"selects logging mode"| node_logging_sender
node_crew_consumer -->|"handles ticket"| node_crew_service
node_certificate_consumer -->|"handles certificate"| node_certificate_service
node_certificate_service -->|"saves document"| node_file_store
node_file_store -->|"generates PDF"| node_pdf_generator
node_file_store -.->|"writes file"| node_pdf_volume

click node_topology "https://github.com/ceoalmaloco/ms-barriodigital-notify/blob/main/src/main/java/cl/duoc/barriodigital/notify/config/RabbitTopologyConfig.java"
click node_rabbit_names "https://github.com/ceoalmaloco/ms-barriodigital-notify/blob/main/src/main/java/cl/duoc/barriodigital/notify/config/RabbitNamesProperties.java"
click node_processor "https://github.com/ceoalmaloco/ms-barriodigital-notify/blob/main/src/main/java/cl/duoc/barriodigital/notify/messaging/ManualAckProcessor.java"
click node_parser "https://github.com/ceoalmaloco/ms-barriodigital-notify/blob/main/src/main/java/cl/duoc/barriodigital/notify/messaging/EnvelopeParser.java"
click node_processed "https://github.com/ceoalmaloco/ms-barriodigital-notify/blob/main/src/main/java/cl/duoc/barriodigital/notify/messaging/ProcessedEvents.java"
click node_email_consumer "https://github.com/ceoalmaloco/ms-barriodigital-notify/blob/main/src/main/java/cl/duoc/barriodigital/notify/consumer/email/EmailConsumer.java"
click node_email_sender "https://github.com/ceoalmaloco/ms-barriodigital-notify/blob/main/src/main/java/cl/duoc/barriodigital/notify/consumer/email/EmailSender.java"
click node_smtp "https://github.com/ceoalmaloco/ms-barriodigital-notify/blob/main/src/main/java/cl/duoc/barriodigital/notify/consumer/email/SmtpEmailSender.java"
click node_logging_sender "https://github.com/ceoalmaloco/ms-barriodigital-notify/blob/main/src/main/java/cl/duoc/barriodigital/notify/consumer/email/LoggingEmailSender.java"
click node_crew_consumer "https://github.com/ceoalmaloco/ms-barriodigital-notify/blob/main/src/main/java/cl/duoc/barriodigital/notify/consumer/crew/CrewConsumer.java"
click node_crew_service "https://github.com/ceoalmaloco/ms-barriodigital-notify/blob/main/src/main/java/cl/duoc/barriodigital/notify/consumer/crew/CrewTicketService.java"
click node_certificate_consumer "https://github.com/ceoalmaloco/ms-barriodigital-notify/blob/main/src/main/java/cl/duoc/barriodigital/notify/consumer/certificate/CertificateConsumer.java"
click node_certificate_service "https://github.com/ceoalmaloco/ms-barriodigital-notify/blob/main/src/main/java/cl/duoc/barriodigital/notify/consumer/certificate/CertificateService.java"
click node_pdf_generator "https://github.com/ceoalmaloco/ms-barriodigital-notify/blob/main/src/main/java/cl/duoc/barriodigital/notify/consumer/certificate/CertificatePdfGenerator.java"
click node_file_store "https://github.com/ceoalmaloco/ms-barriodigital-notify/blob/main/src/main/java/cl/duoc/barriodigital/notify/consumer/certificate/CertificateFileStore.java"

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_processor,node_parser,node_processed toneBlue
class node_email_consumer,node_email_sender,node_smtp,node_logging_sender,node_pdf_volume toneAmber
class node_crew_consumer,node_crew_service,node_requests,node_smtp_service toneMint
class node_certificate_consumer,node_certificate_service,node_pdf_generator,node_file_store toneRose
class node_topology,node_rabbit_names,node_rabbit toneIndigo
```

## Components

### Rabbit messaging

- [Manual ACK processor](https://github.com/ceoalmaloco/ms-barriodigital-notify/blob/main/src/main/java/cl/duoc/barriodigital/notify/messaging/ManualAckProcessor.java): `src/main/java/cl/duoc/barriodigital/notify/messaging/ManualAckProcessor.java`
- [Envelope parser](https://github.com/ceoalmaloco/ms-barriodigital-notify/blob/main/src/main/java/cl/duoc/barriodigital/notify/messaging/EnvelopeParser.java): `src/main/java/cl/duoc/barriodigital/notify/messaging/EnvelopeParser.java`
- [Processed events](https://github.com/ceoalmaloco/ms-barriodigital-notify/blob/main/src/main/java/cl/duoc/barriodigital/notify/messaging/ProcessedEvents.java): `src/main/java/cl/duoc/barriodigital/notify/messaging/ProcessedEvents.java`

### Email delivery

- [Email consumer](https://github.com/ceoalmaloco/ms-barriodigital-notify/blob/main/src/main/java/cl/duoc/barriodigital/notify/consumer/email/EmailConsumer.java): `src/main/java/cl/duoc/barriodigital/notify/consumer/email/EmailConsumer.java`
- [Email sender](https://github.com/ceoalmaloco/ms-barriodigital-notify/blob/main/src/main/java/cl/duoc/barriodigital/notify/consumer/email/EmailSender.java): `src/main/java/cl/duoc/barriodigital/notify/consumer/email/EmailSender.java`
- [SMTP sender](https://github.com/ceoalmaloco/ms-barriodigital-notify/blob/main/src/main/java/cl/duoc/barriodigital/notify/consumer/email/SmtpEmailSender.java): `src/main/java/cl/duoc/barriodigital/notify/consumer/email/SmtpEmailSender.java`
- [Logging sender](https://github.com/ceoalmaloco/ms-barriodigital-notify/blob/main/src/main/java/cl/duoc/barriodigital/notify/consumer/email/LoggingEmailSender.java): `src/main/java/cl/duoc/barriodigital/notify/consumer/email/LoggingEmailSender.java`

### Crew tickets

- [Crew consumer](https://github.com/ceoalmaloco/ms-barriodigital-notify/blob/main/src/main/java/cl/duoc/barriodigital/notify/consumer/crew/CrewConsumer.java): `src/main/java/cl/duoc/barriodigital/notify/consumer/crew/CrewConsumer.java`
- [Crew ticket service](https://github.com/ceoalmaloco/ms-barriodigital-notify/blob/main/src/main/java/cl/duoc/barriodigital/notify/consumer/crew/CrewTicketService.java): `src/main/java/cl/duoc/barriodigital/notify/consumer/crew/CrewTicketService.java`

### PDF certificates

- [Certificate consumer](https://github.com/ceoalmaloco/ms-barriodigital-notify/blob/main/src/main/java/cl/duoc/barriodigital/notify/consumer/certificate/CertificateConsumer.java): `src/main/java/cl/duoc/barriodigital/notify/consumer/certificate/CertificateConsumer.java`
- [Certificate service](https://github.com/ceoalmaloco/ms-barriodigital-notify/blob/main/src/main/java/cl/duoc/barriodigital/notify/consumer/certificate/CertificateService.java): `src/main/java/cl/duoc/barriodigital/notify/consumer/certificate/CertificateService.java`
- [PDF generator](https://github.com/ceoalmaloco/ms-barriodigital-notify/blob/main/src/main/java/cl/duoc/barriodigital/notify/consumer/certificate/CertificatePdfGenerator.java): `src/main/java/cl/duoc/barriodigital/notify/consumer/certificate/CertificatePdfGenerator.java`
- [Certificate file store](https://github.com/ceoalmaloco/ms-barriodigital-notify/blob/main/src/main/java/cl/duoc/barriodigital/notify/consumer/certificate/CertificateFileStore.java): `src/main/java/cl/duoc/barriodigital/notify/consumer/certificate/CertificateFileStore.java`

### Runtime configuration

- [Queue topology](https://github.com/ceoalmaloco/ms-barriodigital-notify/blob/main/src/main/java/cl/duoc/barriodigital/notify/config/RabbitTopologyConfig.java): `src/main/java/cl/duoc/barriodigital/notify/config/RabbitTopologyConfig.java`
- [Queue names](https://github.com/ceoalmaloco/ms-barriodigital-notify/blob/main/src/main/java/cl/duoc/barriodigital/notify/config/RabbitNamesProperties.java): `src/main/java/cl/duoc/barriodigital/notify/config/RabbitNamesProperties.java`

### Other components

- **Requests service**
- **RabbitMQ broker**
- **SMTP server**
- **PDF volume**

## Connections

- Requests service → RabbitMQ broker: publishes events (evidence: `README.md`)
- RabbitMQ broker → Email consumer: delivers email commands (evidence: `README.md`)
- RabbitMQ broker → Crew consumer: delivers crew commands (evidence: `README.md`)
- RabbitMQ broker → Certificate consumer: delivers certificate commands (evidence: `README.md`)
- Queue topology → Queue names: uses names (evidence: `src/main/java/cl/duoc/barriodigital/notify/config/RabbitTopologyConfig.java`)
- Email consumer → Queue names: reads queue name (evidence: `src/main/java/cl/duoc/barriodigital/notify/consumer/email/EmailConsumer.java`)
- Crew consumer → Queue names: reads queue name (evidence: `src/main/java/cl/duoc/barriodigital/notify/consumer/crew/CrewConsumer.java`)
- Certificate consumer → Queue names: reads queue name (evidence: `src/main/java/cl/duoc/barriodigital/notify/consumer/certificate/CertificateConsumer.java`)
- Email consumer → Manual ACK processor: submits message (evidence: `src/main/java/cl/duoc/barriodigital/notify/consumer/email/EmailConsumer.java`)
- Crew consumer → Manual ACK processor: submits message (evidence: `src/main/java/cl/duoc/barriodigital/notify/consumer/crew/CrewConsumer.java`)
- Certificate consumer → Manual ACK processor: submits message (evidence: `src/main/java/cl/duoc/barriodigital/notify/consumer/certificate/CertificateConsumer.java`)
- Manual ACK processor → Envelope parser: parses body (evidence: `src/main/java/cl/duoc/barriodigital/notify/messaging/ManualAckProcessor.java`)
- Manual ACK processor → Processed events: checks and marks (evidence: `src/main/java/cl/duoc/barriodigital/notify/messaging/ManualAckProcessor.java`)
- Email consumer → Email sender: sends composed email (evidence: `src/main/java/cl/duoc/barriodigital/notify/consumer/email/EmailConsumer.java`)
- Email sender → SMTP sender: sends via SMTP (evidence: `README.md`)
- Email sender → Logging sender: selects logging mode (evidence: `README.md`)
- Crew consumer → Crew ticket service: handles ticket (evidence: `src/main/java/cl/duoc/barriodigital/notify/consumer/crew/CrewConsumer.java`)
- Certificate consumer → Certificate service: handles certificate (evidence: `src/main/java/cl/duoc/barriodigital/notify/consumer/certificate/CertificateConsumer.java`)
- Certificate service → Certificate file store: saves document (evidence: `src/main/java/cl/duoc/barriodigital/notify/consumer/certificate/CertificateService.java`)
- Certificate file store → PDF generator: generates PDF (evidence: `src/main/java/cl/duoc/barriodigital/notify/consumer/certificate/CertificateFileStore.java`)
- Certificate file store → PDF volume: writes file (evidence: `README.md`)
