# samueldazag2/personapp-hexa-spring-boot architecture

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

- Interactive diagram: https://gitdiagram.com/samueldazag2/personapp-hexa-spring-boot
- Repository: https://github.com/samueldazag2/personapp-hexa-spring-boot

## Overview

PersonAPP is a Java service for managing people and their related phone, profession, and study records. Its implemented person workflow accepts REST requests or CLI input, selects MariaDB or MongoDB, invokes a use case, and persists through an output adapter. The README documents the broader four-entity ports and persistence adapters, while noting that REST and CLI CRUD beyond person listing and creation is still pending. Some subsystem links below are documented rather than verified against unsampled implementation files.

Main entry points: [`application/src/main/java/co/edu/javeriana/as/personapp/application/usecase/PersonUseCase.java`](https://github.com/samueldazag2/personapp-hexa-spring-boot/blob/main/application/src/main/java/co/edu/javeriana/as/personapp/application/usecase/PersonUseCase.java) (Person use case), [`rest-input-adapter/src/main/java/co/edu/javeriana/as/personapp/adapter/PersonaInputAdapterRest.java`](https://github.com/samueldazag2/personapp-hexa-spring-boot/blob/main/rest-input-adapter/src/main/java/co/edu/javeriana/as/personapp/adapter/PersonaInputAdapterRest.java) (REST input adapter), [`cli-input-adapter/src/main/java/co/edu/javeriana/as/personapp/terminal/adapter/PersonaInputAdapterCli.java`](https://github.com/samueldazag2/personapp-hexa-spring-boot/blob/main/cli-input-adapter/src/main/java/co/edu/javeriana/as/personapp/terminal/adapter/PersonaInputAdapterCli.java) (CLI input adapter), [`maria-output-adapter/src/main/java/co/edu/javeriana/as/personapp/mariadb/adapter`](https://github.com/samueldazag2/personapp-hexa-spring-boot/tree/main/maria-output-adapter/src/main/java/co/edu/javeriana/as/personapp/mariadb/adapter) (MariaDB output adapters)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_entry["Input adapters"]
  node_rest_controller["Person REST controller"]
  node_rest_adapter["REST input adapter"]
  node_rest_mapper["REST mapper"]
  node_cli_menu["CLI menu<br/>[PersonaMenu.java]"]
  node_cli_adapter["CLI input adapter"]
end

subgraph group_core["Application core"]
  node_person_usecase["Person use case<br/>[PersonUseCase.java]"]
  node_person_ports["Person ports"]
  node_domain_model["Person and related models<br/>[Person.java]"]
  node_related_usecases["Phone, study, profession use cases"]
end

subgraph group_maria["MariaDB persistence"]
  node_maria_adapter["MariaDB output adapters"]
  node_maria_repo["MariaDB repositories"]
  node_maria_entities["MariaDB entities<br/>[PersonaEntity.java]"]
  node_maria_db[("MariaDB")]
end

subgraph group_mongo["MongoDB persistence"]
  node_mongo_adapter["MongoDB output adapters"]
  node_mongo_repo["MongoDB repositories"]
  node_mongo_docs["MongoDB documents"]
  node_mongo_db[("MongoDB")]
end

node_client(("REST client"))
node_cli_user(("CLI user"))

node_client -->|"sends requests"| node_rest_controller
node_rest_controller -->|"delegates to"| node_rest_adapter
node_rest_adapter -->|"maps data"| node_rest_mapper
node_cli_user -->|"chooses options"| node_cli_menu
node_cli_menu -->|"invokes"| node_cli_adapter
node_rest_adapter -->|"invokes"| node_person_usecase
node_cli_adapter -->|"constructs"| node_person_usecase
node_person_usecase -->|"implements input port"| node_person_ports
node_person_usecase -->|"uses models"| node_domain_model
node_rest_adapter -->|"selects output"| node_maria_adapter
node_rest_adapter -->|"selects output"| node_mongo_adapter
node_cli_adapter -->|"selects output"| node_maria_adapter
node_cli_adapter -->|"selects output"| node_mongo_adapter
node_person_usecase -->|"calls output port"| node_maria_adapter
node_person_usecase -.->|"calls output port"| node_mongo_adapter
node_maria_adapter -->|"persists through"| node_maria_repo
node_maria_repo -->|"uses entities"| node_maria_entities
node_maria_repo -->|"reads and writes"| node_maria_db
node_mongo_adapter -->|"persists through"| node_mongo_repo
node_mongo_repo -->|"uses documents"| node_mongo_docs
node_mongo_repo -->|"reads and writes"| node_mongo_db
node_related_usecases -.->|"shares ports"| node_person_ports

click node_rest_controller "https://github.com/samueldazag2/personapp-hexa-spring-boot/blob/main/rest-input-adapter/src/main/java/co/edu/javeriana/as/personapp/controller/PersonaControllerV1.java"
click node_rest_adapter "https://github.com/samueldazag2/personapp-hexa-spring-boot/blob/main/rest-input-adapter/src/main/java/co/edu/javeriana/as/personapp/adapter/PersonaInputAdapterRest.java"
click node_rest_mapper "https://github.com/samueldazag2/personapp-hexa-spring-boot/blob/main/rest-input-adapter/src/main/java/co/edu/javeriana/as/personapp/mapper/PersonaMapperRest.java"
click node_cli_menu "https://github.com/samueldazag2/personapp-hexa-spring-boot/blob/main/cli-input-adapter/src/main/java/co/edu/javeriana/as/personapp/terminal/menu/PersonaMenu.java"
click node_cli_adapter "https://github.com/samueldazag2/personapp-hexa-spring-boot/blob/main/cli-input-adapter/src/main/java/co/edu/javeriana/as/personapp/terminal/adapter/PersonaInputAdapterCli.java"
click node_person_usecase "https://github.com/samueldazag2/personapp-hexa-spring-boot/blob/main/application/src/main/java/co/edu/javeriana/as/personapp/application/usecase/PersonUseCase.java"
click node_person_ports "https://github.com/samueldazag2/personapp-hexa-spring-boot/blob/main/application/src/main/java/co/edu/javeriana/as/personapp/application/port/in/PersonInputPort.java"
click node_domain_model "https://github.com/samueldazag2/personapp-hexa-spring-boot/blob/main/domain/src/main/java/co/edu/javeriana/as/personapp/domain/Person.java"
click node_related_usecases "https://github.com/samueldazag2/personapp-hexa-spring-boot/tree/main/application/src/main/java/co/edu/javeriana/as/personapp/application/usecase"
click node_maria_adapter "https://github.com/samueldazag2/personapp-hexa-spring-boot/tree/main/maria-output-adapter/src/main/java/co/edu/javeriana/as/personapp/mariadb/adapter"
click node_maria_repo "https://github.com/samueldazag2/personapp-hexa-spring-boot/tree/main/maria-output-adapter/src/main/java/co/edu/javeriana/as/personapp/mariadb/repository"
click node_maria_entities "https://github.com/samueldazag2/personapp-hexa-spring-boot/blob/main/maria-output-adapter/src/main/java/co/edu/javeriana/as/personapp/mariadb/entity/PersonaEntity.java"
click node_mongo_adapter "https://github.com/samueldazag2/personapp-hexa-spring-boot/tree/main/mongo-output-adapter/src/main/java/co/edu/javeriana/as/personapp/mongo/adapter"
click node_mongo_repo "https://github.com/samueldazag2/personapp-hexa-spring-boot/tree/main/mongo-output-adapter/src/main/java/co/edu/javeriana/as/personapp/mongo/repository"
click node_mongo_docs "https://github.com/samueldazag2/personapp-hexa-spring-boot/tree/main/mongo-output-adapter/src/main/java/co/edu/javeriana/as/personapp/mongo/document"

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_rest_controller,node_rest_adapter,node_rest_mapper,node_cli_menu,node_cli_adapter,node_client,node_cli_user toneBlue
class node_person_usecase,node_person_ports,node_domain_model,node_related_usecases toneAmber
class node_maria_adapter,node_maria_repo,node_maria_entities,node_maria_db toneMint
class node_mongo_adapter,node_mongo_repo,node_mongo_docs,node_mongo_db toneRose
```

## Components

### Input adapters

- [Person REST controller](https://github.com/samueldazag2/personapp-hexa-spring-boot/blob/main/rest-input-adapter/src/main/java/co/edu/javeriana/as/personapp/controller/PersonaControllerV1.java): `rest-input-adapter/src/main/java/co/edu/javeriana/as/personapp/controller/PersonaControllerV1.java`
- [REST input adapter](https://github.com/samueldazag2/personapp-hexa-spring-boot/blob/main/rest-input-adapter/src/main/java/co/edu/javeriana/as/personapp/adapter/PersonaInputAdapterRest.java): `rest-input-adapter/src/main/java/co/edu/javeriana/as/personapp/adapter/PersonaInputAdapterRest.java`
- [REST mapper](https://github.com/samueldazag2/personapp-hexa-spring-boot/blob/main/rest-input-adapter/src/main/java/co/edu/javeriana/as/personapp/mapper/PersonaMapperRest.java): `rest-input-adapter/src/main/java/co/edu/javeriana/as/personapp/mapper/PersonaMapperRest.java`
- [CLI menu](https://github.com/samueldazag2/personapp-hexa-spring-boot/blob/main/cli-input-adapter/src/main/java/co/edu/javeriana/as/personapp/terminal/menu/PersonaMenu.java): `cli-input-adapter/src/main/java/co/edu/javeriana/as/personapp/terminal/menu/PersonaMenu.java`
- [CLI input adapter](https://github.com/samueldazag2/personapp-hexa-spring-boot/blob/main/cli-input-adapter/src/main/java/co/edu/javeriana/as/personapp/terminal/adapter/PersonaInputAdapterCli.java): `cli-input-adapter/src/main/java/co/edu/javeriana/as/personapp/terminal/adapter/PersonaInputAdapterCli.java`

### Application core

- [Person use case](https://github.com/samueldazag2/personapp-hexa-spring-boot/blob/main/application/src/main/java/co/edu/javeriana/as/personapp/application/usecase/PersonUseCase.java): `application/src/main/java/co/edu/javeriana/as/personapp/application/usecase/PersonUseCase.java`
- [Person ports](https://github.com/samueldazag2/personapp-hexa-spring-boot/blob/main/application/src/main/java/co/edu/javeriana/as/personapp/application/port/in/PersonInputPort.java): `application/src/main/java/co/edu/javeriana/as/personapp/application/port/in/PersonInputPort.java`
- [Person and related models](https://github.com/samueldazag2/personapp-hexa-spring-boot/blob/main/domain/src/main/java/co/edu/javeriana/as/personapp/domain/Person.java): `domain/src/main/java/co/edu/javeriana/as/personapp/domain/Person.java`
- [Phone, study, profession use cases](https://github.com/samueldazag2/personapp-hexa-spring-boot/tree/main/application/src/main/java/co/edu/javeriana/as/personapp/application/usecase): `application/src/main/java/co/edu/javeriana/as/personapp/application/usecase`

### MariaDB persistence

- [MariaDB output adapters](https://github.com/samueldazag2/personapp-hexa-spring-boot/tree/main/maria-output-adapter/src/main/java/co/edu/javeriana/as/personapp/mariadb/adapter): `maria-output-adapter/src/main/java/co/edu/javeriana/as/personapp/mariadb/adapter`
- [MariaDB repositories](https://github.com/samueldazag2/personapp-hexa-spring-boot/tree/main/maria-output-adapter/src/main/java/co/edu/javeriana/as/personapp/mariadb/repository): `maria-output-adapter/src/main/java/co/edu/javeriana/as/personapp/mariadb/repository`
- [MariaDB entities](https://github.com/samueldazag2/personapp-hexa-spring-boot/blob/main/maria-output-adapter/src/main/java/co/edu/javeriana/as/personapp/mariadb/entity/PersonaEntity.java): `maria-output-adapter/src/main/java/co/edu/javeriana/as/personapp/mariadb/entity/PersonaEntity.java`
- **MariaDB**

### MongoDB persistence

- [MongoDB output adapters](https://github.com/samueldazag2/personapp-hexa-spring-boot/tree/main/mongo-output-adapter/src/main/java/co/edu/javeriana/as/personapp/mongo/adapter): `mongo-output-adapter/src/main/java/co/edu/javeriana/as/personapp/mongo/adapter`
- [MongoDB repositories](https://github.com/samueldazag2/personapp-hexa-spring-boot/tree/main/mongo-output-adapter/src/main/java/co/edu/javeriana/as/personapp/mongo/repository): `mongo-output-adapter/src/main/java/co/edu/javeriana/as/personapp/mongo/repository`
- [MongoDB documents](https://github.com/samueldazag2/personapp-hexa-spring-boot/tree/main/mongo-output-adapter/src/main/java/co/edu/javeriana/as/personapp/mongo/document): `mongo-output-adapter/src/main/java/co/edu/javeriana/as/personapp/mongo/document`
- **MongoDB**

### Other components

- **REST client**
- **CLI user**

## Connections

- REST client → Person REST controller: sends requests (evidence: `README.md`)
- Person REST controller → REST input adapter: delegates to (evidence: `rest-input-adapter/src/main/java/co/edu/javeriana/as/personapp/controller/PersonaControllerV1.java`)
- REST input adapter → REST mapper: maps data (evidence: `rest-input-adapter/src/main/java/co/edu/javeriana/as/personapp/adapter/PersonaInputAdapterRest.java`)
- CLI user → CLI menu: chooses options (evidence: `README.md`)
- CLI menu → CLI input adapter: invokes (evidence: `cli-input-adapter/src/main/java/co/edu/javeriana/as/personapp/terminal/menu/PersonaMenu.java`)
- REST input adapter → Person use case: invokes (evidence: `rest-input-adapter/src/main/java/co/edu/javeriana/as/personapp/adapter/PersonaInputAdapterRest.java`)
- CLI input adapter → Person use case: constructs (evidence: `cli-input-adapter/src/main/java/co/edu/javeriana/as/personapp/terminal/adapter/PersonaInputAdapterCli.java`)
- Person use case → Person ports: implements input port (evidence: `application/src/main/java/co/edu/javeriana/as/personapp/application/usecase/PersonUseCase.java`)
- Person use case → Person and related models: uses models (evidence: `application/src/main/java/co/edu/javeriana/as/personapp/application/usecase/PersonUseCase.java`)
- REST input adapter → MariaDB output adapters: selects output (evidence: `rest-input-adapter/src/main/java/co/edu/javeriana/as/personapp/adapter/PersonaInputAdapterRest.java`)
- REST input adapter → MongoDB output adapters: selects output (evidence: `rest-input-adapter/src/main/java/co/edu/javeriana/as/personapp/adapter/PersonaInputAdapterRest.java`)
- CLI input adapter → MariaDB output adapters: selects output (evidence: `cli-input-adapter/src/main/java/co/edu/javeriana/as/personapp/terminal/adapter/PersonaInputAdapterCli.java`)
- CLI input adapter → MongoDB output adapters: selects output (evidence: `cli-input-adapter/src/main/java/co/edu/javeriana/as/personapp/terminal/adapter/PersonaInputAdapterCli.java`)
- Person use case → MariaDB output adapters: calls output port (evidence: `application/src/main/java/co/edu/javeriana/as/personapp/application/usecase/PersonUseCase.java`)
- Person use case → MongoDB output adapters: calls output port
- MariaDB output adapters → MariaDB repositories: persists through (evidence: `README.md`)
- MariaDB repositories → MariaDB entities: uses entities (evidence: `maria-output-adapter/src/main/java/co/edu/javeriana/as/personapp/mariadb/repository/PersonaRepositoryMaria.java`)
- MariaDB repositories → MariaDB: reads and writes (evidence: `README.md`)
- MongoDB output adapters → MongoDB repositories: persists through (evidence: `README.md`)
- MongoDB repositories → MongoDB documents: uses documents (evidence: `mongo-output-adapter/src/main/java/co/edu/javeriana/as/personapp/mongo/repository/PersonaRepositoryMongo.java`)
- MongoDB repositories → MongoDB: reads and writes (evidence: `README.md`)
- Phone, study, profession use cases → Person ports: shares ports (evidence: `application/src/main/java/co/edu/javeriana/as/personapp/application/usecase/PersonUseCase.java`)
