Fazemos parte do universo digital, focada em criar e desenvolver experiências interativas, integrando planejamento, criatividade e tecnologia.
Conheça mais sobre nós em: OW Interactive - Quem somos.
Esse desafio é destinado todos os níveis e não é exigido que você consiga realizar esse desafio por completo.
Sua avaliação será dada pelas etapas que conseguir entregar.
Para saber mais sobre as vagas acesse: OW Interactive - Vagas.
Caso você tenha caido aqui por curiosidade sinta-se a vontade para enviar o desafio e aplicar para alguma vaga de backend.
- Lógica de programação;
- Conhecimentos sobre Banco de dados;
- Conhecimentos sobre REST, HTTP e API's;
- Conhecimentos sobre Git;
- Utilizar a linguagem PHP ou NodeJS
OBS: Caso seja enviado em PHP e sem docker enviar o projeto para que rode no PHP 8+ - Utilizar MySQL (ou MariaDB) como base de dados.
- Código bem documentado, legível e limpo;
- Fazer uma API simples e objetiva em REST, com o retorno em JSON;
- Adicionar ao README instruções claras para rodar o projeto, caso não conseguirmos rodar o projeto será desconsiderado o desafio;
- Deve ser usado Postman, Insomnia, Swagger e etc.Para montar o exemplos da API e adicione ao repósitorio o arquivo gerado pelo programa e especificar qual o arquivo e programa devem ser usados, caso não seja enviado será desconsiderado o desafio;
- Em qualquer caso de erro ou não encontrada a API deve retorna uma resposta condizente com o problema apresentado, por exemplo um retorno 500 ou 404;
- Utilizar o Laravel (PHP), Adonis/JS (Node), Nest JS (Node) ou TypeScript;
- Utilizar o Docker para conteinerização da aplicação;
- Pensar em desempenho e escalabilidade, quando for uma quantidade muito grande de dados como o sistema se comportaria;
- Criar testes (Apenas um exemplo, algo bem simples como validação do login ou consumo de um endpoint com ou sem autenticação, no README adicionar qual o comando utilizado para rodar o teste);
- Utilizar apenas as ferramentas do framework caso use um, evitando criar dependência de outros pacotes ou bibliotecas;
Nessa etapa daremos algumas premissas que devem ser seguidas.
- Criar um endpoint onde é cadastrado um usuário.
- Esses usuários devem ter obrigátoriamente os seguintes dados modelados, caso você ache necessário outros campos fique a vontade.
- name | string (Nome)
- email | string (E-mail)
- birthday | date (Data de aniversário)
- created_at | datetime (Criado Em)
- updated_at | datetime (Atualizado Em)
- Esses usuários devem ter obrigátoriamente os seguintes dados modelados, caso você ache necessário outros campos fique a vontade.
- Criar um endpoint para listagem desses usuários, ordernados por ordem de cadastro decrescente (mais novo para mais antigo);
- Criar um endpoint para listar um único usuário através do seu id;
- Criar um endpoint para excluir um usuário através do seu id.
Nessa etapa você precisará criar a modelagem e lógica para implementar as funcionalidades abaixo:
- Criar um endpoint ou endpoint`s onde é possível associar uma operação de débito, crédito ou estorno para o usuário;
- Criar um endpoint onde seja possível visualizar toda a movimentação (páginada) do usuários mais as suas informações pessoais;
- Criar um endpoint onde seja possível excluir uma movimentação relacionada a um usuário;
- Criar um endpoint onde é retornado um arquivo no formato (csv) com 3 tipos de filtros para as movimentações:
- Últimos 30 dias;
- Passando o mês e ano por exemplo: 06/20;
- Todo as movimentações;
Nessa etapa serão itens onde veremos como você pensou e como chegou ao resultado final.
- Adicionar dentro do usuário um campo para saldo inicial, e criar um endpoint para alterar esse valor;
- Criar um endpoint com a soma de todas as movimentações (débito, crédito e estorno) mais o saldo inicial do usuário;
- No endpoint que exclui um usuário, adicionar a funcionalidade que agora não será mais possível excluir um usuário que tenha qualquer tipo de movimentação ou saldo;
- No endpoint que cadastra usuário, adicionar a funcionalidade que apenas maiores de 18 anos podem criar uma conta;
- No endpoint que exporta o arquivo CSV criar um cabeçalho com os dados do cliente e o seu saldo atual;
- Criar validações com base na Request;
- Utilizar cache para otimizar as consultas e buscas;
- Criar Seeders ou Inicializadores de dados para o usuários e suas movimentações;
- Criar os métodos baseados em algum método de autênticação.
- Documentação dos endpoint`s;
Crie um Fork e submeta uma Pull Request ao Github com o seu desafio. Após isso envie um e-mail para letsrock@owinteractive.com, com o assunto [DESAFIO BACK-END] com o link para o seu desafio, sua apresentação e currículo anexado em formato PDF.
Caso tenha alguma sugestão sobre o teste ela é bem vinda, fique a vontade para envia-la junto ao e-mail.
E fique a vontade para usar os programas e ferramentas que se sentir bem, lembrando que aqui somos team VS Code rs.
Obrigado por participar e boa sorte 😀