API para gerenciar lugares (CRUD) que faz parte desse desafio para pessoas desenvolvedoras backend que se candidatam para a ClickBus.
O projeto foi elaborado nesse vídeo.
- SOLID
- Testes automatizados
- Consultas com filtros dinâmicos usando o Query By Example
- API reativa na web e na camada de banco
- Uso de DTOs para a API
- Injeção de Dependências
- Geração automática do Swagger com a OpenAPI 3
- Geração de slugs automática com o Slugify
- Auditoria sobre criação e atualização da entidade
- Clonar repositório git
- Construir o projeto:
./mvnw clean package
- Executar:
java -jar place-service/target/place-service-0.0.1-SNAPSHOT.jar
A API poderá ser acessada em localhost:8080. O Swagger poderá ser visualizado em localhost:8080/swagger-ui.html
- Clonar repositório git
- Construir o projeto:
./mvnw clean package
- Construir a imagem:
./mvnw spring-boot:build-image
- Executar o container:
docker run --name place-service -p 8080:8080 -d place-service:0.0.1-SNAPSHOT
A API poderá ser acessada em localhost:8080. O Swagger poderá ser visualizado em localhost:8080/swagger-ui.html
Para fazer as requisições HTTP abaixo, foi utilizada a ferramenta httpie:
- POST /places
http POST :8080/places name="Place" state="State"
HTTP/1.1 200 OK
Content-Length: 129
Content-Type: application/json
{
"createdAt": "2023-04-20T19:00:07.241632",
"name": "Place",
"slug": "place",
"state": "State",
"updatedAt": "2023-04-20T19:00:07.241632"
}
- GET /places/{id}
http :8080/places/1
HTTP/1.1 200 OK
Content-Length: 129
Content-Type: application/json
{
"createdAt": "2023-06-07T14:45:39.693689",
"name": "Place",
"slug": "place",
"state": "State",
"updatedAt": "2023-06-07T14:45:39.693689"
}
- GET /places?name=?
http :8080/places name==PLACE
HTTP/1.1 200 OK
Content-Type: application/json
transfer-encoding: chunked
[
{
"createdAt": "2023-06-07T14:45:39.693689",
"name": "Place",
"slug": "place",
"state": "State",
"updatedAt": "2023-06-07T14:45:39.693689"
}
]
- PATCH /places/{id}
http PATCH :8080/places/1 name='New Name' state='New State'
HTTP/1.1 200 OK
Content-Length: 142
Content-Type: application/json
{
"createdAt": "2023-06-07T14:45:39.693689",
"name": "New Name",
"slug": "new-name",
"state": "New State",
"updatedAt": "2023-06-07T14:53:21.671129345"
}