Desafio Back-end LeanSaude

Avisos antes de começar

  • 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

Sobre o ambiente da aplicação:

  • Aplicação deve ser uma API rest utilizando o framework NestJS e algum framework ORM (TypeORM ou Prisma)

Objetivo: StartUp Fintech

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.

Requisitos

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 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;

  • Este serviço deve ser RESTFul.

Endpoint de transferência

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
}

O que será avaliado e valorizamos

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

O que NÃO será avaliado ⚠️

  • Fluxo de cadastro de usuários e lojistas

O que será um Diferencial

  • 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)

Entrega

  • Prazo de entrega até o dia 15/09