Skip to content

Microservice to create, change, view and delete a particular product, in addition to viewing the list of available products. It was developed with Java, Spring Boot, Spring Data, Lombok and Mapstruct.

Notifications You must be signed in to change notification settings

Gleyser/product-ms

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

13 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Product-MS

Neste microserviço deve é possível criar, alterar, visualizar e excluir um determinado produto, além de visualizar a lista de produtos atuais dispononíveis. Também é ser possível realizar a busca de produtos filtrando por name, description e price.

Pré-requisitos

Antes de começar, é preciso ter instalado em sua máquina as seguintes ferramentas: Java 11 (Java version: 11.0.11) e Maven (Apache Maven 3.8.1). O código foi editado utilizando o IntelliJ IDEA.

🎲 Rodando o Back End (servidor)

  • Clone este repositório
  • Acesse a pasta do projeto no terminal
  • Entre na pasta target
  • Execute o arquivo jar
  • O servidor roda na http://localhost:9999/

Disponível no Heroku

https://gleyser-product-ms-api.herokuapp.com/

É possível testar no Heroku usando o Postman.

Formato das Requisições

O formato esperado de um produto é o seguinte:

  {
    "id": "string",
    "name": "string",
    "description": "string",
    "price": 59.99
  }

Durante a criação e alteração, os campos name, description e price são obrigatórios. Em relação ao campo price o valor deve ser positivo.

Endpoints

O microserviço possui os seguintes endpoints para operação do catálogo de produtos:

Verbo HTTP Resource path Descrição
POST /products Criação de um produto
PUT /products/{id} Atualização de um produto
GET /products/{id} Busca de um produto por ID
GET /products Lista de produtos
GET /products/search Lista de produtos filtrados
DELETE /products/{id} Deleção de um produto

POST /products

Esse endpoint cria um novo produto na base de dados, ao receber o JSON do produto o mesmo deverá ser validado em acordo com as regras da seção Formato, e, caso esteja válido, persistido na base de dados e retornado com o id gerado e HTTP 201.

Entrada:

  {
    "name": "nome",
    "description": "descrição",
    "price": <preco>
  }

Retorno:

  {
    "id": "id gerado",
    "name": "nome",
    "description": "descrição",
    "price": <preco>
  }

Em caso de algum erro de validação, a API deve retornar um HTTP 400 indicando uma requisição inválida. O JSON retornado nesse caso deve seguir o seguinte formato:

  {
    "status_code": integer,
    "message": "string"
  }

No campo status_code deve vir o código HTTP do erro de validação (400 Bad Request). No campo message deverá vir uma mensagem genéricaindicando o erro ocorrido.

PUT /products/{id}

Esse endpoint atualiza um produto baseado no {id} passado via path param. Antes de alterar, deve ser consultada a base de dados pelo id, se o produto NÃO for localizado então devolver um HTTP 404 ao cliente. Se localizar o produto, então os campos name, description e price devem ser atualizados conforme recebidos no body da requisição.

Entrada:

  {
    "name": "nome",
    "description": "descrição",
    "price": <preco>
  }

Retorno:

  {
    "id": "id atualizado",
    "name": "nome",
    "description": "descrição",
    "price": <preco>
  }

Importante que antes da atualização as mesmas regras de validação do POST /products devem ser executadas para garantir consistência, e, se ocorrer erro retornar no mesmo formato:

  {
    "status_code": integer,
    "message": "string"
  }

GET /products/{id}

Esse endpoint retorna o product localizado na base de dados com um HTTP 200. Em caso de não localização do produto, a API retorna um HTTP 404 indicando que o recurso não foi localizado.

Retorno:

  {
    "id": "id buscado",
    "name": "nome",
    "description": "descrição",
    "price": <preco>
  }

GET /products

Nesse endpoint a API deve retornar a lista atual de todos os produtos com HTTP 200. Se não existir produtos, retornar uma lista vazia.

Retorno com produtos:

[
  {
    "id": "id produto 1",
    "name": "nome",
    "description": "descrição",
    "price": <preco>
  },
  {
    "id": "id produto 2",
    "name": "nome",
    "description": "descrição",
    "price": <preco>
  }
]

Retorno vazio:

[]

GET /products/search

Nesse endpoint a API deve retornar a lista atual de todos os produtos filtrados de acordo com query parameters passados na URL.

Os query parameters aceitos serão: q, min_price e max_price.

Importante: nenhum deles é obrigatório na requisição

Onde:

Query param Ação de filtro
q deverá bater o valor contra os campos name e description
min_price deverá bater o valor ">=" contra o campo price
max_price deverá bater o valor "<=" contra o campo price

Exemplo: /products/search?min_price=10.5&max_price=50&q=superget

Retorno com produtos filtrados/buscados:

[
  {
    "id": "id produto 1",
    "name": "nome",
    "description": "descrição",
    "price": <preco>
  },
  {
    "id": "id produto 2",
    "name": "nome",
    "description": "descrição",
    "price": <preco>
  }
]

Retorno vazio:

[]

DELETE /products/{id}

Esse endpoint deleta um registro de produto na base de dados. Caso encontre o produto filtrando pelo id então deve deletar e retornar um HTTP 200. Se o id passado não foi localizado deve retornar um HTTP 404

About

Microservice to create, change, view and delete a particular product, in addition to viewing the list of available products. It was developed with Java, Spring Boot, Spring Data, Lombok and Mapstruct.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages