- Leia com atenção este documento todo e tente seguir ao máximo as instruções;
- Faça seus commits no seu repositório;
- Envie o link do seu repositório para o email do recrutador responsável;
- Fique à vontade para perguntar qualquer dúvida aos recrutadores;
Corpo do Email com o link do repositório do desafio
Seu Nome
Nome do recrutador
Link do repositório
Link do Linkedin
- Aplicação deve ser uma API rest utilizando o framework NestJS e algum framework ORM (TypeORM ou Prisma)
A StartUp Fintech é uma plataforma de pagamentos. Nela é possível depositar e realizar transferências de dinheiro entre usuários. Temos 2 tipos de usuários, os comuns e lojistas, ambos têm carteira com dinheiro e realizam transferências entre eles.
A seguir estão algumas regras de negócio que são importantes para o funcionamento da StartUp Fintech:
-
Para ambos tipos de usuário, precisamos do
Nome Completo
,CPF
,e-mail
eSenha
. 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;
-
Este serviço deve ser RESTFul.
Você pode implementar o que achar conveniente, porém vamos nos atentar somente ao fluxo de transferência entre dois usuários. A implementação deve seguir o contrato abaixo.
POST /transfer
Content-Type: application/json
{
"value": 100.0,
"payer": 4,
"payee": 15
}
Habilidades básicas de criação de projetos backend:
- Conhecimentos sobre REST
- Uso do Git
- Capacidade analítica
- Apresentação de código limpo e organizado
Conhecimentos intermediários de construção de projetos manuteníveis:
- Aplicação e conhecimentos de SOLID
- Identificação e aplicação de Design Patterns
- Noções de funcionamento e uso de Cache
- Conhecimentos sobre conceitos de containers (Docker)
- Documentação e descrição de funcionalidades e manuseio do projeto
- Implementação e conhecimentos sobre testes de unidade e integração
- Boas noções de bancos de dados relacionais
Aptidões para criar e manter aplicações de alta qualidade:
- Conhecimentos sobre bancos de dados não-relacionais
- Aplicação de arquiteturas (CQRS, Event-sourcing, Microsserviços, Monolito modular)
- Uso e implementação de mensageria
- Noções de escalabilidade
- Boas habilidades na aplicação do conhecimento do negócio no software
- Fluxo de cadastro de usuários e lojistas
- Uso de Docker
- Uma cobertura de testes consistente
- Uso de Design Patterns
- Documentação
- Apresentar soluções que domina
- Modelagem de Dados
- Manutenibilidade do Código
- Tratamento de erros
- Desacoplar componentes (outras camadas, service, repository)
- Prazo de entrega até o dia 15/09