# ceoalmaloco/ms-barriodigital-catalog architecture

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

## Overview

This Spring Boot service manages BarrioDigital’s procedure-type catalog and daily quotas in Oracle. Users and administrators list, create, and edit catalog entries through the REST API; the BFF also calls internal reserve/release endpoints during request admission and compensation. The service applies validation and quota rules, while the domain entity tracks daily state and the repository persists it. Startup seeding and generic error responses are separate supporting capabilities. Source excerpts establish the main call paths; Oracle connectivity and the seed’s startup role are documented in the README.

Main entry points: [`src/main/java/cl/duoc/barriodigital/catalog/service/CatalogService.java`](https://github.com/ceoalmaloco/ms-barriodigital-catalog/blob/main/src/main/java/cl/duoc/barriodigital/catalog/service/CatalogService.java) (Catalog service), [`src/main/java/cl/duoc/barriodigital/catalog/web/CatalogController.java`](https://github.com/ceoalmaloco/ms-barriodigital-catalog/blob/main/src/main/java/cl/duoc/barriodigital/catalog/web/CatalogController.java) (Catalog endpoints), [`src/main/java/cl/duoc/barriodigital/catalog/persistence/ProcedureTypeSeed.java`](https://github.com/ceoalmaloco/ms-barriodigital-catalog/blob/main/src/main/java/cl/duoc/barriodigital/catalog/persistence/ProcedureTypeSeed.java) (Initial catalog seed), [`src/main/java/cl/duoc/barriodigital/catalog/web/dto/ProcedureView.java`](https://github.com/ceoalmaloco/ms-barriodigital-catalog/blob/main/src/main/java/cl/duoc/barriodigital/catalog/web/dto/ProcedureView.java) (Procedure response)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_api["HTTP API"]
  node_controller["Catalog endpoints"]
  node_requests["Request DTOs"]
  node_views["Procedure response<br/>[ProcedureView.java]"]
  node_admincheck["Role check<br/>[AdminCaller.java]"]
  node_errors["Error responses"]
end

subgraph group_logic["Catalog Rules"]
  node_service["Catalog service"]
  node_entity["Quota rules<br/>[ProcedureType.java]"]
end

subgraph group_persistence["Oracle Persistence"]
  node_repository["Type repository"]
  node_oracle[("Oracle database")]
  node_seedrunner["Seed startup runner"]
  node_seed["Initial catalog seed"]
end

subgraph group_runtime["Runtime Support"]
  node_wallet["Oracle wallet config"]
  node_application["Spring application"]
end

node_clients(("Users and BFF"))
node_admin(("Admin caller"))

node_clients -->|"calls endpoints"| node_controller
node_admin -->|"sends admin requests"| node_controller
node_controller -->|"delegates operations"| node_service
node_controller -->|"accepts bodies"| node_requests
node_controller -->|"returns views"| node_views
node_service -->|"checks roles"| node_admincheck
node_service -->|"validates input"| node_requests
node_service -->|"builds responses"| node_views
node_views -->|"maps entity"| node_entity
node_service -->|"applies quota rules"| node_entity
node_service -->|"reads and saves"| node_repository
node_repository -->|"persists catalog"| node_oracle
node_seedrunner -->|"runs seeding"| node_seed
node_seed -->|"checks and saves"| node_repository
node_seed -->|"creates seed rows"| node_entity
node_wallet -->|"configures connection"| node_oracle
node_application -.->|"starts application"| node_seedrunner

click node_controller "https://github.com/ceoalmaloco/ms-barriodigital-catalog/blob/main/src/main/java/cl/duoc/barriodigital/catalog/web/CatalogController.java"
click node_requests "https://github.com/ceoalmaloco/ms-barriodigital-catalog/tree/main/src/main/java/cl/duoc/barriodigital/catalog/web/dto"
click node_views "https://github.com/ceoalmaloco/ms-barriodigital-catalog/blob/main/src/main/java/cl/duoc/barriodigital/catalog/web/dto/ProcedureView.java"
click node_admincheck "https://github.com/ceoalmaloco/ms-barriodigital-catalog/blob/main/src/main/java/cl/duoc/barriodigital/catalog/web/AdminCaller.java"
click node_errors "https://github.com/ceoalmaloco/ms-barriodigital-catalog/blob/main/src/main/java/cl/duoc/barriodigital/catalog/web/CatalogExceptionHandler.java"
click node_service "https://github.com/ceoalmaloco/ms-barriodigital-catalog/blob/main/src/main/java/cl/duoc/barriodigital/catalog/service/CatalogService.java"
click node_entity "https://github.com/ceoalmaloco/ms-barriodigital-catalog/blob/main/src/main/java/cl/duoc/barriodigital/catalog/domain/ProcedureType.java"
click node_repository "https://github.com/ceoalmaloco/ms-barriodigital-catalog/blob/main/src/main/java/cl/duoc/barriodigital/catalog/persistence/ProcedureTypeRepository.java"
click node_seedrunner "https://github.com/ceoalmaloco/ms-barriodigital-catalog/blob/main/src/main/java/cl/duoc/barriodigital/catalog/persistence/ProcedureTypeSeedRunner.java"
click node_seed "https://github.com/ceoalmaloco/ms-barriodigital-catalog/blob/main/src/main/java/cl/duoc/barriodigital/catalog/persistence/ProcedureTypeSeed.java"
click node_wallet "https://github.com/ceoalmaloco/ms-barriodigital-catalog/blob/main/src/main/java/cl/duoc/barriodigital/catalog/config/OracleWalletConfiguration.java"
click node_application "https://github.com/ceoalmaloco/ms-barriodigital-catalog/blob/main/src/main/java/cl/duoc/barriodigital/catalog/CatalogApplication.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_requests,node_views,node_admincheck,node_errors,node_clients toneBlue
class node_service,node_entity toneAmber
class node_repository,node_oracle,node_seedrunner,node_seed toneMint
class node_wallet,node_application toneRose
class node_admin toneIndigo
```

## Components

### HTTP API

- [Catalog endpoints](https://github.com/ceoalmaloco/ms-barriodigital-catalog/blob/main/src/main/java/cl/duoc/barriodigital/catalog/web/CatalogController.java): `src/main/java/cl/duoc/barriodigital/catalog/web/CatalogController.java`
- [Request DTOs](https://github.com/ceoalmaloco/ms-barriodigital-catalog/tree/main/src/main/java/cl/duoc/barriodigital/catalog/web/dto): `src/main/java/cl/duoc/barriodigital/catalog/web/dto`
- [Procedure response](https://github.com/ceoalmaloco/ms-barriodigital-catalog/blob/main/src/main/java/cl/duoc/barriodigital/catalog/web/dto/ProcedureView.java): `src/main/java/cl/duoc/barriodigital/catalog/web/dto/ProcedureView.java`
- [Role check](https://github.com/ceoalmaloco/ms-barriodigital-catalog/blob/main/src/main/java/cl/duoc/barriodigital/catalog/web/AdminCaller.java): `src/main/java/cl/duoc/barriodigital/catalog/web/AdminCaller.java`
- [Error responses](https://github.com/ceoalmaloco/ms-barriodigital-catalog/blob/main/src/main/java/cl/duoc/barriodigital/catalog/web/CatalogExceptionHandler.java): `src/main/java/cl/duoc/barriodigital/catalog/web/CatalogExceptionHandler.java`

### Catalog Rules

- [Catalog service](https://github.com/ceoalmaloco/ms-barriodigital-catalog/blob/main/src/main/java/cl/duoc/barriodigital/catalog/service/CatalogService.java): `src/main/java/cl/duoc/barriodigital/catalog/service/CatalogService.java`
- [Quota rules](https://github.com/ceoalmaloco/ms-barriodigital-catalog/blob/main/src/main/java/cl/duoc/barriodigital/catalog/domain/ProcedureType.java): `src/main/java/cl/duoc/barriodigital/catalog/domain/ProcedureType.java`

### Oracle Persistence

- [Type repository](https://github.com/ceoalmaloco/ms-barriodigital-catalog/blob/main/src/main/java/cl/duoc/barriodigital/catalog/persistence/ProcedureTypeRepository.java): `src/main/java/cl/duoc/barriodigital/catalog/persistence/ProcedureTypeRepository.java`
- **Oracle database**
- [Seed startup runner](https://github.com/ceoalmaloco/ms-barriodigital-catalog/blob/main/src/main/java/cl/duoc/barriodigital/catalog/persistence/ProcedureTypeSeedRunner.java): `src/main/java/cl/duoc/barriodigital/catalog/persistence/ProcedureTypeSeedRunner.java`
- [Initial catalog seed](https://github.com/ceoalmaloco/ms-barriodigital-catalog/blob/main/src/main/java/cl/duoc/barriodigital/catalog/persistence/ProcedureTypeSeed.java): `src/main/java/cl/duoc/barriodigital/catalog/persistence/ProcedureTypeSeed.java`

### Runtime Support

- [Oracle wallet config](https://github.com/ceoalmaloco/ms-barriodigital-catalog/blob/main/src/main/java/cl/duoc/barriodigital/catalog/config/OracleWalletConfiguration.java): `src/main/java/cl/duoc/barriodigital/catalog/config/OracleWalletConfiguration.java`
- [Spring application](https://github.com/ceoalmaloco/ms-barriodigital-catalog/blob/main/src/main/java/cl/duoc/barriodigital/catalog/CatalogApplication.java): `src/main/java/cl/duoc/barriodigital/catalog/CatalogApplication.java`

### Other components

- **Users and BFF**
- **Admin caller**

## Connections

- Users and BFF → Catalog endpoints: calls endpoints (evidence: `README.md`)
- Admin caller → Catalog endpoints: sends admin requests (evidence: `README.md`)
- Catalog endpoints → Catalog service: delegates operations (evidence: `src/main/java/cl/duoc/barriodigital/catalog/web/CatalogController.java`)
- Catalog endpoints → Request DTOs: accepts bodies (evidence: `src/main/java/cl/duoc/barriodigital/catalog/web/CatalogController.java`)
- Catalog endpoints → Procedure response: returns views (evidence: `src/main/java/cl/duoc/barriodigital/catalog/web/CatalogController.java`)
- Catalog service → Role check: checks roles (evidence: `src/main/java/cl/duoc/barriodigital/catalog/service/CatalogService.java`)
- Catalog service → Request DTOs: validates input (evidence: `src/main/java/cl/duoc/barriodigital/catalog/service/CatalogService.java`)
- Catalog service → Procedure response: builds responses (evidence: `src/main/java/cl/duoc/barriodigital/catalog/service/CatalogService.java`)
- Procedure response → Quota rules: maps entity (evidence: `src/main/java/cl/duoc/barriodigital/catalog/web/dto/ProcedureView.java`)
- Catalog service → Quota rules: applies quota rules (evidence: `src/main/java/cl/duoc/barriodigital/catalog/service/CatalogService.java`)
- Catalog service → Type repository: reads and saves (evidence: `src/main/java/cl/duoc/barriodigital/catalog/service/CatalogService.java`)
- Type repository → Oracle database: persists catalog (evidence: `README.md`)
- Seed startup runner → Initial catalog seed: runs seeding (evidence: `src/main/java/cl/duoc/barriodigital/catalog/persistence/ProcedureTypeSeedRunner.java`)
- Initial catalog seed → Type repository: checks and saves (evidence: `src/main/java/cl/duoc/barriodigital/catalog/persistence/ProcedureTypeSeed.java`)
- Initial catalog seed → Quota rules: creates seed rows (evidence: `src/main/java/cl/duoc/barriodigital/catalog/persistence/ProcedureTypeSeed.java`)
- Oracle wallet config → Oracle database: configures connection (evidence: `README.md`)
- Spring application → Seed startup runner: starts application
