Este projeto foi desenvolvido como parte do Desafio Final do Bootcamp ElasTech (SoulCode + PagBank). O sistema tem como objetivo gerenciar consultas médicas, permitindo o cadastro de pacientes, médicos e agendamentos de forma simples e organizada.
- Objetivo
- Tecnologias Utilizadas
- Arquitetura do Projeto
- Modelagem do Banco de Dados
- Regras de Negócio
- Endpoints Principais
- Como Executar o Projeto
- Exemplo de Uso
- Equipe
O Sistema de Gestão de Agendamentos Médicos – São Carlos foi criado para facilitar o controle de consultas médicas em clínicas. Com ele, é possível:
- Cadastrar pacientes e médicos;
- Agendar, atualizar ou cancelar consultas;
- Visualizar todas as consultas em uma tabela organizada;
- Manter integridade dos dados e evitar conflitos de horário.
| Camada | Tecnologia |
|---|---|
| Back-end | Java 21 / Spring Boot |
| Banco de Dados | MySQL |
| ORM | JPA / Hibernate |
| Front-end | HTML, CSS e JavaScript |
| IDE | Eclipse e VS Code |
| Testes | Postman e Reqbin |
| Gerenciamento | Git e GitHub |
A aplicação segue o padrão de arquitetura em camadas:
Controller → Service → Repository → Model → Database
src/main/java/com/saocarlos/saocarlos
├── SaoCarlosApplication.java
├── controller
├── dto
├── model
├── repository
└── service
O banco de dados sao_carlos possui três tabelas principais:
pacientes, medicos e consultas.
| Campo | Tipo | Descrição |
|---|---|---|
| id_paciente | INT (PK) | Identificador único |
| nome_paciente | VARCHAR(100) | Nome completo |
| cpf_paciente | VARCHAR(14) | CPF único |
| Campo | Tipo | Descrição |
|---|---|---|
| id_medico | INT (PK) | Identificador único |
| nome_medico | VARCHAR(100) | Nome completo |
| especialidade | VARCHAR(50) | Especialidade médica |
| Campo | Tipo | Descrição |
|---|---|---|
| id_consulta | INT (PK) | Identificador da consulta |
| data_consulta | DATE | Data da consulta |
| hora_consulta | TIME | Horário |
| status | VARCHAR(50) | Situação da consulta |
| id_paciente | INT (FK) | Relaciona com pacientes |
| id_medico | INT (FK) | Relaciona com medicos |
Script Banco de dados
CREATE DATABASE sao_carlos;
CREATE TABLE medicos (
id_medico INT AUTO_INCREMENT PRIMARY KEY,
nome_medico VARCHAR(100) NOT NULL,
especialidade VARCHAR(50) NOT NULL
);
CREATE TABLE pacientes (
id_paciente INT AUTO_INCREMENT PRIMARY KEY,
nome_paciente VARCHAR(100) NOT NULL,
cpf_paciente VARCHAR(14) NOT NULL UNIQUE
);
CREATE TABLE consultas (
id_consulta INT AUTO_INCREMENT PRIMARY KEY,
data_consulta DATE NOT NULL,
hora_consulta TIME NOT NULL,
status VARCHAR(50) NOT NULL,
id_paciente INT NOT NULL,
id_medico INT NOT NULL,
FOREIGN KEY (id_paciente) REFERENCES pacientes(id_paciente),
FOREIGN KEY (id_medico) REFERENCES medicos(id_medico)
);
PACIENTES (1) ───< CONSULTAS >───(1) MEDICOS
| Regra | Descrição |
|---|---|
| R1 | Um paciente não pode ter duas consultas no mesmo dia e horário |
| R2 | Um médico não pode ter duas consultas no mesmo dia e horário |
| R3 | A data da consulta não pode estar no passado |
| R4 | CPF do paciente deve ser único |
| R5 | Um médico possui apenas uma especialidade |
| R6 | Fluxo do status: Agendada → Aguardando → Em atendimento → Concluída / Cancelada |
| Método | Endpoint - Pacientes | Descrição |
|---|---|---|
| GET | /pacientes |
Lista todos os pacientes |
| GET | /pacientes/{id} |
Busca paciente por ID |
| GET | /pacientes/buscarPaciente/{nome} |
Busca paciente por Nome |
| GET | /pacientes/buscarPacienteCPF/{cpf} |
Busca paciente por CPF |
| POST | /pacientes/adicionarPaciente |
Cadastra novo paciente |
| PUT | /pacientes/{id} |
Atualiza paciente |
| DELETE | /pacientes/{id} |
Remove paciente |
| Método | Endpoint - Médicos | Descrição |
|---|---|---|
| GET | /medicos/listarMedicos |
Lista todos os médicos |
| GET | /medicos/{id} |
Busca médicos por ID |
| GET | /medicos/buscarMedico/{nome} |
Busca médicos por Nome |
| GET | /medicos//buscarEspecialidade/{espec} |
Busca médicos por Nome |
| POST | /medicos/adicionarMedico |
Adiciona novo médico |
| PUT | /medicos/{id} |
Atualiza médico |
| DELETE | /medicos/{id} |
Remove médico |
| Método | Endpoint - Consultas | Descrição |
|---|---|---|
| GET | /consultas |
Lista todas as consultas |
| GET | /consultas/{id} |
Busca consultas por ID |
| GET | /consultas/paciente/{nome} |
Busca consulta por Nome do Paciente |
| GET | /consultas/medico/{nome} |
Busca consulta por Nome do Médico |
| GET | /consultas/especialidade/{especialidade} |
Busca consulta por Especialidade |
| GET | /consultas/status |
Busca consulta por Status |
| POST | /consultas |
Adiciona nova consulta |
| PUT | /consultas/{id} |
Atualiza consulta |
| PUT | /consultas/{id}/status |
Atualiza status da consulta |
- Java 21
- Maven
- MySQL
- Postman/ Reqbin
-
Clone o repositório:
git clone https://github.com/SEU_USUARIO/sao_carlos.git
-
Configure o banco de dados no arquivo
application.properties:spring.application.name=sao_carlos server.port=8080 spring.datasource.url=jdbc:mysql://localhost:3306/sao_carlos spring.datasource.username=root spring.datasource.password= spring.jpa.hibernate.ddl-auto=none spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL8Dialect logging.level.org.hibernate.SQL=DEBUG
-
Execute o projeto:
mvn spring-boot:run
-
Acesse:
http://localhost:8080
{
"nome": "Maria Souza",
"cpf": "987.654.321-00",
}{
"id": 1,
"nome": "Maria Souza",
"cpf": "987.654.321-00",
}- Anajara Lucas
- Camila Ribeiro
- Fernanda Bastos
- Juliana Chang
- Victoria Li
Projeto desenvolvido durante o Bootcamp ElasTech – SoulCode Academy, em parceria com PagBank.
- Spring Boot Documentation
- MySQL Reference Manual
- SoulCode Academy – Bootcamp ElasTech