# ribsantos/microservices_demo architecture

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

- Interactive diagram: https://gitdiagram.com/ribsantos/microservices_demo
- Repository: https://github.com/ribsantos/microservices_demo

## Overview

This repository implements a user-registration service that persists a user and publishes a welcome-email message, plus an email service that consumes the message, sends mail, and records the delivery status. The graph follows the sampled service calls and RabbitMQ listener configuration; no README was provided, and other capabilities or deployment details are not inferred.

Main entry points: [`user/src/main/java/com/ms/user/controllers/UserController.java`](https://github.com/ribsantos/microservices_demo/blob/main/user/src/main/java/com/ms/user/controllers/UserController.java) (User controller), [`user/src/main/java/com/ms/user/services/UserService.java`](https://github.com/ribsantos/microservices_demo/blob/main/user/src/main/java/com/ms/user/services/UserService.java) (User service), [`user/src/main/java/com/ms/user/producers/UserProducer.java`](https://github.com/ribsantos/microservices_demo/blob/main/user/src/main/java/com/ms/user/producers/UserProducer.java) (Email producer), [`email/src/main/java/com/ms/email/consumers/EmailConsumer.java`](https://github.com/ribsantos/microservices_demo/blob/main/email/src/main/java/com/ms/email/consumers/EmailConsumer.java) (Email consumer)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_registration["User registration"]
  node_controller["User controller"]
  node_user_service["User service<br/>[UserService.java]"]
  node_user_repo["User repository"]
  node_user_db[("User database")]
  node_user_record["User request DTO<br/>[UserRecordDto.java]"]
end

subgraph group_messaging["Message transport"]
  node_producer["Email producer<br/>[UserProducer.java]"]
  node_queue["Email queue"]
  node_consumer["Email consumer<br/>[EmailConsumer.java]"]
  node_email_dto["Email message DTO<br/>[EmailDto.java]"]
  node_email_record["Email record DTO"]
end

subgraph group_delivery["Email delivery"]
  node_email_service["Email service<br/>[EmailService.java]"]
  node_email_repo["Email repository"]
  node_email_db[("Email database")]
  node_mail_provider["Mail provider"]
end

node_user(("Registration client"))

node_user -->|"submits registration"| node_controller
node_controller -->|"accepts payload"| node_user_record
node_controller -->|"saves user"| node_user_service
node_user_service -->|"persists user"| node_user_repo
node_user_repo -->|"writes user"| node_user_db
node_user_service -->|"publishes email"| node_producer
node_producer -->|"builds message"| node_email_dto
node_producer -->|"sends message"| node_queue
node_queue -->|"dispatches message"| node_consumer
node_consumer -->|"receives payload"| node_email_record
node_consumer -->|"requests delivery"| node_email_service
node_email_service -->|"sends email"| node_mail_provider
node_email_service -->|"saves status"| node_email_repo
node_email_repo -->|"writes record"| node_email_db

click node_controller "https://github.com/ribsantos/microservices_demo/blob/main/user/src/main/java/com/ms/user/controllers/UserController.java"
click node_user_service "https://github.com/ribsantos/microservices_demo/blob/main/user/src/main/java/com/ms/user/services/UserService.java"
click node_user_repo "https://github.com/ribsantos/microservices_demo/blob/main/user/src/main/java/com/ms/user/repositories/UserRepository.java"
click node_producer "https://github.com/ribsantos/microservices_demo/blob/main/user/src/main/java/com/ms/user/producers/UserProducer.java"
click node_queue "https://github.com/ribsantos/microservices_demo/blob/main/user/src/main/java/com/ms/user/configs/RabbitMQConfig.java"
click node_consumer "https://github.com/ribsantos/microservices_demo/blob/main/email/src/main/java/com/ms/email/consumers/EmailConsumer.java"
click node_email_service "https://github.com/ribsantos/microservices_demo/blob/main/email/src/main/java/com/ms/email/services/EmailService.java"
click node_email_repo "https://github.com/ribsantos/microservices_demo/blob/main/email/src/main/java/com/ms/email/repositories/EmailRepository.java"
click node_user_record "https://github.com/ribsantos/microservices_demo/blob/main/user/src/main/java/com/ms/user/dtos/UserRecordDto.java"
click node_email_dto "https://github.com/ribsantos/microservices_demo/blob/main/user/src/main/java/com/ms/user/dtos/EmailDto.java"
click node_email_record "https://github.com/ribsantos/microservices_demo/blob/main/email/src/main/java/com/ms/email/dtos/EmailRecordDto.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_controller,node_user_service,node_user_repo,node_user_db,node_user_record,node_user toneBlue
class node_producer,node_queue,node_consumer,node_email_dto,node_email_record toneAmber
class node_email_service,node_email_repo,node_email_db,node_mail_provider toneMint
```

## Components

### User registration

- [User controller](https://github.com/ribsantos/microservices_demo/blob/main/user/src/main/java/com/ms/user/controllers/UserController.java): `user/src/main/java/com/ms/user/controllers/UserController.java`
- [User service](https://github.com/ribsantos/microservices_demo/blob/main/user/src/main/java/com/ms/user/services/UserService.java): `user/src/main/java/com/ms/user/services/UserService.java`
- [User repository](https://github.com/ribsantos/microservices_demo/blob/main/user/src/main/java/com/ms/user/repositories/UserRepository.java): `user/src/main/java/com/ms/user/repositories/UserRepository.java`
- **User database**
- [User request DTO](https://github.com/ribsantos/microservices_demo/blob/main/user/src/main/java/com/ms/user/dtos/UserRecordDto.java): `user/src/main/java/com/ms/user/dtos/UserRecordDto.java`

### Message transport

- [Email producer](https://github.com/ribsantos/microservices_demo/blob/main/user/src/main/java/com/ms/user/producers/UserProducer.java): `user/src/main/java/com/ms/user/producers/UserProducer.java`
- [Email queue](https://github.com/ribsantos/microservices_demo/blob/main/user/src/main/java/com/ms/user/configs/RabbitMQConfig.java): `user/src/main/java/com/ms/user/configs/RabbitMQConfig.java`
- [Email consumer](https://github.com/ribsantos/microservices_demo/blob/main/email/src/main/java/com/ms/email/consumers/EmailConsumer.java): `email/src/main/java/com/ms/email/consumers/EmailConsumer.java`
- [Email message DTO](https://github.com/ribsantos/microservices_demo/blob/main/user/src/main/java/com/ms/user/dtos/EmailDto.java): `user/src/main/java/com/ms/user/dtos/EmailDto.java`
- [Email record DTO](https://github.com/ribsantos/microservices_demo/blob/main/email/src/main/java/com/ms/email/dtos/EmailRecordDto.java): `email/src/main/java/com/ms/email/dtos/EmailRecordDto.java`

### Email delivery

- [Email service](https://github.com/ribsantos/microservices_demo/blob/main/email/src/main/java/com/ms/email/services/EmailService.java): `email/src/main/java/com/ms/email/services/EmailService.java`
- [Email repository](https://github.com/ribsantos/microservices_demo/blob/main/email/src/main/java/com/ms/email/repositories/EmailRepository.java): `email/src/main/java/com/ms/email/repositories/EmailRepository.java`
- **Email database**
- **Mail provider**

### Other components

- **Registration client**

## Connections

- Registration client → User controller: submits registration
- User controller → User request DTO: accepts payload
- User controller → User service: saves user
- User service → User repository: persists user
- User repository → User database: writes user
- User service → Email producer: publishes email
- Email producer → Email message DTO: builds message
- Email producer → Email queue: sends message
- Email queue → Email consumer: dispatches message
- Email consumer → Email record DTO: receives payload
- Email consumer → Email service: requests delivery
- Email service → Mail provider: sends email
- Email service → Email repository: saves status
- Email repository → Email database: writes record
