Skip to content

API developed in NestJS that is part of the "loan-simulation" project (portuguese only). The application allows you to simulate loans for individuals, taking into account the user's federative unit and the specific interest rates of each region.

Notifications You must be signed in to change notification settings

luizottavioc/loan-simulation-api

Repository files navigation

Loan Simulation - API

Projeto

Este projeto consiste na API back-end desenvolvida em NestJS que faz parte do projeto "loan-simulation". Esta API serve como o motor que alimenta a aplicação Web, permitindo que pessoas físicas efetivem empréstimos com base no estado fornecido e nas taxas de juros específicas da região. A API é projetada para ser eficiente, escalável e fácil de manter, fornecendo endpoints que suportam todas as funcionalidades da aplicação de simulação de empréstimos. O repositório da interface front-end pode ser acessado através do seguinte link: loan-simulation-gui

Tecnologias

Este projeto foi construído utilizando as seguintes tecnologias:

  • NestJS;
  • TypeScript;
  • Sequelize;
  • PostgreSQL;
  • Docker.

Estrutura de Pastas

A estrutura do projeto é organizada da seguinte forma dentro da pasta /src:

  • /database: Responsável pela configuração do banco de dados utilizando Sequelize. Aqui estão centralizadas as migrações e seeds, permitindo a criação e preenchimento do banco de dados com dados iniciais.
  • /src: Contém o código-fonte dos módulos principais da API:
    • /installment: Módulo responsável por gerenciar as parcelas dos empréstimos, incluindo DTOs de validação, entidades (models), controladores (controllers), serviços (services) e o módulo em si.
    • /loan: Módulo que gerencia os empréstimos, com as mesmas estruturas organizacionais (DTO, entity, controller, service, module).
    • /uf: Módulo para gerenciamento das unidades federativas (estados), controlando suas taxas de juros e outras funcionalidades relevantes.
    • /main: Configurações principais da aplicação, como o registro do CORS e os pipes de validação para DTOs.
  • /tests: Diretório dedicado aos testes automatizados da aplicação, garantindo a confiabilidade e a estabilidade do código ao longo do tempo.

Endpoints

1. Get All UFs

Endpoint: GET /uf
Este endpoint retorna uma lista de todas as Unidades Federativas (UFs) cadastradas no sistema, incluindo informações como nome, sigla, e taxa de juros.
Exemplo de Resposta:

[
    {
        "id": 1,
        "name": "Minas Gerais",
        "acronym": "MG",
        "interestRate": 0.01,
        "createdAt": "2024-08-07T23:30:27.052Z",
        "updatedAt": "2024-08-07T23:30:27.052Z"
    },
    {
        "id": 2,
        "name": "São Paulo",
        "acronym": "SP",
        "interestRate": 0.008,
        "createdAt": "2024-08-07T23:30:27.059Z",
        "updatedAt": "2024-08-07T23:30:27.059Z"
    }
]

2. Get All Loans

Endpoint: GET /loan
Este endpoint retorna uma lista de todos os empréstimos cadastrados no sistema, incluindo detalhes como CPF do cliente, valor do empréstimo, taxa de juros mensal, e a UF associada. Além disso, inclui informações sobre as parcelas associadas ao empréstimo.
Exemplo de Resposta:

[
    {
        "id": 8,
        "clientCPF": "12312312344",
        "clientDateOfBirth": "2002-04-05T00:00:00.000Z",
        "ufId": 1,
        "amount": 6000000,
        "percentMonthInterest": 1,
        "wantToPayPerMonth": 1500000,
        "totalInterest": 154552,
        "createdAt": "2024-08-08T02:45:14.563Z",
        "updatedAt": "2024-08-08T02:45:14.563Z",
        "uf": {
            "id": 1,
            "name": "Minas Gerais",
            "acronym": "MG",
            "interestRate": 0.01,
            "createdAt": "2024-08-08T02:28:39.732Z",
            "updatedAt": "2024-08-08T02:28:39.732Z"
        },
        "installments": [
            {
                "id": 36,
                "loanId": 8,
                "balanceDue": 6000000,
                "interest": 60000,
                "value": 1500000,
                "dueDate": "2024-08-07T00:00:00.000Z",
                "createdAt": "2024-08-08T02:45:14.566Z",
                "updatedAt": "2024-08-08T02:45:14.566Z"
            },
            {
                "id": 40,
                "loanId": 8,
                "balanceDue": 153022,
                "interest": 1530,
                "value": 154552,
                "dueDate": "2024-12-07T00:00:00.000Z",
                "createdAt": "2024-08-08T02:45:14.566Z",
                "updatedAt": "2024-08-08T02:45:14.566Z"
            }
            [...]
        ]
    }
]

3. Get All Installments

Endpoint: GET /installments
Este endpoint retorna uma lista de todas as parcelas (installments) associadas a empréstimos, com informações como valor da parcela, saldo devedor, juros, e data de vencimento.
Exemplo de Resposta:

[
    {
        "id": 1,
        "loanId": 1,
        "balanceDue": 6000000,
        "interest": 60000,
        "value": 1500000,
        "dueDate": "2024-08-07T00:00:00.000Z",
        "createdAt": "2024-08-08T02:28:43.665Z",
        "updatedAt": "2024-08-08T02:28:43.665Z"
    },
    {
        "id": 2,
        "loanId": 1,
        "balanceDue": 4560000,
        "interest": 45600,
        "value": 1500000,
        "dueDate": "2024-09-07T00:00:00.000Z",
        "createdAt": "2024-08-08T02:28:43.665Z",
        "updatedAt": "2024-08-08T02:28:43.665Z"
    }
]

4. Add Loan

Endpoint: POST /loan
Este endpoint permite a criação de um novo empréstimo para um cliente, especificando detalhes como CPF, data de nascimento, valor do empréstimo, taxa de juros mensal, entre outros. Além disso, permite a inclusão de parcelas associadas ao empréstimo.
Formato do Corpo Esperado da Requisição:

{
  "clientCPF": "string",
  "clientDateOfBirth": "date",
  "ufId": "number",
  "amount": "number",
  "percentMonthInterest": "number",
  "wantToPayPerMonth": "number",
  "totalInterest": "number",
  "installments": [
    {
      "balanceDue": "number",
      "interest": "number",
      "value": "number",
      "dueDate": "date"
    }
  ]
}

Exemplo de Corpo da Requisição:

{
  "clientCPF": "12312312344",
  "clientDateOfBirth": "2002-12-05T00:00:00.000Z",
  "ufId": 1,
  "amount": 6000000,
  "percentMonthInterest": 1,
  "wantToPayPerMonth": 1500000,
  "totalInterest": 154552,
  "installments": [
    {
      "balanceDue": 6000000,
      "interest": 60000,
      "value": 1500000,
      "dueDate": "2024-08-07T00:00:00.000Z"
    }
  ]
}

Exemplo de Resposta:

{
    "id": 17,
    "clientCPF": "12312312344",
    "clientDateOfBirth": "2002-12-05T00:00:00.000Z",
    "ufId": 1,
    "amount": 6000000,
    "percentMonthInterest": 1,
    "wantToPayPerMonth": 1500000,
    "totalInterest": 154552,
    "updatedAt": "2024-08-09T01:44:31.808Z",
    "createdAt": "2024-08-09T01:44:31.808Z"
}

Deploy Local

Para rodar a API localmente, siga os passos abaixo:

Dependências

  • Node.js: v21.7.3
  • npm: v10.5.0
  • Docker: v24.0.7
  • Docker Compose: v2.21.0

Passos para Deploy Local

  1. Clone o repositório:

    git clone git@github.com:luizottavioc/loan-simulation-api.git
  2. Configure o ambiente: Copie o arquivo .env.example e renomeie-o para .env. Este arquivo conterá as variáveis de ambiente necessárias para a aplicação, como as credenciais de acesso ao banco de dados.

    cp .env.example .env
  3. Suba os containers com Docker: Utilize o Docker Compose para iniciar os serviços do banco de dados e outras dependências necessárias.

    docker compose up -d
  4. Instale as dependências: Navegue até a pasta do projeto e execute o comando abaixo para instalar todas as dependências necessárias:

    npm install
  5. Inicie o servidor de desenvolvimento: Após configurar o ambiente e iniciar o banco de dados, execute o comando abaixo para iniciar o servidor de desenvolvimento:

    npm run start:dev

    O servidor estará disponível na porta 8989 por padrão, onde a API poderá ser acessada.

About

API developed in NestJS that is part of the "loan-simulation" project (portuguese only). The application allows you to simulate loans for individuals, taking into account the user's federative unit and the specific interest rates of each region.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published