Giter VIP home page Giter VIP logo

idezdigital-challenge's Introduction

Desafio Backend

Problema

A idez é uma fintech que busca oferecer tecnologia de ponta para outras empresas do ecosistema financeiro. Um dos passos necessários para completarmos essa missão é implementar a criação de contas para utilização do nosso aplicativo em diferentes plataformas. É importante lembrar que o seu sistema será integrado aos nossos painéis internos e ao aplicativo.

Todo o processo começa com a criação de um Usuário. Um usuário pode ter mais de um tipo de conta vinculada a ele. De um Usuário (User), queremos saber seu Nome Completo, CPF, Número de Telefone, e-mail e Senha. CPFs e e-mails devem ser únicos no sistema. Sendo assim, seu sistema deve permitir apenas um cadastro com o mesmo CPF ou endereço de e-mail.

Os tipos de conta que existem na idez são Empresarial (Company) e Pessoal (Person). Todas as contas sempre estarão vinculadas a um usuário e possuem alguns dados em comum: Id da Conta, Agência, Número e Dígito. De uma conta empresarial queremos saber a Razão Social, o Nome Fantasia, o CNPJ, além do id de Usuário que será dono dessa conta. De uma conta pessoal, queremos saber apenas seu Nome e CPF, além do id de Usuário que será dono dessa conta.

Os documentos (cpf e cnpj) devem ser únicos dentro do sistema, mesmo entre contas de tipos diferentes. Devido a algumas limitações do sistema, cada Usuário pode ter apenas uma conta de cada tipo.

Seu sistema deve ser capaz de listar todos os usuários, além de conseguir trazer informações detalhadas de um usuário específico. Durante a listagem, deve ser possível filtar os resultados por Nome ou Documento. Para fins didáticos, sua busca deve considerar apenas resultados que comecem com a string especificada na busca. Como exemplo, GET /users?q=joao deve retornar apenas Usuários cujos Nomes comecem com a string joao. Não há a necessidade de lidar com acentos.

Outra funcionalidade do sistema deve ser a possiblidade de contas poderem realizar Transações (Transactions). Cada transação deverá ter um valor, positivo ou negativo, além de um dos cinco Tipos de operação que fazemos:

  • Pagamento de Conta
  • Depósito
  • Transferência
  • Recarga de Celular
  • Compra (Crédito)

O sistema precisará listar todas as informações de uma conta, incluindo as suas transações e usuários relacionados em um único endpoint: /accounts/{id}.

Sua tarefa é desenvolver uma API capaz de cumprir com todos os requisitos especificados.

Instruções

Para ajudar no desenvolvimento e evitar perda de tempo com código boilerplate, decidimos prover uma estrutura básica para o desenvolvimento da sua solução utilizando a plataforma PHP (Laravel 7.* + Postgres). A estrutura deve ser utilizada no desenvolvimento da sua solução.

Você poderá fazer um fork nesse repositório e trabalhar a partir daí.

O primeiro passo para o início do desenvolvimento é escolher qual tecnologia de banco de dados será utilizada no seu projeto. Dependendo da escolha, existem algumas alterações que devem ser feitas no seu projeto base.

  • Copie o arquivo .env.example e salve como .env.

Para verificar se a sua solução está funcionando, utilize o comando docker-compose up --build a partir do diretório raiz do projeto. A sua API estará mapeada para a porta 8000do seu host local. Uma requisição GET localhost:8000/ vai retornar a versão do Laravel em execução.

IMPORTANTE: após a execução do docker-compose up -d, na pasta do projeto, execute o comando docker-compose run web composer install e em seguida docker-compose run web php artisan key:generate. Quando o volume atual é mapeado para dentro do container, ele sobrescreve a pasta com as dependências instaladas pelo composer, por isso o comando é necessário.

Avaliação

A avaliação da sua solução será constituída de duas etapas principais: Correção objetiva e Correção qualitativa.

Caso você não se sinta à vontade com a arquitetura proposta, você pode apresentar sua solução utilizando frameworks diferentes. Porém, nesse caso, uma entrevista de Code Review será necessária para a avaliação da sua solução.

A correção objetiva será realizada através da utilização de um script de correção automatizada. A correção qualitativa levará em conta os seguintes critérios:

  • Modelagem de Dados
  • Domínio da Linguagem
  • Legibilidade do Código
  • Estrutura do Código
  • Organização do Código
  • Design Patterns
  • Manutenibilidade do Código
  • Diferenciais: Testes Unitários e Cobertura de Testes

Como submeter

Ao finalizar envie uma chamada para o nosso slack (a url está no e-mail. Se não a tiver, pergunte ao seu(sua) recrutador(a)) com seu Nome, email e link para o repositório com a solução do desafio. Caso já esteja em processo de avaliação, é interessante também informar o(a) seu(sua) recrutador(a) sobre a conclusão desta etapa.

Lembre-se de não enviar arquivos compilados e configurações de IDE ao submeter a sua solução.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.