# augxusto/eduacao architecture

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

- Interactive diagram: https://gitdiagram.com/augxusto/eduacao
- Repository: https://github.com/augxusto/eduacao

## Overview

EduAção is a REST API PoC for recording and tracking educational problems. Its main workflow accepts a validated problem report, checks its school and user references, assigns an initial status and calculated priority, then persists it; clients can list, retrieve, and update status. Separate endpoints manage schools and users, and expose domain options. The README documents MongoDB-backed repositories and notes that authentication, role restrictions, history, and indicators are not implemented. Relationships below follow the sampled calls and README architecture; unsampled controller and configuration details are not inferred.

Main entry points: [`src/main/java/br/com/eduacao/domain/service/ProblemaService.java`](https://github.com/augxusto/eduacao/blob/main/src/main/java/br/com/eduacao/domain/service/ProblemaService.java) (Problem workflow), [`src/main/java/br/com/eduacao/domain/model/Problema.java`](https://github.com/augxusto/eduacao/blob/main/src/main/java/br/com/eduacao/domain/model/Problema.java) (Problem record), [`src/main/java/br/com/eduacao/domain/controllers/OpcaoController.java`](https://github.com/augxusto/eduacao/blob/main/src/main/java/br/com/eduacao/domain/controllers/OpcaoController.java) (Domain options), [`src/main/java/br/com/eduacao/domain/repository/EscolaRepository.java`](https://github.com/augxusto/eduacao/blob/main/src/main/java/br/com/eduacao/domain/repository/EscolaRepository.java) (School repository)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_api["REST API"]
  node_escola_controller["School endpoints"]
  node_usuario_controller["User endpoints"]
  node_problema_controller["Problem endpoints"]
  node_opcao_controller["Domain options"]
  node_exception_handler["API errors"]
end

subgraph group_services["Domain services"]
  node_escola_service["School service<br/>[EscolaService.java]"]
  node_usuario_service["User service"]
  node_problema_service["Problem workflow"]
end

subgraph group_domain["Domain and persistence"]
  node_escola_model["School record<br/>[Escola.java]"]
  node_usuario_model["User record<br/>[Usuario.java]"]
  node_problema_model["Problem record<br/>[Problema.java]"]
  node_audit_model["Audit timestamps"]
  node_escola_repo["School repository"]
  node_usuario_repo["User repository"]
  node_problema_repo["Problem repository"]
  node_categoria_enum["Problem categories"]
  node_perfil_enum["User profiles<br/>[PerfilUsuario.java]"]
  node_prioridade_enum["Priority levels"]
  node_status_enum["Problem statuses"]
end

node_client(("HTTP client"))
node_mongodb[("MongoDB")]

node_client -->|"HTTP requests"| node_escola_controller
node_client -->|"HTTP requests"| node_usuario_controller
node_client -->|"HTTP requests"| node_problema_controller
node_client -->|"HTTP requests"| node_opcao_controller
node_escola_controller -->|"delegates to"| node_escola_service
node_usuario_controller -->|"delegates to"| node_usuario_service
node_problema_controller -->|"delegates to"| node_problema_service
node_escola_service -->|"reads and writes"| node_escola_repo
node_usuario_service -->|"checks school"| node_escola_repo
node_usuario_service -->|"reads and writes"| node_usuario_repo
node_problema_service -->|"checks school"| node_escola_repo
node_problema_service -->|"checks user"| node_usuario_repo
node_problema_service -->|"reads and writes"| node_problema_repo
node_escola_repo -->|"persists records"| node_mongodb
node_usuario_repo -->|"persists records"| node_mongodb
node_problema_repo -->|"persists records"| node_mongodb
node_escola_model -->|"extends"| node_audit_model
node_usuario_model -->|"extends"| node_audit_model
node_problema_model -->|"extends"| node_audit_model
node_problema_model -->|"uses category"| node_categoria_enum
node_problema_model -->|"uses priority"| node_prioridade_enum
node_problema_model -->|"uses status"| node_status_enum
node_usuario_model -->|"uses profile"| node_perfil_enum
node_problema_service -->|"classifies reports"| node_categoria_enum
node_problema_service -->|"calculates priority"| node_prioridade_enum
node_problema_service -->|"sets status"| node_status_enum
node_opcao_controller -->|"exposes options"| node_categoria_enum
node_opcao_controller -->|"exposes options"| node_perfil_enum
node_opcao_controller -->|"exposes options"| node_status_enum

click node_escola_controller "https://github.com/augxusto/eduacao/blob/main/src/main/java/br/com/eduacao/domain/controllers/EscolaController.java"
click node_usuario_controller "https://github.com/augxusto/eduacao/blob/main/src/main/java/br/com/eduacao/domain/controllers/UsuarioController.java"
click node_problema_controller "https://github.com/augxusto/eduacao/blob/main/src/main/java/br/com/eduacao/domain/controllers/ProblemaController.java"
click node_opcao_controller "https://github.com/augxusto/eduacao/blob/main/src/main/java/br/com/eduacao/domain/controllers/OpcaoController.java"
click node_exception_handler "https://github.com/augxusto/eduacao/blob/main/src/main/java/br/com/eduacao/domain/controllers/ApiExceptionHandler.java"
click node_escola_service "https://github.com/augxusto/eduacao/blob/main/src/main/java/br/com/eduacao/domain/service/EscolaService.java"
click node_usuario_service "https://github.com/augxusto/eduacao/blob/main/src/main/java/br/com/eduacao/domain/service/UsuarioService.java"
click node_problema_service "https://github.com/augxusto/eduacao/blob/main/src/main/java/br/com/eduacao/domain/service/ProblemaService.java"
click node_escola_model "https://github.com/augxusto/eduacao/blob/main/src/main/java/br/com/eduacao/domain/model/Escola.java"
click node_usuario_model "https://github.com/augxusto/eduacao/blob/main/src/main/java/br/com/eduacao/domain/model/Usuario.java"
click node_problema_model "https://github.com/augxusto/eduacao/blob/main/src/main/java/br/com/eduacao/domain/model/Problema.java"
click node_audit_model "https://github.com/augxusto/eduacao/blob/main/src/main/java/br/com/eduacao/domain/model/EntidadeAuditavel.java"
click node_escola_repo "https://github.com/augxusto/eduacao/blob/main/src/main/java/br/com/eduacao/domain/repository/EscolaRepository.java"
click node_usuario_repo "https://github.com/augxusto/eduacao/blob/main/src/main/java/br/com/eduacao/domain/repository/UsuarioRepository.java"
click node_problema_repo "https://github.com/augxusto/eduacao/blob/main/src/main/java/br/com/eduacao/domain/repository/ProblemaRepository.java"
click node_categoria_enum "https://github.com/augxusto/eduacao/blob/main/src/main/java/br/com/eduacao/domain/enums/CategoriaProblema.java"
click node_perfil_enum "https://github.com/augxusto/eduacao/blob/main/src/main/java/br/com/eduacao/domain/enums/PerfilUsuario.java"
click node_prioridade_enum "https://github.com/augxusto/eduacao/blob/main/src/main/java/br/com/eduacao/domain/enums/PrioridadeProblema.java"
click node_status_enum "https://github.com/augxusto/eduacao/blob/main/src/main/java/br/com/eduacao/domain/enums/StatusProblema.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_escola_controller,node_usuario_controller,node_problema_controller,node_opcao_controller,node_exception_handler,node_client toneBlue
class node_escola_service,node_usuario_service,node_problema_service,node_mongodb toneAmber
class node_escola_model,node_usuario_model,node_problema_model,node_audit_model,node_escola_repo,node_usuario_repo,node_problema_repo,node_categoria_enum,node_perfil_enum,node_prioridade_enum,node_status_enum toneMint
```

## Components

### REST API

- [School endpoints](https://github.com/augxusto/eduacao/blob/main/src/main/java/br/com/eduacao/domain/controllers/EscolaController.java): `src/main/java/br/com/eduacao/domain/controllers/EscolaController.java`
- [User endpoints](https://github.com/augxusto/eduacao/blob/main/src/main/java/br/com/eduacao/domain/controllers/UsuarioController.java): `src/main/java/br/com/eduacao/domain/controllers/UsuarioController.java`
- [Problem endpoints](https://github.com/augxusto/eduacao/blob/main/src/main/java/br/com/eduacao/domain/controllers/ProblemaController.java): `src/main/java/br/com/eduacao/domain/controllers/ProblemaController.java`
- [Domain options](https://github.com/augxusto/eduacao/blob/main/src/main/java/br/com/eduacao/domain/controllers/OpcaoController.java): `src/main/java/br/com/eduacao/domain/controllers/OpcaoController.java`
- [API errors](https://github.com/augxusto/eduacao/blob/main/src/main/java/br/com/eduacao/domain/controllers/ApiExceptionHandler.java): `src/main/java/br/com/eduacao/domain/controllers/ApiExceptionHandler.java`

### Domain services

- [School service](https://github.com/augxusto/eduacao/blob/main/src/main/java/br/com/eduacao/domain/service/EscolaService.java): `src/main/java/br/com/eduacao/domain/service/EscolaService.java`
- [User service](https://github.com/augxusto/eduacao/blob/main/src/main/java/br/com/eduacao/domain/service/UsuarioService.java): `src/main/java/br/com/eduacao/domain/service/UsuarioService.java`
- [Problem workflow](https://github.com/augxusto/eduacao/blob/main/src/main/java/br/com/eduacao/domain/service/ProblemaService.java): `src/main/java/br/com/eduacao/domain/service/ProblemaService.java`

### Domain and persistence

- [School record](https://github.com/augxusto/eduacao/blob/main/src/main/java/br/com/eduacao/domain/model/Escola.java): `src/main/java/br/com/eduacao/domain/model/Escola.java`
- [User record](https://github.com/augxusto/eduacao/blob/main/src/main/java/br/com/eduacao/domain/model/Usuario.java): `src/main/java/br/com/eduacao/domain/model/Usuario.java`
- [Problem record](https://github.com/augxusto/eduacao/blob/main/src/main/java/br/com/eduacao/domain/model/Problema.java): `src/main/java/br/com/eduacao/domain/model/Problema.java`
- [Audit timestamps](https://github.com/augxusto/eduacao/blob/main/src/main/java/br/com/eduacao/domain/model/EntidadeAuditavel.java): `src/main/java/br/com/eduacao/domain/model/EntidadeAuditavel.java`
- [School repository](https://github.com/augxusto/eduacao/blob/main/src/main/java/br/com/eduacao/domain/repository/EscolaRepository.java): `src/main/java/br/com/eduacao/domain/repository/EscolaRepository.java`
- [User repository](https://github.com/augxusto/eduacao/blob/main/src/main/java/br/com/eduacao/domain/repository/UsuarioRepository.java): `src/main/java/br/com/eduacao/domain/repository/UsuarioRepository.java`
- [Problem repository](https://github.com/augxusto/eduacao/blob/main/src/main/java/br/com/eduacao/domain/repository/ProblemaRepository.java): `src/main/java/br/com/eduacao/domain/repository/ProblemaRepository.java`
- [Problem categories](https://github.com/augxusto/eduacao/blob/main/src/main/java/br/com/eduacao/domain/enums/CategoriaProblema.java): `src/main/java/br/com/eduacao/domain/enums/CategoriaProblema.java`
- [User profiles](https://github.com/augxusto/eduacao/blob/main/src/main/java/br/com/eduacao/domain/enums/PerfilUsuario.java): `src/main/java/br/com/eduacao/domain/enums/PerfilUsuario.java`
- [Priority levels](https://github.com/augxusto/eduacao/blob/main/src/main/java/br/com/eduacao/domain/enums/PrioridadeProblema.java): `src/main/java/br/com/eduacao/domain/enums/PrioridadeProblema.java`
- [Problem statuses](https://github.com/augxusto/eduacao/blob/main/src/main/java/br/com/eduacao/domain/enums/StatusProblema.java): `src/main/java/br/com/eduacao/domain/enums/StatusProblema.java`

### Other components

- **HTTP client**
- **MongoDB**

## Connections

- HTTP client → School endpoints: HTTP requests (evidence: `README.md`)
- HTTP client → User endpoints: HTTP requests (evidence: `README.md`)
- HTTP client → Problem endpoints: HTTP requests (evidence: `README.md`)
- HTTP client → Domain options: HTTP requests (evidence: `README.md`)
- School endpoints → School service: delegates to (evidence: `src/main/java/br/com/eduacao/domain/controllers/EscolaController.java`)
- User endpoints → User service: delegates to (evidence: `src/main/java/br/com/eduacao/domain/controllers/UsuarioController.java`)
- Problem endpoints → Problem workflow: delegates to (evidence: `src/main/java/br/com/eduacao/domain/controllers/ProblemaController.java`)
- School service → School repository: reads and writes (evidence: `src/main/java/br/com/eduacao/domain/service/EscolaService.java`)
- User service → School repository: checks school (evidence: `src/main/java/br/com/eduacao/domain/service/UsuarioService.java`)
- User service → User repository: reads and writes (evidence: `src/main/java/br/com/eduacao/domain/service/UsuarioService.java`)
- Problem workflow → School repository: checks school (evidence: `src/main/java/br/com/eduacao/domain/service/ProblemaService.java`)
- Problem workflow → User repository: checks user (evidence: `src/main/java/br/com/eduacao/domain/service/ProblemaService.java`)
- Problem workflow → Problem repository: reads and writes (evidence: `src/main/java/br/com/eduacao/domain/service/ProblemaService.java`)
- School repository → MongoDB: persists records (evidence: `README.md`)
- User repository → MongoDB: persists records (evidence: `README.md`)
- Problem repository → MongoDB: persists records (evidence: `README.md`)
- School record → Audit timestamps: extends (evidence: `src/main/java/br/com/eduacao/domain/model/Escola.java`)
- User record → Audit timestamps: extends (evidence: `src/main/java/br/com/eduacao/domain/model/Usuario.java`)
- Problem record → Audit timestamps: extends (evidence: `src/main/java/br/com/eduacao/domain/model/Problema.java`)
- Problem record → Problem categories: uses category (evidence: `src/main/java/br/com/eduacao/domain/model/Problema.java`)
- Problem record → Priority levels: uses priority (evidence: `src/main/java/br/com/eduacao/domain/model/Problema.java`)
- Problem record → Problem statuses: uses status (evidence: `src/main/java/br/com/eduacao/domain/model/Problema.java`)
- User record → User profiles: uses profile (evidence: `src/main/java/br/com/eduacao/domain/model/Usuario.java`)
- Problem workflow → Problem categories: classifies reports (evidence: `src/main/java/br/com/eduacao/domain/service/ProblemaService.java`)
- Problem workflow → Priority levels: calculates priority (evidence: `src/main/java/br/com/eduacao/domain/service/ProblemaService.java`)
- Problem workflow → Problem statuses: sets status (evidence: `src/main/java/br/com/eduacao/domain/service/ProblemaService.java`)
- Domain options → Problem categories: exposes options (evidence: `src/main/java/br/com/eduacao/domain/controllers/OpcaoController.java`)
- Domain options → User profiles: exposes options (evidence: `src/main/java/br/com/eduacao/domain/controllers/OpcaoController.java`)
- Domain options → Problem statuses: exposes options (evidence: `src/main/java/br/com/eduacao/domain/controllers/OpcaoController.java`)
