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.
- GNU Make v4.1 (ou superior)
- Docker v18.09.6 (ou superior)
- docker-compose v1.22.0 (ou superior)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.
- Faça download (ou clone) deste repositório:
git clone https://github.com/brusalves/financial-transactions-scheduler - 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 . - Dentro do diretório clonado, inicie a aplicação:
make start
-
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.
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}}
{
// 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.
- 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)
➜ 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/"