📍 DEVSUPERIOR / JAVA SPRING PROFESSIONAL / CHALLENGES
📅 September 02, 2023 - 🚩 São Paulo, Brazil - 😁 Mauricio Mityo Hidani
Versões utilizadas no desafio:
Trata-se de um sistema de vendas (Sale) e vendedores (Seller). Cada venda está para um vendedor, e um vendedor pode ter várias vendas.
erDiagram
tb_sales}o--||tb_seller : ""
tb_sales {
Long id PK
Integer visited
Integer deals
Double amount
LocalDate date
}
tb_seller {
Long id PK
String name
String email
String phone
}
Você deverá implementar as seguintes consultas (ambas deverão estar corretas):
- [IN] O usuário informa, opcionalmente, data inicial, data final e um trecho do nome do vendedor.
- [OUT] O sistema informa uma listagem paginada contendo id, data, quantia vendida e nome do vendedor, das vendas que se enquadrem nos dados informados.
Informações complementares:
- Se a data final não for informada, considerar a data atual do sistema. Para instanciar a data atual, utilize o comando:
LocalDate today = LocalDate.ofInstant(
Instant.now(),
ZoneId.systemDefault()
);
- Se a data inicial não for informada, considerar a data de 1 ano antes da data final. Para instanciar uma data com um ano a menos, use a função
minusYears
:
LocalDate result = minhaData.minusYears(1L);
- Se o nome não for informado, considerar o texto vazio.
- Dica: receba todos os dados como
String
no controller, e faça os tratamentos das datas acima, instanciando os objetosLocalDate
, no service.
- [IN] O usuário informa, opcionalmente, data inicial, data final.
- [OUT] O sistema informa uma listagem contendo nome do vendedor e soma de vendas deste vendedor no período informado.
Informações complementares:
- As mesmas do caso de uso Relatório de vendas
link da collection Postman: https://www.getpostman.com/collections/dea7904f994cb87c3d12
GET /sales/summary?minDate=2022-01-01&maxDate=2022-06-30
Deverá retornar o sumário de vendas por vendedor no período informado:
[
{
"sellerName": "Anakin",
"total": 110571.0
},
{
"sellerName": "Logan",
"total": 83587.0
},
{
"sellerName": "Loki Odinson",
"total": 150597.0
},
{
"sellerName": "Padme",
"total": 135902.0
},
{
"sellerName": "Thor Odinson",
"total": 144896.0
}
]
GET /sales/summary
Deverá retornar o sumário de vendas por vendedor dos últimos 12 meses.
GET /sales/report
Deverá retornar o relatório de vendas dos últimos 12 meses.
GET /sales/report?minDate=2022-05-01&maxDate=2022-05-31&name=odinson
Deverá retornar o relatório de vendas do período/vendedor informados:
{
"content": [
{
"id": 9,
"date": "2022-05-22",
"amount": 19476.0,
"sellerName": "Loki Odinson"
},
{
"id": 10,
"date": "2022-05-18",
"amount": 20530.0,
"sellerName": "Thor Odinson"
},
{
"id": 12,
"date": "2022-05-06",
"amount": 21753.0,
"sellerName": "Loki Odinson"
}
],
...