Skip to content

Solution of a challenge from digital community BackEnd Brasil 🇧🇷

Notifications You must be signed in to change notification settings

samuelribeiroo/challenge-backend-loans

Repository files navigation

BackEndBR - Challenge Serviço de empréstimo

BackEndBR

🎯 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 (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)

  • Deve ser possível se cadastrar.
  • Deve ser possível o usuário atualizar a sua renda.
  • Deve ser possível o usuário solicitar um empréstimo.
  • Deve ser possível buscar usuário pelo ID.
  • Deve ser possível buscar todos os usuários criados na aplicação.

Regras de Negócio (RNs)

  • Conceder o empréstimo pessoal se o salário do cliente for igual ou inferior a R$ 3000.
  • 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).
  • Conceder o empréstimo consignado se o salário do cliente for igual ou superior a R$ 5000.
  • Conceder o empréstimo com garantia se o salário do cliente for igual ou inferior a R$ 3000.
  • 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)

  • A senha do usuário precisa estar criptografada
  • O mesmo CPF não pode se cadastrar duas vezes no sistema.
  • Os dados da aplicação precisam estar persistidos em um banco PostgreSQL.
  • A aplicação deve ser conteinerizada via docker e deve conter o arquivo docker-compose.yml com todas as instruções pertinentes.
  • O usuário deve ser identificado por um ID (preferencialmente UUID).

Exemplo de Funcionamento

Requisição

[POST] {{host}}/customer-loans

{
    "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
{
    "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.

  • Criação de usuário e persistencia dos dados no banco.

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

    https://github.com/samuelribeiroo/loan-service.git
    
  2. Instale as dependências

  npm install
  1. Configure as variáveis de ambiente no arquivo .env:
  • DB_USER
  • DB_PASSWORD
  • DB_HOST (caso necessário)
  • DB_DATABASE
  • Entre outros
  1. Inicie o Docker para configurar o banco de dados PostgreSQL com Docker Compose:
 docker-compose up -d
  1. Para rodar o servidor localmente, use o comando:
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.

Releases

No releases published

Packages

No packages published