# ceoalmaloco/ms-barriodigital-requests architecture

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

## Overview

BarrioDigital Requests is a municipal-procedure microservice. Residents and staff call its HTTP API: the service validates and creates requests, scopes reads by caller role, and lets authorized officials change status under a row lock. Requests persist in Oracle; selected committed changes asynchronously publish RabbitMQ events. The README documents the event types and integrations, but downstream consumers are outside this repository. Edges are limited to README statements and shown controller, service, repository, and publisher code; unsampled configuration wiring is not asserted.

Main entry points: [`src/main/java/cl/duoc/barriodigital/requests/service/RequestService.java`](https://github.com/ceoalmaloco/ms-barriodigital-requests/blob/main/src/main/java/cl/duoc/barriodigital/requests/service/RequestService.java) (Request Service), [`src/main/java/cl/duoc/barriodigital/requests/web/RequestController.java`](https://github.com/ceoalmaloco/ms-barriodigital-requests/blob/main/src/main/java/cl/duoc/barriodigital/requests/web/RequestController.java) (Requests API), [`src/main/java/cl/duoc/barriodigital/requests/messaging/EventPublisher.java`](https://github.com/ceoalmaloco/ms-barriodigital-requests/blob/main/src/main/java/cl/duoc/barriodigital/requests/messaging/EventPublisher.java) (Event Publisher), [`src/main/java/cl/duoc/barriodigital/requests/persistence/MunicipalRequestRepository.java`](https://github.com/ceoalmaloco/ms-barriodigital-requests/blob/main/src/main/java/cl/duoc/barriodigital/requests/persistence/MunicipalRequestRepository.java) (Request Repository)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_api["HTTP API"]
  node_controller["Requests API"]
  node_requestdto["Create Request DTO"]
  node_statusdto["Status Change DTO"]
  node_identity["Caller Context<br/>[CallerContext.java]"]
end

subgraph group_domain["Request Domain"]
  node_service["Request Service"]
  node_procedure["Procedure Rules"]
  node_transitions["Status Transitions"]
  node_status["Request Status<br/>[RequestStatus.java]"]
  node_request["Municipal Request"]
end

subgraph group_persistence["Persistence"]
  node_repository["Request Repository"]
  node_oracle[("Oracle Database")]
end

subgraph group_events["Event Integration"]
  node_publisher["Event Publisher"]
  node_envelope["Event Envelope<br/>[EventEnvelope.java]"]
  node_rabbitnames["Rabbit Names"]
  node_rabbitconfig["Rabbit Configuration<br/>[RabbitConfig.java]"]
end

node_caller(("Resident / Staff"))
node_rabbit["RabbitMQ Broker"]
node_consumers["Event Consumers"]

node_caller -->|"calls API"| node_controller
node_controller -->|"delegates to"| node_service
node_controller -->|"accepts body"| node_requestdto
node_controller -->|"accepts body"| node_statusdto
node_controller -->|"builds context"| node_identity
node_service -->|"checks roles"| node_identity
node_service -->|"validates type"| node_procedure
node_service -->|"checks changes"| node_transitions
node_transitions -->|"uses states"| node_status
node_service -->|"reads and writes"| node_repository
node_repository -->|"queries entities"| node_request
node_repository -->|"persists requests"| node_oracle
node_service -->|"publishes after commit"| node_publisher
node_publisher -->|"wraps event"| node_envelope
node_publisher -->|"selects destination"| node_rabbitnames
node_publisher -->|"uses publisher executor"| node_rabbitconfig
node_publisher -->|"sends messages"| node_rabbit
node_rabbit -.->|"routes events"| node_consumers

click node_controller "https://github.com/ceoalmaloco/ms-barriodigital-requests/blob/main/src/main/java/cl/duoc/barriodigital/requests/web/RequestController.java"
click node_requestdto "https://github.com/ceoalmaloco/ms-barriodigital-requests/blob/main/src/main/java/cl/duoc/barriodigital/requests/web/dto/CreateRequestDto.java"
click node_statusdto "https://github.com/ceoalmaloco/ms-barriodigital-requests/blob/main/src/main/java/cl/duoc/barriodigital/requests/web/dto/ChangeStatusDto.java"
click node_identity "https://github.com/ceoalmaloco/ms-barriodigital-requests/blob/main/src/main/java/cl/duoc/barriodigital/requests/web/CallerContext.java"
click node_service "https://github.com/ceoalmaloco/ms-barriodigital-requests/blob/main/src/main/java/cl/duoc/barriodigital/requests/service/RequestService.java"
click node_procedure "https://github.com/ceoalmaloco/ms-barriodigital-requests/blob/main/src/main/java/cl/duoc/barriodigital/requests/domain/ProcedureTypes.java"
click node_transitions "https://github.com/ceoalmaloco/ms-barriodigital-requests/blob/main/src/main/java/cl/duoc/barriodigital/requests/domain/RequestTransitions.java"
click node_status "https://github.com/ceoalmaloco/ms-barriodigital-requests/blob/main/src/main/java/cl/duoc/barriodigital/requests/domain/RequestStatus.java"
click node_request "https://github.com/ceoalmaloco/ms-barriodigital-requests/blob/main/src/main/java/cl/duoc/barriodigital/requests/domain/MunicipalRequest.java"
click node_repository "https://github.com/ceoalmaloco/ms-barriodigital-requests/blob/main/src/main/java/cl/duoc/barriodigital/requests/persistence/MunicipalRequestRepository.java"
click node_publisher "https://github.com/ceoalmaloco/ms-barriodigital-requests/blob/main/src/main/java/cl/duoc/barriodigital/requests/messaging/EventPublisher.java"
click node_envelope "https://github.com/ceoalmaloco/ms-barriodigital-requests/blob/main/src/main/java/cl/duoc/barriodigital/requests/messaging/EventEnvelope.java"
click node_rabbitnames "https://github.com/ceoalmaloco/ms-barriodigital-requests/blob/main/src/main/java/cl/duoc/barriodigital/requests/config/RabbitNamesProperties.java"
click node_rabbitconfig "https://github.com/ceoalmaloco/ms-barriodigital-requests/blob/main/src/main/java/cl/duoc/barriodigital/requests/config/RabbitConfig.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_requestdto,node_statusdto,node_identity toneBlue
class node_service,node_procedure,node_transitions,node_status,node_request toneAmber
class node_repository,node_oracle toneMint
class node_publisher,node_envelope,node_rabbitnames,node_rabbitconfig toneRose
class node_caller,node_rabbit,node_consumers toneIndigo
```

## Components

### HTTP API

- [Requests API](https://github.com/ceoalmaloco/ms-barriodigital-requests/blob/main/src/main/java/cl/duoc/barriodigital/requests/web/RequestController.java): `src/main/java/cl/duoc/barriodigital/requests/web/RequestController.java`
- [Create Request DTO](https://github.com/ceoalmaloco/ms-barriodigital-requests/blob/main/src/main/java/cl/duoc/barriodigital/requests/web/dto/CreateRequestDto.java): `src/main/java/cl/duoc/barriodigital/requests/web/dto/CreateRequestDto.java`
- [Status Change DTO](https://github.com/ceoalmaloco/ms-barriodigital-requests/blob/main/src/main/java/cl/duoc/barriodigital/requests/web/dto/ChangeStatusDto.java): `src/main/java/cl/duoc/barriodigital/requests/web/dto/ChangeStatusDto.java`
- [Caller Context](https://github.com/ceoalmaloco/ms-barriodigital-requests/blob/main/src/main/java/cl/duoc/barriodigital/requests/web/CallerContext.java): `src/main/java/cl/duoc/barriodigital/requests/web/CallerContext.java`

### Request Domain

- [Request Service](https://github.com/ceoalmaloco/ms-barriodigital-requests/blob/main/src/main/java/cl/duoc/barriodigital/requests/service/RequestService.java): `src/main/java/cl/duoc/barriodigital/requests/service/RequestService.java`
- [Procedure Rules](https://github.com/ceoalmaloco/ms-barriodigital-requests/blob/main/src/main/java/cl/duoc/barriodigital/requests/domain/ProcedureTypes.java): `src/main/java/cl/duoc/barriodigital/requests/domain/ProcedureTypes.java`
- [Status Transitions](https://github.com/ceoalmaloco/ms-barriodigital-requests/blob/main/src/main/java/cl/duoc/barriodigital/requests/domain/RequestTransitions.java): `src/main/java/cl/duoc/barriodigital/requests/domain/RequestTransitions.java`
- [Request Status](https://github.com/ceoalmaloco/ms-barriodigital-requests/blob/main/src/main/java/cl/duoc/barriodigital/requests/domain/RequestStatus.java): `src/main/java/cl/duoc/barriodigital/requests/domain/RequestStatus.java`
- [Municipal Request](https://github.com/ceoalmaloco/ms-barriodigital-requests/blob/main/src/main/java/cl/duoc/barriodigital/requests/domain/MunicipalRequest.java): `src/main/java/cl/duoc/barriodigital/requests/domain/MunicipalRequest.java`

### Persistence

- [Request Repository](https://github.com/ceoalmaloco/ms-barriodigital-requests/blob/main/src/main/java/cl/duoc/barriodigital/requests/persistence/MunicipalRequestRepository.java): `src/main/java/cl/duoc/barriodigital/requests/persistence/MunicipalRequestRepository.java`
- **Oracle Database**

### Event Integration

- [Event Publisher](https://github.com/ceoalmaloco/ms-barriodigital-requests/blob/main/src/main/java/cl/duoc/barriodigital/requests/messaging/EventPublisher.java): `src/main/java/cl/duoc/barriodigital/requests/messaging/EventPublisher.java`
- [Event Envelope](https://github.com/ceoalmaloco/ms-barriodigital-requests/blob/main/src/main/java/cl/duoc/barriodigital/requests/messaging/EventEnvelope.java): `src/main/java/cl/duoc/barriodigital/requests/messaging/EventEnvelope.java`
- [Rabbit Names](https://github.com/ceoalmaloco/ms-barriodigital-requests/blob/main/src/main/java/cl/duoc/barriodigital/requests/config/RabbitNamesProperties.java): `src/main/java/cl/duoc/barriodigital/requests/config/RabbitNamesProperties.java`
- [Rabbit Configuration](https://github.com/ceoalmaloco/ms-barriodigital-requests/blob/main/src/main/java/cl/duoc/barriodigital/requests/config/RabbitConfig.java): `src/main/java/cl/duoc/barriodigital/requests/config/RabbitConfig.java`

### Other components

- **Resident / Staff**
- **RabbitMQ Broker**
- **Event Consumers**

## Connections

- Resident / Staff → Requests API: calls API (evidence: `README.md`)
- Requests API → Request Service: delegates to (evidence: `src/main/java/cl/duoc/barriodigital/requests/web/RequestController.java`)
- Requests API → Create Request DTO: accepts body (evidence: `src/main/java/cl/duoc/barriodigital/requests/web/RequestController.java`)
- Requests API → Status Change DTO: accepts body (evidence: `src/main/java/cl/duoc/barriodigital/requests/web/RequestController.java`)
- Requests API → Caller Context: builds context (evidence: `src/main/java/cl/duoc/barriodigital/requests/web/RequestController.java`)
- Request Service → Caller Context: checks roles (evidence: `src/main/java/cl/duoc/barriodigital/requests/service/RequestService.java`)
- Request Service → Procedure Rules: validates type (evidence: `src/main/java/cl/duoc/barriodigital/requests/service/RequestService.java`)
- Request Service → Status Transitions: checks changes (evidence: `src/main/java/cl/duoc/barriodigital/requests/service/RequestService.java`)
- Status Transitions → Request Status: uses states (evidence: `src/main/java/cl/duoc/barriodigital/requests/domain/RequestTransitions.java`)
- Request Service → Request Repository: reads and writes (evidence: `src/main/java/cl/duoc/barriodigital/requests/service/RequestService.java`)
- Request Repository → Municipal Request: queries entities (evidence: `src/main/java/cl/duoc/barriodigital/requests/persistence/MunicipalRequestRepository.java`)
- Request Repository → Oracle Database: persists requests (evidence: `README.md`)
- Request Service → Event Publisher: publishes after commit (evidence: `src/main/java/cl/duoc/barriodigital/requests/service/RequestService.java`)
- Event Publisher → Event Envelope: wraps event (evidence: `src/main/java/cl/duoc/barriodigital/requests/messaging/EventPublisher.java`)
- Event Publisher → Rabbit Names: selects destination (evidence: `src/main/java/cl/duoc/barriodigital/requests/messaging/EventPublisher.java`)
- Event Publisher → Rabbit Configuration: uses publisher executor (evidence: `src/main/java/cl/duoc/barriodigital/requests/messaging/EventPublisher.java`)
- Event Publisher → RabbitMQ Broker: sends messages (evidence: `src/main/java/cl/duoc/barriodigital/requests/messaging/EventPublisher.java`)
- RabbitMQ Broker → Event Consumers: routes events (evidence: `README.md`)
