Desafio Técnico | Samba Tech | 26/09/2019
- Java 8 SDK
- Grails 3.3.10 (Groovy 2.4.17)
- Spock Framework (Unit Test)
- CircleCI (CI/CD)
API para Receber novos Videos
Utilizar Basic Authentication
Authorization: Basic c2FtYmF0ZWNoOnNhbWJhdGVjaA==
{
“duration” : 123.4,
“timestamp” : 1569550777458
}
- 201 - Sucesso, Video adicionado a coleção
- 204 - Falha, Video com Timestamp mais antigo que 60 segundos
API para Limpar todos os Videos
Utilizar Basic Authentication
Authorization: Basic c2FtYmF0ZWNoOnNhbWJhdGVjaA==
- 204 - Sucesso, Videos apagados
API para Retornar as Estatisticas baseadas nos ultimos 60 segundos
Utilizar Basic Authentication
Authorization: Basic c2FtYmF0ZWNoOnNhbWJhdGVjaA==
JSON:
{
"sum" : 1000,
"avg" : 100,
"min" : 50,
"max" : 200,
"count" : 10
}
HTTP status code:
- 200 - Sucesso
Ao entrar um novo Video na Aplicação via POST, este Video passa por uma validaç]ap de seus campos, se foram preenchidos e se sua timestamp é anterior ao momento atual, caso ele passe na validação o fluxo segue, e este Video será adicionado em um ConcurrentSkipListMap (videoMap), onde a chave é um Long (o timestamp do Video) e o valor é o próprio Video.
Ao realizar uma chamada na Aplicação via DELETE, o ConcurrentSkipListMap (videoMap) será esvaziado, assim chamando o método clear().
Após um tempo a aplicação on-line e feito algumas chamadas para adicionar novos Videos, tendo estes Videos como válidos, o ConcurrentSkipListMap possui alguns valores.
Ao chamar a API /statistics, é realizado uma busca no “videoMap” pelos Videos inseridos nos ultimos 60 segundos, utilizando a função “tailMap”, sendo assim, retornado um SubMap, com este SubMap será utilizado apenas os seus valores (Video), que é passado para um stream e transformado em List, assim tendo uma lista de Videos dos ultimos 60 segundos. Esta lista então é passada para um stream preenchera um DoubleSummaryStatistics, já com todas as informações calculadas. O resultado então é convertido e apresentado como response do Endpoint.
Para rodar os Testes o seguinte comando pode ser utilizado em um Terminal:
$ ./gradlew test
Verifica a validação dos Videos, se os campos estão preenchidos e se seu timestamp é valido.
Verifica pelo HTTP Status Code a entrada de um Video Válido e um Inválido passado pela API /videos via POST. Também verifica pelo HTTP Status Code a API /videos via DELETE.
Verifica o cenário, aonde há a inserção de sete Videos válidos, e realiza a chamada da API /statistics via GET, verificando assim o seu HTTP Status Code e os Valores retornados no response.
Foi utilizado a Amazon Web Services para rodar a aplicação, foi utilizado o AWS Elastic Beanstalk.
Para realizar o CI/CD do fonte, foi utilizado o CircleCI. Durante o build são executados os testes unitários e o "war" produzido é feito o deploy no Beanstalk.
CNAME do meu Dominio apontando para o Beanstalk
http://sambatech.mbhosts.com/
URL do Beanstalk
http://sambatech-statistics.us-east-2.elasticbeanstalk.com/