Primeiramente, obrigado pelo seu interesse em trabalhar na Framework Digital! Abaixo você encontrará todos as informações necessárias para iniciar o seu teste.
- Crie um repositório no seu GitHub.
- Faça seus commits no seu repositório.
- Fique à vontade para perguntar qualquer dúvida aos recrutadores.
- Fique tranquilo, respire, assim como você, também já passamos por essa etapa. Boa sorte! :)
-
A escolha do framework deve seguir as orientações enviadas pelo recrutador, caso não exista você pode utilizar um de sua preferência.
-
Tente evitar usar muitos métodos mágicos ou atalhos já prontos. Sabemos que essas facilidades aumentam a produtividade no dia-a-dia mas aqui queremos ver o seu código e a sua forma de resolver problemas.
-
Valorizamos uma boa estrutura criada por você.
Desenvolver uma carteira virtual contemplando 2 tipos de usuários, clientes e lojistas, ambos têm carteira com dinheiro e realizam transferências entre eles. Vamos nos atentar somente ao fluxo de transferência entre dois usuários.
Requisitos:
-
Cadastro de usuários onde ambos tipos contenham Nome Completo, CPF, e-mail e Senha. CPF/CNPJ 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.
-
Usuários podem enviar dinheiro (efetuar transferência) para lojistas e entre usuários.
-
Lojistas só recebem transferências, não enviam dinheiro para ninguém.
-
Validar se o usuário tem saldo antes da transferência.
-
Antes de finalizar a transferência, deve-se consultar um serviço autorizador externo, use este mock para simular (https://run.mocky.io/v3/1f1b822a-3d6f-4b95-9a01-b3e6191e436b).
-
A operação de transferência deve ser uma transação (ou seja, revertida em qualquer caso de inconsistência) e o dinheiro deve voltar para a carteira do usuário que envia.
-
Este serviço deve ser RESTFul.
Faça uma proposta ❤️ de payload, se preferir, temos uma exemplo aqui:
POST /transaction
{
"value" : 100.00,
"payer" : 4,
"payee" : 15
}
- Documentação
- Se for para vaga sênior, foque bastante no desenho de arquitetura
- Código limpo e organizado (nomenclatura, etc)
- Ser consistente e saber argumentar suas escolhas
- Modelagem de Dados
- Manutenibilidade do Código
- Tratamento de erros
- Cuidado com itens de segurança
- Arquitetura (estruturar o pensamento antes de escrever)
- Uso de Docker
- Swagger bem estruturado
- Testes de integração
- Testes unitários
- Uso de Design Patterns
- Documentação
- Logs de aplicação bem estruturados