Backend technical challenge from toro investimentos
Backend responsável por prover dados para SPA. Neste desafio, o user story escolhido foi a TORO-001.
Como não há cadastro de contas, e para auxiliar no teste, será gerado 4 contas para testes. Uma dessas contas estará bloqueada.
Conta bloqueada é uma proposta extra para aumentar a segurança, no momento de autenticação efetuda pensei em enviar uma notificação (sms, push, email) para usuário informando que foi feita login em determiado dispositivo onde ele pode não reconhecer o acesso e bloquear a conta. O bloqueio da conta em si não foi implementado é apenas uma proposta. Contas bloqueadas não podem acessar a plataforma.
Relação de contas para poder testar:
Senha para acesso todos usuários: 123456
[
{
"id" : "b296c754-6a10-41ce-a333-1d4940acc1d4",
"email" : "account1@bull.com.br",
"cpf" : "0000000001",
"blocked" : false,
"createdAt" : "2023-03-11T03:17:47.083Z",
"updatedAt" : "2023-03-11T03:17:47.083Z",
"hash" : "$2b$08$pq31Mm91E7G4\/pEaZCfymu7fSqB4hIxrx50By5ThXAMm3wG4DPLju",
"name" : "Account 1"
},
{
"id" : "f71bf306-9e32-41f7-993d-e363d2f65b15",
"email" : "account2@bull.com.br",
"cpf" : "0000000002",
"blocked" : false,
"createdAt" : "2023-03-11T03:17:47.083Z",
"updatedAt" : "2023-03-11T03:17:47.083Z",
"hash" : "$2b$08$pq31Mm91E7G4\/pEaZCfymu7fSqB4hIxrx50By5ThXAMm3wG4DPLju",
"name" : "Account 2"
},
{
"id" : "6bc53670-8747-4245-bc6f-458cf735f476",
"email" : "account3@bull.com.br",
"cpf" : "0000000003",
"blocked" : false,
"createdAt" : "2023-03-11T03:17:47.083Z",
"updatedAt" : "2023-03-11T03:17:47.083Z",
"hash" : "$2b$08$pq31Mm91E7G4\/pEaZCfymu7fSqB4hIxrx50By5ThXAMm3wG4DPLju",
"name" : "Account 3"
},
{
"id" : "68e050f8-14ad-4a5a-99eb-97c22089ce04",
"email" : "account4@bull.com.br",
"cpf" : "0000000004",
"blocked" : true,
"createdAt" : "2023-03-11T03:17:47.083Z",
"updatedAt" : "2023-03-11T03:17:47.083Z",
"hash" : "$2b$08$pq31Mm91E7G4\/pEaZCfymu7fSqB4hIxrx50By5ThXAMm3wG4DPLju",
"name" : "Account 4"
}
]
# it's necessary (required)
npm i
# linux/macOs
$ sh ./scripts/shell.sh
# or
$ sh ./scripts/dev.sh #show real-time log (nodemon)
Helper para linux/macOs (já faz tudo o que precisa)
$ sh ./scripts/shell.sh
# it's already done. You should be able to access http://localhost:3001/health-check
Outros sistemas operacionais:
Faça uma cópia .env.example
e renomeie para .env
(Se for usar node local, mude DB_HOST=bull-back-db
para DB_HOST=localhost
)
$ docker-compose up -d
$ docker exec -it bull-back-api bash
Execute os comandos:
$ docker exec -it bull-back-api bash
npm run test
# Testes com relatório de cobertura
npm run test:coverage
Documentação da API: http://localhost:3001/swagger
Essa aplicação foi projetada seguindo alguns princípios e techs, tais como:
- Clean Architeture
- SOLID
- RESTful
- Object Calisthenics
- Repositories
- Unit Tests
- Integration Tests
A idéia de seguir alguns princípios de clean Arch e poder desenvolver soluções que não fiquem tão acompladas a framework, ORM, Client HTTP, banco de dados e etc. Em caso de mudança, exigirá esforço apenas para implementar os contratos (interfaces) no domínio.