Skip to content

Repository files navigation

API de agendamento de transações financeiras

Sumário


Introdução

A execução deste projeto é realizada através do Docker (engine de build dos ambientes) e do docker-compose (arquivo "docker-compose.yml" na raiz do projeto), tendo seus gatilhos disparados pelo Make (arquivo "Makefile" na raiz do projeto) para fins de agilidade na gestão da API.

O emprego destas tecnologias auxilia na prevenção de diferenças entre ambientes (dev, hlg, stg e prd). Para construção da API foi utilizada a linguagem de programação Java (v11) com o framewor Spring Boot pois contém tratativas padrões para gestão de requisições contribuem para o foco na coesão da solução, além de fornecer uma estrutura excelente para padronização da aplicação e muitas outras funcionalidades.

Na construção, foi empregado o uso do design patter MVC (com a camada de modelo suprimida, pois a persistência é feita em memória durante a execução da aplicação. Esta foi simbólicamente subistituida pela classe do tipo Repositório, simluando o uso de JPA).

Uma listagem completa das tecnologias utilizadas e suas respectivas funções pode ser encontrada aqui.


Instalação e Execução da API

Requisitos mínimos de sistema:

- GNU Make v4.1 (ou superior)
- Docker v18.09.6 (ou superior)
- docker-compose v1.22.0 (ou superior)

Instalação:

Nesta etapa será feito o download das imagens Docker do Maven (gestor de dependências/build) e do Java (openjdk-11). Este processo poderá demorar alguns minutos. Após o término do download das dependências e do build a API estará de pé conforme as configurações do arquivo ".env" (na raíz deste repositório) onde, diante da necessidade, poderão ser trocados a máscara de rede da API, seu IP e a PORTA MAPEADA do localhost.

  1. Faça download (ou clone) deste repositório:
        git clone https://github.com/brusalves/financial-transactions-scheduler
    
  2. Altere a opção de versionamento e o permissionamento do diretório clonado:
        cd financial-transactions-scheduler && \
        git config core.filemode false && \
        chmod 777 -R .
    
  3. Dentro do diretório clonado, inicie a aplicação:
        make start
    

Outros comandos úteis:

  • Reinicialização da aplicação:

        make restart
    
  • Desligamento da aplicação:

        make stop
    
  • Visualização de LOG's:

        make logs
    
  • Visualização de status da aplicação:

        make status
    
  • Executar testes unitários:

        make mvn-test
    

Observação 1: Se forem feitas alterações no arquivo ".env" a aplicaçãp deverá ser reiniciada.

Observação 2: O reinicio da aplicação implica no "reset" dos dados persistidos em memória.

Execução:

Observação: Especificação do objeto FinancialTransaction

  • Criação de um agendamento:

    curl -X POST \
        http://localhost:8080/financial-transactions/schedules \
        -H 'Content-Type: application/json' \
        -d '{
            "transactionDate": "{{transactionDate}}",
            "account": "{{account}}",
            "destination": "{{destination}}",
            "value": {{value}}
        }'
    
  • Listagem de um agendamento:

    curl -X GET http://localhost:8080/financial-transactions/schedules/{{id}}
    
  • Listagem de agendamentos:

    curl -X GET http://localhost:8080/financial-transactions/schedules
    
  • Atualização de agendamentos:

    curl -X PUT \
        http://localhost:8080/financial-transactions/schedules/{{id}} \
        -H 'Content-Type: application/json' \
        -d '{
            "transactionDate": "{{transactionDate}}",
            "account": "{{account}}",
            "destination": "{{destination}}",
            "value": {{value}}
        }'
    
  • Remoção de agendamentos:

    curl -X DELETE http://localhost:8080/financial-transactions/schedules/{{id}}
    

Especificação do objeto FinancialTransaction

{
    // Identificador (String) | Gerado pelo sistema
    "id": "d8bca22c-3595-4186-babb-458efbf2be7f",
    // Custo da operação (BigDecimal) | Formato: 0.00 | Gerado pelo sistema
    "operationCost": 6,
    // Data do agendamento (Date) | Formato: yyyy-MM-dd'T'hh:mm:ss'Z' (ISO-8601) | Gerado pelo sistema
    "scheduleDate": "2019-07-17T19:12:01.566+0000", 
    // Conta origem (String) | Informada pelo usuário
    "account": "123456789",
    // Conta destino (String) | Informada pelo usuário
    "destination": "987654321",
    // Valor transferido (BigDecimal) | Formato: 0.00 | Informada pelo usuário
    "value": 100,
    // Data da transação (Date) | Formato: yyyy-MM-dd'T'hh:mm:ss'Z' (ISO-8601) | Informada pelo usuário
    "transactionDate": "2019-07-18T12:00:00.000+0000" 
}

Observação: durante a criação/atualização de uma nova transferência, os campos "id", "operationCost" e "scheduleDate" serão ignorados se informados no corpo da requisição.


Tecnologias utilizadas

  • Java v11 (openjdk) [Docker image: openjdk:11-jdk-slim]: Linguagem usada na construção da API
  • Maven v3.6.1 [Docker image: maven:3.6.1-jdk-11-slim]: Ferramenta de gestão de dependências e build da aplicação
  • Spring Boot v2.1.6.RELEASE: Framework com diversas ferramentas utilizadas
  • JUnit (embutido no Spring): Execução e validação dos testes unitários
  • Project Lombok v1.18.8: Utilizado para reduzir a quantidade de código digitado em algumas classes (à fim de se ter um código mais limpo)
  • Maven Ant Run plugin v1.8: Utilizado para criar uma cópia do arquivo ".jar" gerado pelo Mavem (à fim de compartilhá-lo na imagem docker que irá executá-lo)

Considerações gerais

Estrutura do projeto

➜  financial-transactions-scheduler git:(master) tree
.
├── app
│   ├── modules
│   │   └── financial-transactions-scheduler
│   │       ├── build
│   │       ├── pom.xml
│   │       └── src
│   │           ├── main
│   │           │   ├── java
│   │           │   │   └── dev
│   │           │   │       └── brunoalves
│   │           │   │           └── financialtransactionsscheduler
│   │           │   │               ├── business
│   │           │   │               │   └── OperationCost.java
│   │           │   │               ├── controller
│   │           │   │               │   └── ScheduleController.java
│   │           │   │               ├── FinancialTransactionsSchedulerApplication.java
│   │           │   │               ├── model
│   │           │   │               │   └── FinancialTransaction.java
│   │           │   │               ├── repository
│   │           │   │               │   └── FinancialTransactionRepository.java
│   │           │   │               ├── service
│   │           │   │               │   └── ScheduleService.java
│   │           │   │               └── util
│   │           │   │                   ├── DateDiff.java
│   │           │   │                   └── FinancialTransactionValidator.java
│   │           │   └── resources
│   │           │       └── application.properties
│   │           └── test
│   │               └── java
│   │                   └── dev
│   │                       └── brunoalves
│   │                           └── financialtransactionsscheduler
│   │                               ├── business
│   │                               │   └── OperationCostTest.java
│   │                               ├── FinancialTransactionsSchedulerApplicationTests.java
│   │                               └── service
│   │                                   └── ScheduleServiceTest.java
│   └── resources
│       ├── maven
│       └── tomcat
├── bin
│   └── jar
├── docker-compose.yml
├── financial-transactions-scheduler.postman_collection.json
├── LICENSE
├── Makefile
└── README.md

29 directories, 17 files

Observação: para análise do código do projeto, a workspace da IDE pode ser configurada em: "./app/modules/financial-transactions-scheduler/"

About

No description, website, or topics provided.

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages