Skip to content

didifive/peoplehub

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

21 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Repository language count Repository code size GitHub last commit

coverage Made by Didi

Repository license

IntelliJ IDEA

technology Java technology 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.

classDiagram
    class BasicEntity {
        <<Abstract>>
        - 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 {
        <<Enumeration>>
        COMMERCIAL("Comercial")
        HOME("Residencial")
        MAILING("Correspondência")
    }

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

📷 Prints do Projeto

Banner do Spring personalizado
Spring Banner

Coverage com 100% - relatório gerado pelo plugin do Jacoco
Jacoco Report

Swagger documentando endpoints
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:

    ./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

./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