Loading repository data…
Loading repository data…
SasaGomess / repository
Minha solução do desafio de programação do Itaú Unibanco sobre receber uma transação e devolver as estátiscas dos últimos 60 segundos. Esse projeto utiliza Java e Spring Boot
Minha solução do desáfio de programação do Itaú Unibanco sobre receber uma transação e devolver estátiscas. Esse projeto utiliza Java e Spring Boot
Este é um desafio bacana tanto de desenvolvimento de software quanto de engenharia de software. Queremos testar sua capacidade de construir um software com várias partes diferentes funcionando em conjunto!
Vídeo no youtube https://youtu.be/uke3i4uOejs
Sua missão, caso você aceite, é criar uma API REST que recebe Transações e retorna Estatísticas sob essas transações. Para este desafio, a API deve ser criada utilizando-se de Java ou Kotlin e Spring Boot.
Um bom lugar para se começar é o Spring Starter.
Dica: Não existe uma forma certa ou errada de resolver o desafio! Vamos avaliar coisas como a qualidade do seu código, o quão fácil é de compreender o código, organização do projeto, quantidade e qualidade dos testes, preocupação com segurança e vários outros fatores :)
Neste desafio você deve criar uma API REST no GitHub ou GitLab. Leia com atenção todas as instruções a seguir!
Seu projeto:
/transacao não é a mesma coisa que /transacoesdataHora não é a mesma coisa que data-hora ou dtTransacaoAtenção! Por motivos de segurança, não podemos aceitar projetos enviados como arquivos. Você DEVE disponibilizar seu projeto publicamente para que possamos acessá-lo e corrigi-lo! Após receber uma resposta de nós, sinta-se livre para tornar seu projeto privado :)
A seguir serão especificados os endpoints que devem estar presentes na sua API e a funcionalidade esperada de cada um deles.
POST /transacaoEste é o endpoint que irá receber as Transações. Cada transação consiste de um valor e uma dataHora de quando ela aconteceu:
{
"valor": 123.45,
"dataHora": "2020-08-07T12:34:56.789-03:00"
}
Os campos no JSON acima significam o seguinte:
| Campo | Significado | Obrigatório? |
|---|---|---|
valor | Valor em decimal com ponto flutuante da transação | Sim |
dataHora | Data/Hora no padrão ISO 8601 em que a transação aconteceu | Sim |
Dica: O Spring Boot, por padrão, consegue compreender datas no padrão ISO 8601 sem problemas. Experimente utilizar um atributo do tipo
OffsetDateTime!
A API só aceitará transações que:
valor e dataHora preenchidos0 (zero)Como resposta, espera-se que este endpoint responda com:
201 Created sem nenhum corpo
422 Unprocessable Entity sem nenhum corpo
0)400 Bad Request sem nenhum corpo
DELETE /transacaoEste endpoint simplesmente apaga todos os dados de transações que estejam armazenados.
Como resposta, espera-se que este endpoint responda com:
200 OK sem nenhum corpo
GET /estatisticaEste endpoint deve retornar estatísticas das transações que aconteceram nos últimos 60 segundos (1 minuto). As estatísticas que devem ser calculadas são:
{
"count": 10,
"sum": 1234.56,
"avg": 123.456,
"min": 12.34,
"max": 123.56
}
Os campos no JSON acima significam o seguinte:
| Campo | Significado | Obrigatório? |
|---|---|---|
count | Quantidade de transações nos últimos 60 segundos | Sim |
sum | Soma total do valor transacionado nos últimos 60 segundos | Sim |
avg | Média do valor transacionado nos últimos 60 segundos | Sim |
min | Menor valor transacionado nos últimos 60 segundos | Sim |
max | Maior valor transacionado nos últimos 60 segundos | Sim |
Dica: Há um objeto no Java 8+ chamado
DoubleSummaryStatisticsque pode lhe ajudar ou servir de inspiração.
Como resposta, espera-se que este endpoint responda com:
200 OK com os dados das estatísticas
count, sum, avg, min e max todos preenchidos com seus respectivos valores0 (zero)Vamos propôr a seguir alguns desafios extras caso você queira testar seus conhecimentos ao máximo! Nenhum desses requisitos é obrigatório, mas são desejados e podem ser um diferencial!