├── README.md └── media ├── dog.webp └── logo.jpg /README.md: -------------------------------------------------------------------------------- 1 | ![Logo OW Interactive](https://github.com/owInteractive/desafio-backend/raw/master/media/logo.jpg "OW Interactive") 2 | 3 | # Desafio Back-End - OW Interactive 21/22 4 | 5 | ## Sobre a OW Interactive 6 | Fazemos parte do universo digital, focada em criar e desenvolver experiências interativas, integrando planejamento, criatividade e tecnologia. 7 | 8 | Conheça mais sobre nós em: [OW Interactive - Quem somos](http://www.owinteractive.com/quem-somos/). 9 | 10 | ## Sobre a Vaga 11 | Esse desafio é destinado todos os níveis e não é exigido que você consiga realizar esse desafio por completo. 12 | 13 | Sua avaliação será dada pelas etapas que conseguir entregar. 14 | 15 | Para saber mais sobre as vagas acesse: [OW Interactive - Vagas](http://www.owinteractive.com/vagas/). 16 | 17 | Caso você tenha caido aqui por curiosidade sinta-se a vontade para enviar o desafio e aplicar para alguma vaga de backend. 18 | 19 | ## Pré-requisitos 20 | - Lógica de programação; 21 | - Conhecimentos sobre Banco de dados; 22 | - Conhecimentos sobre REST, HTTP e API's; 23 | - Conhecimentos sobre Git; 24 | 25 | ## Requisitos Obrigatórios 26 | - Utilizar a linguagem [PHP](https://www.php.net/) ou [NodeJS](https://nodejs.org) 27 |
OBS: Caso seja enviado em PHP e sem docker enviar o projeto para que rode no PHP 8+ 28 | - Utilizar MySQL (ou MariaDB) como base de dados. 29 | - Código bem documentado, legível e limpo; 30 | - Fazer uma API simples e objetiva em REST, com o retorno em JSON; 31 | - Adicionar ao README instruções claras para rodar o projeto, caso não conseguirmos rodar o projeto será desconsiderado o desafio; 32 | - Deve ser usado [Postman](https://www.php.net/), [Insomnia](https://insomnia.rest/), [Swagger](https://swagger.io/) 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; 33 | - 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; 34 | 35 | ## Diferenciais 36 | - Utilizar o [Laravel (PHP)](https://laravel.com/docs/7.x), [Adonis/JS (Node)](https://adonisjs.com/docs/4.1/installation), [Nest JS (Node)](https://nestjs.com/) ou TypeScript; 37 | - Utilizar o [Docker](https://www.docker.com/get-started) para conteinerização da aplicação; 38 | - Pensar em desempenho e escalabilidade, quando for uma quantidade muito grande de dados como o sistema se comportaria; 39 | - 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); 40 | - Utilizar apenas as ferramentas do framework caso use um, evitando criar dependência de outros pacotes ou bibliotecas; 41 | 42 | ## Desafio 43 | 44 | ### Etapa 1 - Cadastrar Usuários / Endpoint Dos Usuários 45 | Nessa etapa daremos algumas premissas que devem ser seguidas. 46 | 47 | - Criar um endpoint onde é cadastrado um usuário. 48 | - Esses usuários devem ter obrigátoriamente os seguintes dados modelados, caso você ache necessário outros campos fique a vontade. 49 | - **name** | string (Nome) 50 | - **email** | string (E-mail) 51 | - **birthday** | date (Data de aniversário) 52 | - **created_at** | datetime (Criado Em) 53 | - **updated_at** | datetime (Atualizado Em) 54 | - Criar um endpoint para listagem desses usuários, ordernados por ordem de cadastro decrescente (mais novo para mais antigo); 55 | - Criar um endpoint para listar um único usuário através do seu id; 56 | - Criar um endpoint para excluir um usuário através do seu id. 57 | 58 | ### Etapa 2 - Cadastrar Movimentações / Endpoint De Movimentações 59 | Nessa etapa você precisará criar a modelagem e lógica para implementar as funcionalidades abaixo: 60 | 61 | - Criar um endpoint ou endpoint`s onde é possível associar uma operação de débito, crédito ou estorno para o usuário; 62 | - Criar um endpoint onde seja possível visualizar toda a movimentação (páginada) do usuários mais as suas informações pessoais; 63 | - Criar um endpoint onde seja possível excluir uma movimentação relacionada a um usuário; 64 | - Criar um endpoint onde é retornado um arquivo no formato (csv) com 3 tipos de filtros para as movimentações: 65 | - Últimos 30 dias; 66 | - Passando o mês e ano por exemplo: 06/20; 67 | - Todo as movimentações; 68 | 69 | ### Etapa 3 - Nova Funcionalidades 70 | Nessa etapa serão itens onde veremos como você pensou e como chegou ao resultado final. 71 | 72 | - Adicionar dentro do usuário um campo para saldo inicial, e criar um endpoint para alterar esse valor; 73 | - Criar um endpoint com a soma de todas as movimentações (débito, crédito e estorno) mais o saldo inicial do usuário; 74 | - 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; 75 | - No endpoint que cadastra usuário, adicionar a funcionalidade que apenas maiores de 18 anos podem criar uma conta; 76 | - No endpoint que exporta o arquivo CSV criar um cabeçalho com os dados do cliente e o seu saldo atual; 77 | 78 | ### Etapa 4 - Diferenciais 79 | - Criar validações com base na Request; 80 | - Utilizar cache para otimizar as consultas e buscas; 81 | - Criar Seeders ou Inicializadores de dados para o usuários e suas movimentações; 82 | - Criar os métodos baseados em algum método de autênticação. 83 | - Documentação dos endpoint`s; 84 | 85 | ## Conclusão 86 | 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](mailto: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. 87 | 88 | Caso tenha alguma sugestão sobre o teste ela é bem vinda, fique a vontade para envia-la junto ao e-mail. 89 | 90 | E fique a vontade para usar os programas e ferramentas que se sentir bem, lembrando que aqui somos team [VS Code](https://code.visualstudio.com/) rs. 91 | 92 | Obrigado por participar e boa sorte 😀 93 | 94 | ![Cachorro programando](https://github.com/owInteractive/desafio-backend/raw/master/media/dog.webp "Cachorro programando") 95 | -------------------------------------------------------------------------------- /media/dog.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/owInteractive/desafio-backend/9acd64205b4711641535157e0dacab4a71ab3ef4/media/dog.webp -------------------------------------------------------------------------------- /media/logo.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/owInteractive/desafio-backend/9acd64205b4711641535157e0dacab4a71ab3ef4/media/logo.jpg --------------------------------------------------------------------------------