O objetivo deste desafio é avaliar a competência técnica dos candidatos a desenvolvedor NodeJS na Claro Brasil. Será solicitado o desenvolvimento de uma API restful para fazer o Controle de Devices cadastrados no sistema. As regras deste Controle de Devices estão detalhada neste documento.
- Plataforma suportada: NodeJS 6.10+
- Linguagem: Javascript
- Idioma de escrita do código: Inglês
A empresa possui uma solução de vídeo que os usuários utilizam através de um aplicativo nas plataformas Android e iOS. Os usuários têm à disposição um catálogo de filmes e séries que eles podem assistir em seus tablets/smartphones. Para assistir ao conteúdo do catálogo, o usuário precisa primeiro cadastrar o seu dispositivo no backend.
O desafio consiste em criar uma API restful fictícia que permita o cadastro, alteração e remoção dos dispositivos dos usuários. Não é necessário implementar o cadastro dos usuários. Os mesmos serão representados por ids.
Existem algumas restrições para o controle de devices:
- Um usuário poderá ter, no máximo, três dispositivos cadastrados.
- O usuário poderá fazer a troca de um dispositivo cadastrado no período de 30 dias. Para isso, o usuário deverá remover um dispositivo e cadastrar outro. Após efetuar a troca de um dispositivo, uma nova troca só será possível 30 dias depois.
As APIs de controle de devices deverão respeitar estas restrições e retornar os erros correspondentes, informando para o client o motivo do erro.
Veja abaixo alguns exemplos de uso:
- O usuário 123 deseja cadastrar o seu primeiro device. A API cadastra o device e retorna sucesso.
- O usuário 456 já possui três devices cadastrados, tem direito a uma troca, e deseja cadastrar o quarto device. A API não cadastra o device e retorna erro, informando que aquele usuário excedeu o limite de devices cadastrados, mas ainda pode fazer uma troca.
- O usuário 456 já possui três devices cadastrados, já efetuou uma troca nos últimos 30 dias, e deseja cadastrar o quarto device. A API não cadastra o device e retorna erro, informando que aquele usuário excedeu o limite de devices cadastrados e não pode mais fazer troca. Neste caso, a API também deverá retornar a data em que o usuário poderá fazer uma nova troca.
- O usuário 789 possui dois devices cadastrados, já efetuou uma troca nos últimos 30 dias, e deseja remover um device. A API remove o device e retorna sucesso.
- O usuário 789 agora possui apenas um device cadastrado, já efetuou uma troca nos últimos 30 dias, e deseja remover este device. A API não remove o device cadastrado e retorna erro, informando que o último device não pode ser removido, pois o usuário não será capaz de cadastrar outro, e assim não poderá usar o aplicativo. Neste caso, a API também deverá retornar a data em que o usuário poderá fazer uma nova troca.
- Adicionar um dispositivo, informando:
- ID do usuário
- ID do dispositivo
- Nome do dispositivo
- Modelo do dispositivo (Android, iOS)
- Alterar o nome de um dispositivo através do ID
- Remover um dispositivo através do ID
- Testes unitários
- Integração contínua (Travis)
Os requisitos abaixo não precisam ser implementados, mas são considerados um "plus" na sua avaliação.
- Use arquitetura em Serverless
- Use Amazon Web Services
- Ao concluir o challenge, crie uma nova branch e refatore partes do seu código. Avalie se as libs externas que você utilizou são realmente necessárias neste contexto. Sugestão: Remova algumas libs e utilize a própria linguagem JavaScript, módulos do próprio Node, ou features ES6 / ES7.
- Qualidade de escrita do código
- Organização do projeto
- Qualidade da API Restful
- Lógica da solução implementada
- Qualidade da camada de persistência
- Utilização do Git (quantidade e descrição dos commits, Git Flow)
- Crie um fork do repositório no seu GitHub
- Faça o push do código desenvolvido no seu Github
- Inclua um arquivo chamado COMMENTS.md explicando
- Explicação rápida da decisão da arquitetura utilizada e o porquê
- Lista de bibliotecas de teceiros utilizadas
- O que você melhoraria se tivesse mais tempo
- Quais requisitos obrigatórios não foram entregues e o porquê
- Informe ao recrutador quando concluir o desafio junto com o link do repositório