O projeto tem como objetivo permitir o upload de um arquivo CNAB, por meio de um formulário web, formatado no layout especificado. Após o upload, o arquivo é salvo temporariamente no servidor local e é parseado. Ao término do parser, os dados são persistidos em um banco de dados PostgreSQL. Na sequência o usuário é redirecionado para uma página que exibe as transações do banco de dados, agrupadas por loja, com o saldo da conta.
- Java 11
- Springboot 2.6.3
- PostgreSQL 14
- Flyway (para controlar as migrations)
Entrar na pasta do projeto e executar o docker-compose
# docker-compose up -d
A aplicação iniciará na porta 8080
.
Basta acessar a URL no navegador: localhost:8080 que será apresentado o formulário de upload.
- Utilizado o Spring Tools Suite STS 4.12
- JDK 11
Para compilar a aplicação, pode-se usar a seguinte instrução (dentro da pasta do projeto):
# mvn clean compile package
Para avaliar o código:
# mvn verify -Dsonar.login=xxx-af911ebadaead36306d150b1af6c45fd6119 sonar:sonar
Para executar a aplicação
# java -jar target/cnab-demo-0.0.1-SNAPSHOT.jar
Para criar a imagem:
# docker build --no-cache -t repositorio/cnab-demo:v1 .
Para publicar a imagem:
# docker push repositorio/cnab-demo:v1
Foi desenvolvido uma classe abstrata que faz a leitura da linha e executa o parser conforme configuração. Assim, ao desenvolver novos parsers, basta estender a classe base do interpretador (EDITextInterpreter
) e anotar os atributos (@EDITextField(start = x, end = y))
.
Assim como no exemplo:
public class TransacaoFinanceiraDTO extends EDITextInterpreter implements Serializable {
@EDITextField(start = 0, end = 1)
private String tipoTransacao;
@EDITextField(start = 1, end = 9)
private String data;
@EDITextField(start = 9, end = 19)
private String valor;
@EDITextField(start = 19, end = 30)
private String cpf;
@EDITextField(start = 30, end = 42)
private String cartao;
@EDITextField(start = 42, end = 48)
private String hora;
@EDITextField(start = 48, end = 62)
private String dono;
@EDITextField(start = 62, end = 80)
private String loja;
}