An open API service indexing awesome lists of open source software.

https://github.com/didifive/peoplehub

PeopleHub: Registration of people and addresses API
https://github.com/didifive/peoplehub

api-rest flyway java mermaid-diagrams openapi3 railway-app spring-boot spring-data-jpa

Last synced: 8 months ago
JSON representation

PeopleHub: Registration of people and addresses API

Awesome Lists containing this project

README

          

![Repository language count](https://img.shields.io/github/languages/count/didifive/peoplehub)
![Repository code size](https://img.shields.io/github/languages/code-size/didifive/peoplehub)
[![GitHub last commit](https://img.shields.io/github/last-commit/didifive/peoplehub?color=blue)](https://github.com/didifive/peoplehub/commits/master)

![coverage](https://img.shields.io/badge/coverage-100%25-green)
[![Made by Didi](https://img.shields.io/badge/made%20by-Didi-green)](https://www.linkedin.com/in/luis-carlos-zancanela/)

![Repository license](https://img.shields.io/github/license/didifive/peoplehub)

[![IntelliJ IDEA](https://img.shields.io/badge/IntelliJIDEA-000000.svg?logo=intellij-idea&logoColor=white)](https://www.jetbrains.com/idea/)

![technology Java](https://img.shields.io/static/v1?color=red&label=Technology&message=Java&style=for-the-badge&logo=data:image/png;base64,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)
![technology Spring](https://img.shields.io/static/v1?color=6DB33F&label=Technology&message=Spring&style=for-the-badge&logo=spring)

# API People Hub 👩👨

API RESTful construída com Java 21 e Spring Boot 3.2.4.

---

## 🎯 Objetivo
A API desenvolvida deve permitir:
- Criar, editar e consultar uma ou mais pessoas;
- Criar, editar e consultar um ou mais endereços de uma pessoa; e
- Poder indicar qual endereço será considerado o principal de uma pessoa.

Uma pessoa deve possuir os seguintes dados:
- Nome completo
- Data de nascimento
- Endereços:
- Logradouro
- CEP
- Número
- Cidade
- Estado

Outros pontos considerados:
- Atingir o máximo de cobertura do código.
- Construir API no formato REST.
- Boas práticas de programação

## 🔧 Principais tecnologias utilizadas
- **Java 21**: Versão LTS mais recente do Java para tirar vantagem das últimas inovações que essa linguagem robusta e amplamente utilizada oferece;
- **Spring Boot 3**: Versão do Spring Boot, que maximiza a produtividade do desenvolvedor por meio de sua poderosa premissa de autoconfiguração;
- **Spring Data JPA**: Ferramenta pode simplificar a camada de acesso aos dados, facilitando a integração com bancos de dados SQL;
- **FlyWay**: Ferramenta que permite versionar e migrar seu banco de dados com scripts SQL simples ou Java;

---

## 🔣 Diagrama de Classes

Diagrama de classes na sintaxe [Mermaid].

```mermaid
classDiagram
class BasicEntity {
<>
- String id
}

class Person {
- String name
- LocalDate birthDate
- List~Address~ adresses
+ Optional~Address~ getMainAddress()
}

class Address {
- String publicPlace
- Integer number
- String city
- String zipCode
- State state
- AddressType addressType
- boolean main
}

class AddressType {
<>
COMMERCIAL("Comercial")
HOME("Residencial")
MAILING("Correspondência")
}

BasicEntity <-- Person
BasicEntity <-- Address
Person "1" *-- "0..n" Address
Address --> AddressType
```

---

## 📷 Prints do Projeto

Banner do Spring personalizado
![Spring Banner](docs/banner.PNG?raw=true "Spring Banner")

**Coverage com 100%** - relatório gerado pelo plugin do Jacoco
![Jacoco Report](docs/jacoco100.PNG?raw=true "Jacoco Report")

Swagger documentando endpoints
![Swagger](docs/swagger.PNG?raw=true "Swagger")

---

## ✔️ Testes

Os testes foram feitos utilizando JUnit 5, Mockito e MockMVC com Hamcrest.

- Para executar os testes pode executar sua IDE ou
- Utilizando o terminal (PowerShell, Bash ou similiar), basta executar na pasta do projeto o comando abaixo:

```shell
./mvnw clean test
```

_Após o teste finalizado com sucesso, é possível verificar relatório de coverage em: target/site/jacoco/index.html_

## ⚙ Executando o projeto localmente

Antes de mais nada, é preciso Possuir no mínimo JDK 21 LTS instalado na máquina em que irá executar.
A execução do projeto pode ser feita utilizando recurso de sua IDE ou com comando (demonstrado no próximo item).

### ⚡ Executando com perfil DEV

```bash
./mvnw spring-boot:run -Dspring_profiles_active=dev
```

### 📚 OpenApi / Swagger

Swagger OpenAPI v3.1, link para acessar a página do Swagger executando o projeto localmente: http://localhost:8080/swagger-ui/index.html

### 👪 Populate

Para popular dados automaticamente foi criada a migration do FlyWay `V3__Populate.sql`.

---

## ☁️ Deploy na Nuvem

Esse projeto foi implantado no [Railway] que faz integração com o repositório do GitHub.
URL do Swagger na nuvem: https://peoplehub-production.up.railway.app/swagger-ui/index.html

---

📋 Qualquer dúvida, sugestão ou crítica é só entrar em contato ou abrir uma Issue (https://github.com/didifive).
💚 Feito com muita dedicação. #EnjoyThis

[Mermaid]: https://mermaid.js.org/
[Railway]: https://railway.app/