API REST para gerenciamento de cadastro de pacientes, desenvolvida com Spring Boot e Maven seguindo princípios de Arquitetura Limpa.
- Visão Geral
- Arquitetura
- Tecnologias
- Pré-requisitos
- Instalação e Execução
- Endpoints da API
- Estrutura do Projeto
- Tratamento de Exceções
- Desenvolvimento
- Contribuindo
- Licença
Pacientes API é uma solução backend para gerenciamento de cadastro de pacientes em ambiente hospitalar ou clínico. Ela implementa operações CRUD (Create, Read, Update, Delete) seguindo princípios de Clean Architecture e Clean Code.
O projeto segue os princípios da Arquitetura Limpa (Clean Architecture), organizado nas seguintes camadas:
-
Domain (Camada de Domínio): Contém as entidades de negócio, regras de negócio (use cases) e interfaces de repositório (portas). Esta camada é independente de frameworks externos.
-
Infrastructure (Camada de Infraestrutura): Implementa as interfaces definidas na camada de domínio, como os repositórios JPA, mappers, e outras funcionalidades de infraestrutura.
-
API (Camada de Interface): Contém os controladores REST, DTOs e handlers de exceções que expõem a funcionalidade da aplicação ao mundo externo.
- Java 17
- Spring Boot 3.2.3
- Spring Data JPA
- Maven
- H2 Database
- MapStruct
- Lombok
- Hibernate Validator
- JDK 17 ou superior
- Maven 3.6 ou superior
- IDE com suporte para desenvolvimento Java (recomendado: IntelliJ IDEA, Eclipse, VSCode)
-
Clone o repositório:
git clone https://github.com/fernandoarag/patients-api.git cd patients-api -
Compile o projeto:
mvn clean install
-
Execute a aplicação:
mvn spring-boot:run
-
A API estará disponível em:
-
A documentação Swagger estará disponível em:
-
Console H2 (banco de dados):
- URL: http://localhost:8080/api/patients-system/v1/h2-console/
- JDBC jdbc:h2:/data/pacientesdb;AUTO_SERVER=TRUE;
- Usuário: sa
- Senha: password
| Método | Endpoint | Descrição |
|---|---|---|
| POST | /api/patients-system/v1/patients |
Cria um novo paciente |
| GET | /api/patients-system/v1/patients |
Lista todos os pacientes |
| GET | /api/patients-system/v1/patients/{id} |
Busca um paciente pelo ID |
| GET | /api/patients-system/v1/patients/cpf/{cpf} |
Busca um paciente pelo CPF |
| PUT | /api/patients-system/v1/patients/{id} |
Atualiza os dados de um paciente |
| DELETE | /api/patients-system/v1/patients/{id} |
Remove um paciente |
POST /api/patients-system/v1/patients
Content-Type: application/json
{
"firstName": "First Name",
"lastName": "Last Name",
"email": "email@email.com",
"cpf": "529.982.247-25",
"dateOfBirth": "1995-11-20",
"phone": "(11) 94321-8765",
"number": "1200",
"street": "Avenida teste",
"neighborhood": "teste",
"city": "teste",
"state": "TESTE",
"zipcode": "00000-000"
}GET /api/patients-system/v1/patientsGET /api/patients-system/v1/patients/6GET /api/patients-system/v1/patients/cpf/98765432100PUT /api/patients-system/v1/patients/1
Content-Type: application/json
{
"firstName": "Name Updated",
"lastName": "Last name updated",
}DELETE /api/patients-system/v1/patients/1com.hospital.pacientesapi
├── application # Camada de aplicação
│ ├── exception # Manipulador global de exceções
│ └── usecase # Casos de uso (regras de negócio)
├── domain # Camada de domínio
│ └── model # Modelo da entidade de domínio
├── infrastructure # Camada de infraestrutura
│ ├── config # Configurações da aplicação e Swagger
│ ├── converter # Conversores de dados
│ ├── entity # Entidades de domínio
│ ├── mapper # Mappers para converter entidades JPA para domínio
│ └── repository # Interfaces (portas) de repositório
├── interfaces # Camada de interface
│ ├── adapters # Rest Adapters para converter DTOs para entidades de domínio
│ ├── dtos # DTOs para entrada e saída
│ ├── gateway # Implementação do JPA gateway para abstrair camadas de persistência
│ └── rest # Controladores REST
├── util # Camada de funções úteis(Formatadores)
├── validation # Camada de validators customizados
│ ├── annotation # Anotações de validação
│ └── validator # Implementação de validadores
└── PacientesApiApplication.java # Classe principal
A API implementa um tratamento de exceções centralizado para retornar mensagens de erro consistentes:
- 400 Bad Request: Erros de validação de dados de entrada ou dados inválidos
- 404 Not Found: Quando um paciente não é encontrado
- 409 Conflict: Quando há tentativa de cadastrar um CPF já existente
- 500 Internal Server Error: Erros internos não tratados
Para contribuir com o desenvolvimento:
- Crie um branch para sua feature:
git checkout -b feature/#codIssue-nova-funcionalidade - Faça suas alterações e commit:
git commit -m 'Adiciona nova funcionalidade' - Envie para o branch:
git push origin feature/#codIssue-nova-funcionalidade - Abra um Pull Request
Este projeto está licenciado sob a MIT License.