https://github.com/samuelribeiroo/challenge-backend-loans
Solution of a challenge from digital community BackEnd Brasil 🇧🇷
https://github.com/samuelribeiroo/challenge-backend-loans
backend-testing express jest node-api nodemon postgresql-database typescript
Last synced: 2 months ago
JSON representation
Solution of a challenge from digital community BackEnd Brasil 🇧🇷
- Host: GitHub
- URL: https://github.com/samuelribeiroo/challenge-backend-loans
- Owner: samuelribeiroo
- Created: 2024-08-14T02:29:05.000Z (almost 2 years ago)
- Default Branch: main
- Last Pushed: 2024-11-25T18:37:42.000Z (over 1 year ago)
- Last Synced: 2025-01-23T00:26:16.026Z (over 1 year ago)
- Topics: backend-testing, express, jest, node-api, nodemon, postgresql-database, typescript
- Language: TypeScript
- Homepage: https://shorturl.at/bVD6M
- Size: 36.1 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
BackEndBR - Challenge Serviço de empréstimo
## 🎯 Descrição
Este projeto é um serviço que analisa quais modalidades de empréstimo estão disponíveis para um cliente com de acordo com a análise de alguns dados como: idade, salário e localização.
## 📃 Documentação
O meu processo de entrega do challenge foi documentado no arquivo [takeaways](caderno.md) (conclusões). Ali, eu relato como foi pensar na solução, selecionar ferramentas (database, linguagem, infra) e alguns insights sobre aprendizados durante a codificação.
## ✅ Requisitos do Sistema
Os requisitos para o desenvolvimento da API foram dividos em tres categorias: Requisitos Funcionais, Regras de Negócio e Requisitos Não Funcionais. Logo abaixo é descrito o que a aplicação visa entregar em cada categoria.
## Requisitos Funcionais (RFs)
- [x] Deve ser possível se cadastrar.
- [x] Deve ser possível o usuário atualizar a sua renda.
- [x] Deve ser possível o usuário solicitar um empréstimo.
- [x] Deve ser possível buscar usuário pelo ID.
- [x] Deve ser possível buscar todos os usuários criados na aplicação.
## Regras de Negócio (RNs)
- [x] Conceder o empréstimo pessoal se o salário do cliente for igual ou inferior a R$ 3000.
- [x] Conceder o empréstimo pessoal se o salário do cliente estiver entre R$ 3000 e R$ 5000, se o cliente tiver menos de 30 anos e residir em São Paulo (SP).
- [x] Conceder o empréstimo consignado se o salário do cliente for igual ou superior a R$ 5000.
- [x] Conceder o empréstimo com garantia se o salário do cliente for igual ou inferior a R$ 3000.
- [x] Conceder o empréstimo com garantia se o salário do cliente estiver entre R$ 3000 e R$ 5000, se o cliente tiver menos de 30 anos e residir em São Paulo (SP).
## Requisitos Não Funcionais (RNFs)
- [x] A senha do usuário precisa estar criptografada
- [x] O mesmo CPF não pode se cadastrar duas vezes no sistema.
- [x] Os dados da aplicação precisam estar persistidos em um banco PostgreSQL.
- [x] A aplicação deve ser conteinerizada via docker e deve conter o arquivo `docker-compose.yml` com todas as instruções pertinentes.
- [x] O usuário deve ser identificado por um ID (preferencialmente UUID).
## Exemplo de Funcionamento
### Requisição
**[POST]** `{{host}}/customer-loans`
```json
{
"age": 26,
"cpf": "275.484.389-23",
"name": "Vuxaywua Zukiagou",
"income": 7000.00,
"location": "SP"
}
```
Seu serviço deve retornar uma resposta contendo o nome do cliente e uma lista de empréstimos aos quais ele tem acesso,
com os respectivos tipos e taxas de juros.
```
HTTP/1.1 200 Ok
```
```json
{
"customer": "Vuxaywua Zukiagou",
"loans": [
{
"type": "PERSONAL",
"interest_rate": 4
},
{
"type": "GUARANTEED",
"interest_rate": 3
},
{
"type": "CONSIGNMENT",
"interest_rate": 2
}
]
}
```
## Tecnologias e Ferramentas Utilizadas
-
Node.js: ^18.x -
TypeScript: ^5.5.4 -
Express: ^4.19.2 -
Docker: ^3.9.0 -
Zod: ^3.23.8 (validação de entrada) -
PostgreSQL: ^8.12.0 -
Jest e Supertest: Testes unitários e de integração
## 🎖 Extra mile
O que foi proposto no desafio era a validação de concessão de empréstimos baseado em condições informadas pelo usuário, porém, para treinar minhas habilidades adicioneis algumas features.
- [X] Criação de usuário e persistencia dos dados no banco.
- [X] Atualização da renda inicial informado.
## ⏳ O que mais poderia ser adicionado....
- [ ] Estratégia de caching utilizando Redis...
- [ ] Deploy da API
- [ ] Utilização de ORM's como Sequeelize ou Prisma
- [ ] Autenticação via JWT.
## Instruções para rodar localmente o projeto.
## Como Usar
1. Clone o repositório:
```bash
https://github.com/samuelribeiroo/loan-service.git
2. Instale as dependências
```bash
npm install
```
3. Configure as variáveis de ambiente no arquivo .env:
- DB_USER
- DB_PASSWORD
-
DB_HOST (caso necessário) - DB_DATABASE
- Entre outros
4. Inicie o Docker para configurar o banco de dados PostgreSQL com Docker Compose:
```bash
docker-compose up -d
```
5. Para rodar o servidor localmente, use o comando:
```bash
npm run dev
```
## Scripts
- `dev`: Roda a aplicação em modo de desenvolvimento.
- `start`: Roda a aplicação em produção, após ser compilada.
- `test`: Roda todos os teste unitários da aplicação.