Sistema CLI para gerenciamento de medicamentos, tratamentos e alertas de consumo.
Desenvolvido no Bootcamp de Engenharia de Software — UNINTER | Time 5
Sistema CLI desenvolvido em Java com Spring Boot que ajuda usuários a organizar tratamentos, medicamentos associados e alertas de consumo de forma simples e objetiva.
- Pré-requisitos
- Arquitetura
- Modelo de Domínio
- Entidades
- Decisões de Modelagem
- Estrutura do Projeto
- Funcionalidades
- Banco de Dados
- Configuração
- Como Executar
- Testes
- Exemplo de Uso da CLI
- Diagramas
- Observações Importantes
- Equipe
- Licença
Antes de executar o projeto, certifique-se de ter instalado:
| Ferramenta | Versão mínima |
|---|---|
| Java (JDK) | 21+ |
| Maven | 3.9+ |
| Docker | 24+ |
| Docker Compose | 2.x |
| MySQL (execução local) | 8.x |
O projeto segue uma arquitetura em camadas, mantida propositalmente simples para o contexto de uma aplicação CLI:
CLI (App.java)
-> Service
-> Repository
-> JPA / MySQL
Usuario
└── Tratamento
├── Alerta
└── TratamentoMedicamento
└── Medicamento
Enderecofoi removido por não participar das regras atuais da aplicação.
| Entidade | Responsabilidade |
|---|---|
Usuario |
Dados básicos do usuário |
Medicamento |
Catálogo de medicamentos disponíveis |
Tratamento |
Plano de tratamento vinculado a um usuário |
TratamentoMedicamento |
Medicamento dentro de um tratamento, com dose, horário e frequência |
Alerta |
Evento de lembrete e registro de consumo |
TratamentoMedicamentousa ID próprio (id_tratamento_medicamento) para simplificar o mapeamento JPA.- A constraint
UNIQUE (id_tratamento, id_medicamento)impede associar o mesmo medicamento duas vezes ao mesmo tratamento. horario_uso,frequencia_uso,quantidadeeobservacaoficam emtratamento_medicamento, pois são propriedades do uso de um medicamento dentro de um tratamento.Medicamento.unidadeMedidarepresenta o tipo de medida (UNIDADEouML), não a dose real.- Lombok reduz boilerplate de getters, setters e construtores.
- Bean Validation documenta regras simples diretamente no modelo.
src/main/java/br/uninter/medalerta
├── app
│ └── App.java
├── model
│ ├── Alerta.java
│ ├── ConfirmacaoConsumo.java
│ ├── Medicamento.java
│ ├── QuantidadeTipo.java
│ ├── StatusAlerta.java
│ ├── Tratamento.java
│ ├── TratamentoMedicamento.java
│ └── Usuario.java
├── repository
│ ├── AlertaRepository.java
│ ├── MedicamentoRepository.java
│ ├── TratamentoMedicamentoRepository.java
│ ├── TratamentoRepository.java
│ └── UsuarioRepository.java
├── service
│ ├── AlertaService.java
│ ├── MedicamentoService.java
│ ├── TratamentoService.java
│ └── UsuarioService.java
└── MedAlertaApplication.java
- CRUD de usuários
- CRUD de medicamentos
- CRUD de tratamentos
- Associação de medicamentos a tratamentos com dose, horário e frequência
- Criação e listagem de alertas
- Registro de consumo de medicamento
O MySQL é inicializado automaticamente pelo script:
docker/mysql/init/01-init.sql
O script cria as tabelas, constraints e dados de exemplo.
As configurações da aplicação ficam em src/main/resources/. O perfil dev é utilizado para desenvolvimento local.
Principais propriedades em application-dev.properties:
spring.datasource.url=jdbc:mysql://localhost:3306/medalerta
spring.datasource.username=SEU_USUARIO
spring.datasource.password=SUA_SENHA
spring.jpa.hibernate.ddl-auto=validate
spring.jpa.show-sql=true
⚠️ Nunca versione credenciais reais. Use variáveis de ambiente ou um gerenciador de segredos em ambientes além do desenvolvimento local.
docker compose up --buildEm seguida, acesse o container da aplicação e execute:
mvn spring-boot:run -Dspring-boot.run.profiles=devCertifique-se de ter JDK 21, Maven e uma instância MySQL em execução, então:
mvn spring-boot:run -Dspring-boot.run.profiles=devPara executar os testes automatizados:
mvn testA cobertura de testes atual é básica. Expansão da suíte de testes está listada como melhoria futura.
Ao iniciar a aplicação, o menu principal é exibido no terminal:
============================================
Bem-vindo ao MedAlerta
============================================
1 - Gerenciar Usuários
2 - Gerenciar Medicamentos
3 - Gerenciar Tratamentos
4 - Gerenciar Alertas
0 - Sair
--------------------------------------------
Escolha uma opção: _
Exemplo — fluxo de cadastro de tratamento:
[Tratamentos] > 1 - Novo Tratamento
Informe o ID do usuário: 1
Nome do tratamento: Controle de Pressão
Data de início (dd/MM/yyyy): 01/06/2025
Data de término (dd/MM/yyyy): 30/06/2025
Tratamento cadastrado com sucesso! ID: 3
Os diagramas atualizados ficam em:
docs/project/diagrams/MER.png ← Modelo Entidade-Relacionamento
docs/project/diagrams/MR.png ← Modelo Relacional
Este projeto representa uma infraestrutura de desenvolvimento educacional.
Em um ambiente de produção real, considere:
- 🔒 Armazenar credenciais em cofres seguros (ex: AWS Secrets Manager, HashiCorp Vault)
- 🗄️ Não executar o banco de dados em container local — use serviços gerenciados (RDS, Cloud SQL)
- 💾 Implementar mecanismos de backup e redundância
- 🔐 Adicionar autenticação e autorização de usuários
- 📊 Implementar monitoramento e observabilidade
- 🧪 Aumentar a cobertura de testes automatizados
| Nome | Github |
|---|---|
| Gabriel Marin | @m9rin |
| Cris Cunha | @engcriscunha |
| Gleyce Pires | @GleycePires |
| Lucas F. Santana | @lsprm |
| David M. Sousa | @davidmaia |
| Leonardo Miorando | @leonardomiorando |
| Bruna M. Linhares | @brunameili |
| Professor | Titulação |
|---|---|
| Rodrigo da Silva do Nascimento | Prof. Me. |
| Guilherme Patriota | Prof. Me. |
| Neusa Grando | Prof. PhD. |
| Jadson Almeida | Prof. Me. |
Projeto desenvolvido para fins educacionais no Bootcamp de Engenharia de Software — UNINTER.