# gmiranda21ml/cem architecture

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

- Interactive diagram: https://gitdiagram.com/gmiranda21ml/cem
- Repository: https://github.com/gmiranda21ml/cem

## Overview

CEM is an academic monitoring and mentoring management system. Users work through a React frontend and backend API to manage access and invitations, communications, and monitoring activities such as sessions, absences, make-up suggestions, and evaluations; certificates are another domain capability. The sampled services show domain rules coordinating repository ports and related services, with infrastructure providing persistence. The README documents MariaDB/MySQL and real email delivery. Several UI-to-application and application-to-infrastructure links are unverified in the sampled files, so they are shown as dashed.

Main entry points: [`dominio-acesso/src/main/java/br/com/cem/dominio/acesso/usuario/spi/IUsuarioRepositorio.java`](https://github.com/gmiranda21ml/cem/blob/main/dominio-acesso/src/main/java/br/com/cem/dominio/acesso/usuario/spi/IUsuarioRepositorio.java) (User repository port), [`dominio-monitoria/src/main/java/br/com/cem/dominio/monitoria/avaliacao/AvaliacaoServico.java`](https://github.com/gmiranda21ml/cem/blob/main/dominio-monitoria/src/main/java/br/com/cem/dominio/monitoria/avaliacao/AvaliacaoServico.java) (Session evaluation), [`ui-backend/src/main/java/br/com/cem/BackendAplicacao.java`](https://github.com/gmiranda21ml/cem/blob/main/ui-backend/src/main/java/br/com/cem/BackendAplicacao.java) (Backend API), [`dominio-acesso/src/main/java/br/com/cem/dominio/acesso/usuario/UsuarioServico.java`](https://github.com/gmiranda21ml/cem/blob/main/dominio-acesso/src/main/java/br/com/cem/dominio/acesso/usuario/UsuarioServico.java) (Access domain)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_ui["User interfaces"]
  node_frontend["React application<br/>[App.tsx]"]
  node_api["Backend API"]
end

subgraph group_app["Application services"]
  node_access_app["Access use cases"]
  node_communication_app["Communication use cases"]
  node_monitoring_app["Monitoring use cases"]
end

subgraph group_domain["Domain rules"]
  node_access_domain["Access domain"]
  node_user_identity["User identity"]
  node_user_email["Institutional email<br/>[UsuarioEmail.java]"]
  node_user_port["User repository port"]
  node_invite_domain["Invitation lifecycle"]
  node_communication_domain["Communications"]
  node_certificate["Certificate issuance"]
  node_monitoring_domain["Monitoring domain<br/>[SessaoServico.java]"]
  node_sessions["Session scheduling<br/>[SessaoServico.java]"]
  node_absence["Absence and make-up<br/>[FaltaServico.java]"]
  node_evaluation["Session evaluation"]
  node_evaluation_model["Evaluation record<br/>[Avaliacao.java]"]
  node_evaluation_id["Evaluation identifier"]
  node_authorization["Authorization roles<br/>[Autorizacao.java]"]
end

subgraph group_infra["Persistence and integrations"]
  node_certificate_repo["Certificate repository"]
  node_database[("MariaDB / MySQL")]
  node_email_service["Email delivery"]
end

node_user(("CEM user"))
node_email_provider["Gmail SMTP"]

node_user -->|"uses"| node_frontend
node_frontend -->|"proxies requests"| node_api
node_api -.->|"dispatches"| node_access_app
node_api -.->|"dispatches"| node_communication_app
node_api -.->|"dispatches"| node_monitoring_app
node_access_app -.->|"invokes"| node_access_domain
node_communication_app -.->|"invokes"| node_communication_domain
node_monitoring_app -.->|"invokes"| node_monitoring_domain
node_access_domain -->|"reads and writes"| node_user_port
node_access_domain -->|"validates"| node_user_email
node_access_domain -->|"checks roles"| node_authorization
node_invite_domain -->|"creates account"| node_user_port
node_invite_domain -->|"sends invite code"| node_email_service
node_invite_domain -->|"checks roles"| node_authorization
node_communication_domain -.->|"includes"| node_certificate
node_certificate -->|"persists certificate"| node_certificate_repo
node_certificate_repo -.->|"stores records"| node_database
node_certificate -->|"looks up beneficiary"| node_user_port
node_certificate -->|"checks roles"| node_authorization
node_monitoring_domain -.->|"includes"| node_sessions
node_sessions -->|"checks participants"| node_user_port
node_absence -->|"reads and creates sessions"| node_sessions
node_absence -->|"checks permissions"| node_authorization
node_evaluation -->|"creates and edits"| node_evaluation_model
node_evaluation -->|"identifies records"| node_evaluation_id
node_evaluation -->|"checks session eligibility"| node_sessions
node_evaluation -->|"resolves author"| node_user_port
node_email_service -.->|"delivers mail"| node_email_provider

click node_frontend "https://github.com/gmiranda21ml/cem/blob/main/ui-frontend/src/main/react/src/app/App.tsx"
click node_api "https://github.com/gmiranda21ml/cem/blob/main/ui-backend/src/main/java/br/com/cem/BackendAplicacao.java"
click node_access_app "https://github.com/gmiranda21ml/cem/tree/main/aplicacao/src/main/java/br/com/cem/aplicacao/acesso"
click node_communication_app "https://github.com/gmiranda21ml/cem/tree/main/aplicacao/src/main/java/br/com/cem/aplicacao/comunicacao"
click node_monitoring_app "https://github.com/gmiranda21ml/cem/tree/main/aplicacao/src/main/java/br/com/cem/aplicacao/monitoria"
click node_access_domain "https://github.com/gmiranda21ml/cem/blob/main/dominio-acesso/src/main/java/br/com/cem/dominio/acesso/usuario/UsuarioServico.java"
click node_user_identity "https://github.com/gmiranda21ml/cem/blob/main/dominio-acesso/src/main/java/br/com/cem/dominio/acesso/usuario/UsuarioIdentificador.java"
click node_user_email "https://github.com/gmiranda21ml/cem/blob/main/dominio-acesso/src/main/java/br/com/cem/dominio/acesso/usuario/UsuarioEmail.java"
click node_user_port "https://github.com/gmiranda21ml/cem/blob/main/dominio-acesso/src/main/java/br/com/cem/dominio/acesso/usuario/spi/IUsuarioRepositorio.java"
click node_invite_domain "https://github.com/gmiranda21ml/cem/blob/main/dominio-acesso/src/main/java/br/com/cem/dominio/acesso/convite/ConviteServico.java"
click node_communication_domain "https://github.com/gmiranda21ml/cem/blob/main/dominio-comunicacao/src/main/java/br/com/cem/dominio/comunicacao/certificado/CertificadoServico.java"
click node_certificate "https://github.com/gmiranda21ml/cem/blob/main/dominio-comunicacao/src/main/java/br/com/cem/dominio/comunicacao/certificado/CertificadoServico.java"
click node_monitoring_domain "https://github.com/gmiranda21ml/cem/blob/main/dominio-monitoria/src/main/java/br/com/cem/dominio/monitoria/sessao/SessaoServico.java"
click node_sessions "https://github.com/gmiranda21ml/cem/blob/main/dominio-monitoria/src/main/java/br/com/cem/dominio/monitoria/sessao/SessaoServico.java"
click node_absence "https://github.com/gmiranda21ml/cem/blob/main/dominio-monitoria/src/main/java/br/com/cem/dominio/monitoria/falta/FaltaServico.java"
click node_evaluation "https://github.com/gmiranda21ml/cem/blob/main/dominio-monitoria/src/main/java/br/com/cem/dominio/monitoria/avaliacao/AvaliacaoServico.java"
click node_evaluation_model "https://github.com/gmiranda21ml/cem/blob/main/dominio-monitoria/src/main/java/br/com/cem/dominio/monitoria/avaliacao/Avaliacao.java"
click node_evaluation_id "https://github.com/gmiranda21ml/cem/blob/main/dominio-monitoria/src/main/java/br/com/cem/dominio/monitoria/avaliacao/AvaliacaoIdentificador.java"
click node_authorization "https://github.com/gmiranda21ml/cem/blob/main/dominio-compartilhado/src/main/java/br/com/cem/dominio/Autorizacao.java"
click node_certificate_repo "https://github.com/gmiranda21ml/cem/blob/main/infraestrutura/src/main/java/br/com/cem/infraestrutura/comunicacao/certificado/CertificadoRepositorio.java"
click node_email_service "https://github.com/gmiranda21ml/cem/blob/main/dominio-compartilhado/src/main/java/br/com/cem/dominio/spi/IEnviadorEmailServico.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_frontend,node_api,node_user toneBlue
class node_access_app,node_communication_app,node_monitoring_app toneAmber
class node_access_domain,node_user_identity,node_user_email,node_user_port,node_invite_domain,node_communication_domain,node_certificate,node_monitoring_domain,node_sessions,node_absence,node_evaluation,node_evaluation_model,node_evaluation_id,node_authorization toneMint
class node_certificate_repo,node_database,node_email_service toneRose
class node_email_provider toneIndigo
```

## Components

### User interfaces

- [React application](https://github.com/gmiranda21ml/cem/blob/main/ui-frontend/src/main/react/src/app/App.tsx): `ui-frontend/src/main/react/src/app/App.tsx`
- [Backend API](https://github.com/gmiranda21ml/cem/blob/main/ui-backend/src/main/java/br/com/cem/BackendAplicacao.java): `ui-backend/src/main/java/br/com/cem/BackendAplicacao.java`

### Application services

- [Access use cases](https://github.com/gmiranda21ml/cem/tree/main/aplicacao/src/main/java/br/com/cem/aplicacao/acesso): `aplicacao/src/main/java/br/com/cem/aplicacao/acesso`
- [Communication use cases](https://github.com/gmiranda21ml/cem/tree/main/aplicacao/src/main/java/br/com/cem/aplicacao/comunicacao): `aplicacao/src/main/java/br/com/cem/aplicacao/comunicacao`
- [Monitoring use cases](https://github.com/gmiranda21ml/cem/tree/main/aplicacao/src/main/java/br/com/cem/aplicacao/monitoria): `aplicacao/src/main/java/br/com/cem/aplicacao/monitoria`

### Domain rules

- [Access domain](https://github.com/gmiranda21ml/cem/blob/main/dominio-acesso/src/main/java/br/com/cem/dominio/acesso/usuario/UsuarioServico.java): `dominio-acesso/src/main/java/br/com/cem/dominio/acesso/usuario/UsuarioServico.java`
- [User identity](https://github.com/gmiranda21ml/cem/blob/main/dominio-acesso/src/main/java/br/com/cem/dominio/acesso/usuario/UsuarioIdentificador.java): `dominio-acesso/src/main/java/br/com/cem/dominio/acesso/usuario/UsuarioIdentificador.java`
- [Institutional email](https://github.com/gmiranda21ml/cem/blob/main/dominio-acesso/src/main/java/br/com/cem/dominio/acesso/usuario/UsuarioEmail.java): `dominio-acesso/src/main/java/br/com/cem/dominio/acesso/usuario/UsuarioEmail.java`
- [User repository port](https://github.com/gmiranda21ml/cem/blob/main/dominio-acesso/src/main/java/br/com/cem/dominio/acesso/usuario/spi/IUsuarioRepositorio.java): `dominio-acesso/src/main/java/br/com/cem/dominio/acesso/usuario/spi/IUsuarioRepositorio.java`
- [Invitation lifecycle](https://github.com/gmiranda21ml/cem/blob/main/dominio-acesso/src/main/java/br/com/cem/dominio/acesso/convite/ConviteServico.java): `dominio-acesso/src/main/java/br/com/cem/dominio/acesso/convite/ConviteServico.java`
- [Communications](https://github.com/gmiranda21ml/cem/blob/main/dominio-comunicacao/src/main/java/br/com/cem/dominio/comunicacao/certificado/CertificadoServico.java): `dominio-comunicacao/src/main/java/br/com/cem/dominio/comunicacao/certificado/CertificadoServico.java`
- [Certificate issuance](https://github.com/gmiranda21ml/cem/blob/main/dominio-comunicacao/src/main/java/br/com/cem/dominio/comunicacao/certificado/CertificadoServico.java): `dominio-comunicacao/src/main/java/br/com/cem/dominio/comunicacao/certificado/CertificadoServico.java`
- [Monitoring domain](https://github.com/gmiranda21ml/cem/blob/main/dominio-monitoria/src/main/java/br/com/cem/dominio/monitoria/sessao/SessaoServico.java): `dominio-monitoria/src/main/java/br/com/cem/dominio/monitoria/sessao/SessaoServico.java`
- [Session scheduling](https://github.com/gmiranda21ml/cem/blob/main/dominio-monitoria/src/main/java/br/com/cem/dominio/monitoria/sessao/SessaoServico.java): `dominio-monitoria/src/main/java/br/com/cem/dominio/monitoria/sessao/SessaoServico.java`
- [Absence and make-up](https://github.com/gmiranda21ml/cem/blob/main/dominio-monitoria/src/main/java/br/com/cem/dominio/monitoria/falta/FaltaServico.java): `dominio-monitoria/src/main/java/br/com/cem/dominio/monitoria/falta/FaltaServico.java`
- [Session evaluation](https://github.com/gmiranda21ml/cem/blob/main/dominio-monitoria/src/main/java/br/com/cem/dominio/monitoria/avaliacao/AvaliacaoServico.java): `dominio-monitoria/src/main/java/br/com/cem/dominio/monitoria/avaliacao/AvaliacaoServico.java`
- [Evaluation record](https://github.com/gmiranda21ml/cem/blob/main/dominio-monitoria/src/main/java/br/com/cem/dominio/monitoria/avaliacao/Avaliacao.java): `dominio-monitoria/src/main/java/br/com/cem/dominio/monitoria/avaliacao/Avaliacao.java`
- [Evaluation identifier](https://github.com/gmiranda21ml/cem/blob/main/dominio-monitoria/src/main/java/br/com/cem/dominio/monitoria/avaliacao/AvaliacaoIdentificador.java): `dominio-monitoria/src/main/java/br/com/cem/dominio/monitoria/avaliacao/AvaliacaoIdentificador.java`
- [Authorization roles](https://github.com/gmiranda21ml/cem/blob/main/dominio-compartilhado/src/main/java/br/com/cem/dominio/Autorizacao.java): `dominio-compartilhado/src/main/java/br/com/cem/dominio/Autorizacao.java`

### Persistence and integrations

- [Certificate repository](https://github.com/gmiranda21ml/cem/blob/main/infraestrutura/src/main/java/br/com/cem/infraestrutura/comunicacao/certificado/CertificadoRepositorio.java): `infraestrutura/src/main/java/br/com/cem/infraestrutura/comunicacao/certificado/CertificadoRepositorio.java`
- **MariaDB / MySQL**
- [Email delivery](https://github.com/gmiranda21ml/cem/blob/main/dominio-compartilhado/src/main/java/br/com/cem/dominio/spi/IEnviadorEmailServico.java): `dominio-compartilhado/src/main/java/br/com/cem/dominio/spi/IEnviadorEmailServico.java`

### Other components

- **CEM user**
- **Gmail SMTP**

## Connections

- CEM user → React application: uses
- React application → Backend API: proxies requests
- Backend API → Access use cases: dispatches
- Backend API → Communication use cases: dispatches
- Backend API → Monitoring use cases: dispatches
- Access use cases → Access domain: invokes
- Communication use cases → Communications: invokes
- Monitoring use cases → Monitoring domain: invokes
- Access domain → User repository port: reads and writes (evidence: `dominio-acesso/src/main/java/br/com/cem/dominio/acesso/usuario/UsuarioServico.java`)
- Access domain → Institutional email: validates (evidence: `dominio-acesso/src/main/java/br/com/cem/dominio/acesso/usuario/UsuarioServico.java`)
- Access domain → Authorization roles: checks roles (evidence: `dominio-acesso/src/main/java/br/com/cem/dominio/acesso/usuario/UsuarioServico.java`)
- Invitation lifecycle → User repository port: creates account (evidence: `dominio-acesso/src/main/java/br/com/cem/dominio/acesso/convite/ConviteServico.java`)
- Invitation lifecycle → Email delivery: sends invite code (evidence: `dominio-acesso/src/main/java/br/com/cem/dominio/acesso/convite/ConviteServico.java`)
- Invitation lifecycle → Authorization roles: checks roles (evidence: `dominio-acesso/src/main/java/br/com/cem/dominio/acesso/convite/ConviteServico.java`)
- Communications → Certificate issuance: includes (evidence: `dominio-comunicacao/src/main/java/br/com/cem/dominio/comunicacao/certificado/CertificadoServico.java`)
- Certificate issuance → Certificate repository: persists certificate (evidence: `dominio-comunicacao/src/main/java/br/com/cem/dominio/comunicacao/certificado/CertificadoServico.java`)
- Certificate repository → MariaDB / MySQL: stores records
- Certificate issuance → User repository port: looks up beneficiary (evidence: `dominio-comunicacao/src/main/java/br/com/cem/dominio/comunicacao/certificado/CertificadoServico.java`)
- Certificate issuance → Authorization roles: checks roles (evidence: `dominio-comunicacao/src/main/java/br/com/cem/dominio/comunicacao/certificado/CertificadoServico.java`)
- Monitoring domain → Session scheduling: includes (evidence: `dominio-monitoria/src/main/java/br/com/cem/dominio/monitoria/sessao/SessaoServico.java`)
- Session scheduling → User repository port: checks participants (evidence: `dominio-monitoria/src/main/java/br/com/cem/dominio/monitoria/sessao/SessaoServico.java`)
- Absence and make-up → Session scheduling: reads and creates sessions (evidence: `dominio-monitoria/src/main/java/br/com/cem/dominio/monitoria/falta/FaltaServico.java`)
- Absence and make-up → Authorization roles: checks permissions (evidence: `dominio-monitoria/src/main/java/br/com/cem/dominio/monitoria/falta/FaltaServico.java`)
- Session evaluation → Evaluation record: creates and edits (evidence: `dominio-monitoria/src/main/java/br/com/cem/dominio/monitoria/avaliacao/AvaliacaoServico.java`)
- Session evaluation → Evaluation identifier: identifies records (evidence: `dominio-monitoria/src/main/java/br/com/cem/dominio/monitoria/avaliacao/AvaliacaoServico.java`)
- Session evaluation → Session scheduling: checks session eligibility (evidence: `dominio-monitoria/src/main/java/br/com/cem/dominio/monitoria/avaliacao/AvaliacaoServico.java`)
- Session evaluation → User repository port: resolves author (evidence: `dominio-monitoria/src/main/java/br/com/cem/dominio/monitoria/avaliacao/AvaliacaoServico.java`)
- Email delivery → Gmail SMTP: delivers mail
