VollMed-API
Projeto VollMed-API
Vollmed é um projeto que simula o back-end de uma aplicação mobile de uma clínica médica.
| 🪧 Vitrine.Dev | Guilherme Henrique |
|---|---|
| ✨ Nome | VollMed-API |
| 🏷️ Tecnologias | Spring Boot, Java |
| 📥 Download | Download Jar (porta 8080) |
Detalhes do projeto
- Solicitar um token para fazer o login no sistema.
- Cadastrar, Alterar, deletar, listar e detalhar um médico.
- Cadastrar, Alterar, deletar, listar e detalhar um paciente.
- Agendar uma consulta.
- Cancelar uma consulta.
- Cancelar uma consulta.
POST /login: Essa rota recebe através do corpo da requisição um JSON com os dados deloginesenhacadastrado previamente no banco de dados, aqui utilizado o MySQL.{ "login": "[email protected]", "senha": "123456" }A resposta será um token utilizando o JWT, o qual deve ser incluído nas futuras requisições, para assim evitar o retorno do código HTTP 403.
POST /medicos: Essa rota tem a finalidade de cadastrar o médico e recebe através do corpo da requisição um JSON com os dados:nome,email,telefone,crm,*especialidadeeendereço.{ "nome": "Pedro de Lara", "email": "[email protected]", "telefone": "6532658982", "crm": "985236", "especialidade": "GINECOLOGIA", "endereco": { "logradouro": "Rua dos bobos", "bairro": "bairro dos bobos", "cep": "12345678", "cidade": "Cidade dos bobos", "uf": "MG", "numero": "0", "complemento": "" } }Os valores da especialidade são valores enumerados conforme a regra de negócio do projeto, aqui no caso são quatro possibilidades sendo elas:
ORTOPEDIA,CARDIOLOGIA,GINECOLOGIAeDERMATOLOGIA. O endereço deve ser passado como um objeto, contendo os campos delogradouro,bairro,cep,cidade,uf,numeroecomplemento.
POST /pacientes: Essa rota tem a finalidade de cadastrar o paciente e recebe através do corpo da requisição um JSON com os dados:nome,email,telefone,cpf, eendereço.{ "nome": "Priscila", "email": "[email protected]", "telefone": "195654986", "cpf": "11111111111", "endereco": { "logradouro": "Rua dos bobos", "bairro": "bairro dos bobos", "cep": "12345678", "cidade": "Cidade dos bobos", "uf": "MG", "numero": "0", "complemento": "" } }O endereço deve ser passado como um objeto, contendo os campos de
logradouro,bairro,cep,cidade,uf,numeroecomplemento.
GET /pacientes&GET /medicos: Essas rotas tem a finalidade de listar os pacientes e médicos cadastrados, respectivamente.{ "content": [ { "id": 3, "nome": "Pedro José", "email": "[email protected]", "cpf": "99999999999", "telefone": "1932649265", "endereco": { "logradouro": "Rua dos bobos", "bairro": "bairro dos bobos", "cep": "12345678", "cidade": "Cidade dos bobos", "uf": "MG", "numero": "0", "complemento": "" } }, { "id": 1, "nome": "Priscila Aniele", "email": "[email protected]", "cpf": "11111111111", "telefone": "22222222222", "endereco": { "logradouro": "Rua dos bobos", "bairro": "bairro dos bobos", "cep": "12345678", "cidade": "Cidade dos bobos", "uf": "MG", "numero": "0", "complemento": "" } } ] }A resposta é um array com a chave
contente com os valores dos médicos ou pacientes cadastrados no banco de dados.
Ao final do array content, temos outras configurações para paginação, aqui, o código foi omitido.
GET /pacientes/{id}&GET /medicos/{id}: Essas rotas tem a finalidade de detalhar o cadastro dos pacientes ou médicos respectivamente, passando o{id}do paciente ou médico na URL.{ "id": 1, "nome": "Priscila Aniele", "email": "[email protected]", "cpf": "11111111111", "telefone": "22222222222", "endereco": { "logradouro": "Rua dos bobos", "bairro": "bairro dos bobos", "cep": "12345678", "cidade": "Cidade dos bobos", "uf": "MG", "numero": "0", "complemento": "" } }A resposta é um JSON com os dados do paciente ou médico cadastrado com o
{id}informado.
PUT /pacientes&PUT /medicos: Essas rotas tem a finalidade de alterar o cadastro do paciente ou médico respectivamente, passando oidno corpo da requisição JSON com as outras chaves que desejamos alterar. Obtendo a resposta da requisição de detalhamento acima, vamos passar a seguinte alteração paraPUT /pacientes:{ "id": "1", "nome": "Maria Joaquina", "telefone": "19982210064" }A resposta será um JSON com os dados do paciente ou médico alterados com o
idinformado. No caso, a resposta seria a seguinte:{ "id": 1, "nome": "Maria Joaquina", "email": "[email protected]", "cpf": "11111111111", "telefone": "19982210064", "endereco": { "logradouro": "Rua dos bobos", "bairro": "bairro dos bobos", "cep": "12345678", "cidade": "Cidade dos bobos", "uf": "MG", "numero": "0", "complemento": "" } }Note que o id do paciente continua o mesmo, alteramos o
nomeetelefone, dessa forma a resposta foi o JSON da alteração executada com sucesso!Caso não seja passado o id do paciente ou médico, a resposta será um JSON com o
campoemensagemde erro.[ { "campo": "id", "mensagem": "não deve ser nulo" } ]
DELETE /pacientes/{id}&DELETE /medicos/{id}: Essas rota tem a finalidade de excluir o cadastro dos pacientes ou médicos respectivamente, passando o{id}do paciente ou médico na URL.A resposta das requisições são duas possíveis, para sucesso a resposta é um código HTTP 204, informando que a requisição foi bem sucedida, porém não retornou nada.
E, em caso de erro, a resposta é um código HTTP 404, informando que o paciente ou médico com o{id}não foi encontrado.
POST /consultas: Essa rota tem a finalidade de cadastrar uma consulta para um paciente. Deve ser passado no corpo da requisição um JSON com os campos doidMedico,idPaciente, e adata. Exemplo:{ "idMedico": 7, "idPaciente": 1, "data": "07/05/2023 22:50" }A data deve obrigatóriamente ser uma data futura, caso o contrario a resposta será um JSON com o
campoemensagemde erro.[ { "campo": "data", "mensagem": "deve ser uma data futura" } ]Em caso de sucesso, a resposta será um JSON com os dados da consulta cadastrada:
{ "id": 5, "idMedico": 7, "idPaciente": 1, "data": "2023-08-07T17:00:00" }Nessa resposta temos o
id,o id do médico,o id do pacientee adatada consulta cadastrada no banco de dados.
Temos aqui uma validação da regra de negócio de horário da clínica, o qual deve ser um dia da semana e estar entre as 7 e 18h.@Component public class ValidadorHorarioFuncionamentoClinica implements ValidadorAgendamentoConsulta { public void validar(DadosAgendamentoConsulta dados) { var dataConsulta = dados.data(); var domingo = dataConsulta.getDayOfWeek().equals(DayOfWeek.SUNDAY); var antesAbertura = dataConsulta.getHour() < 7; var depoisAbertura = dataConsulta.getHour() > 18; if (domingo || antesAbertura || depoisAbertura) { throw new ValidacaoException("Consulta fora do horário de atendimento da clínica."); } } }DELETE /consultas: Essa rota tem a finalidade de excluir uma consulta cadastrada. Deve ser passado no corpo da requisição um JSON com os campos doidConsultaemotivodo cancelamento, o qual também é um enum e deve serPACIENTE_DESISTIU,MEDICO_CANCELOUouOUTROS.{ "idConsulta": 5, "motivo": "OUTROS" }A resposta da requisição acima será um código HTTP 204, informando que a requisição foi bem sucedida, porém não retornou nada.
Imagens
