Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
114 changes: 51 additions & 63 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,85 +1,73 @@
# Desafio programação - para vaga desenvolvedor
# CNAB File Upload

Por favor leiam este documento do começo ao fim, com muita atenção.
O intuito deste teste é avaliar seus conhecimentos técnicos em programação.
O teste consiste em parsear [este arquivo de texto(CNAB)](https://github.com/ByCodersTec/desafio-ruby-on-rails/blob/master/CNAB.txt) e salvar suas informações(transações financeiras) em uma base de dados a critério do candidato.
Este desafio deve ser feito por você em sua casa. Gaste o tempo que você quiser, porém normalmente você não deve precisar de mais do que algumas horas.
Este é um projeto Java Spring Boot para fazer upload e análise de arquivos CNAB (Cadastro Nacional de Atividades Bancárias). Ele inclui uma API REST para fazer upload de arquivos CNAB e exibir operações de lojas com seus saldos totais.

# Instruções de entrega do desafio
## Pré-requisitos

1. Primeiro, faça um fork deste projeto para sua conta no Github (crie uma se você não possuir).
2. Em seguida, implemente o projeto tal qual descrito abaixo, em seu clone local.
3. Por fim, envie via email o projeto ou o fork/link do projeto para seu contato Bycoders_ com cópia para rh@bycoders.com.br.
Certifique-se de ter os seguintes pré-requisitos instalados em seu sistema:

# Descrição do projeto
Java Development Kit (JDK) 17 ou superior

Você recebeu um arquivo CNAB com os dados das movimentações finanaceira de várias lojas.
Precisamos criar uma maneira para que estes dados sejam importados para um banco de dados.
Docker (opcional, se você deseja executar o PostgreSQL em um contêiner Docker)

Sua tarefa é criar uma interface web que aceite upload do [arquivo CNAB](https://github.com/ByCodersTec/desafio-ruby-on-rails/blob/master/CNAB.txt), normalize os dados e armazene-os em um banco de dados relacional e exiba essas informações em tela.
Certifique-se de ter o Git instalado em sua máquina. Você pode baixá-lo aqui.

**Sua aplicação web DEVE:**
## Clonando o repositório
1. Abra o terminal (ou prompt de comando) em sua máquina.

1. Ter uma tela (via um formulário) para fazer o upload do arquivo(pontos extras se não usar um popular CSS Framework )
2. Interpretar ("parsear") o arquivo recebido, normalizar os dados, e salvar corretamente a informação em um banco de dados relacional, **se atente as documentações** que estão logo abaixo.
3. Exibir uma lista das operações importadas por lojas, e nesta lista deve conter um totalizador do saldo em conta
4. Ser escrita na sua linguagem de programação de preferência
5. Ser simples de configurar e rodar, funcionando em ambiente compatível com Unix (Linux ou Mac OS X). Ela deve utilizar apenas linguagens e bibliotecas livres ou gratuitas.
6. Git com commits atomicos e bem descritos
7. PostgreSQL, MySQL ou SQL Server
8. Ter testes automatizados
9. Docker compose (Pontos extras se utilizar)
10. Readme file descrevendo bem o projeto e seu setup
11. Incluir informação descrevendo como consumir o endpoint da API
2. Navegue até o diretório onde você deseja clonar o projeto.

**Sua aplicação web não precisa:**
3. Execute o seguinte comando para clonar o repositório:

1. Lidar com autenticação ou autorização (pontos extras se ela fizer, mais pontos extras se a autenticação for feita via OAuth).
2. Ser escrita usando algum framework específico (mas não há nada errado em usá-los também, use o que achar melhor).
3. Documentação da api.(Será um diferencial e pontos extras se fizer)
git clone https://github.com/seu-usuario/seu-repositorio.git

# Documentação do CNAB
## Configuração do Banco de Dados

| Descrição do campo | Inicio | Fim | Tamanho | Comentário
| ------------- | ------------- | -----| ---- | ------
| Tipo | 1 | 1 | 1 | Tipo da transação
| Data | 2 | 9 | 8 | Data da ocorrência
| Valor | 10 | 19 | 10 | Valor da movimentação. *Obs.* O valor encontrado no arquivo precisa ser divido por cem(valor / 100.00) para normalizá-lo.
| CPF | 20 | 30 | 11 | CPF do beneficiário
| Cartão | 31 | 42 | 12 | Cartão utilizado na transação
| Hora | 43 | 48 | 6 | Hora da ocorrência atendendo ao fuso de UTC-3
| Dono da loja | 49 | 62 | 14 | Nome do representante da loja
| Nome loja | 63 | 81 | 19 | Nome da loja
O projeto utiliza o PostgreSQL como banco de dados. Você pode configurar o banco de dados editando o arquivo application.properties. As configurações padrão são as seguintes:

# Documentação sobre os tipos das transações
spring.datasource.url=jdbc:postgresql://localhost:5432/db_manager_file
spring.datasource.username=postgres
spring.datasource.password=admin

| Tipo | Descrição | Natureza | Sinal |
| ---- | -------- | --------- | ----- |
| 1 | Débito | Entrada | + |
| 2 | Boleto | Saída | - |
| 3 | Financiamento | Saída | - |
| 4 | Crédito | Entrada | + |
| 5 | Recebimento Empréstimo | Entrada | + |
| 6 | Vendas | Entrada | + |
| 7 | Recebimento TED | Entrada | + |
| 8 | Recebimento DOC | Entrada | + |
| 9 | Aluguel | Saída | - |
Certifique-se de que o PostgreSQL esteja em execução na porta 5432 e que o banco de dados db_manager_file tenha sido criado.

# Avaliação
## Executando o Projeto

Seu projeto será avaliado de acordo com os seguintes critérios.
1. Navegue até o diretório raiz do projeto:

1. Sua aplicação preenche os requerimentos básicos?
2. Você documentou a maneira de configurar o ambiente e rodar sua aplicação?
3. Você seguiu as instruções de envio do desafio?
4. Qualidade e cobertura dos testes unitários.
cd seu-repositorio

Adicionalmente, tentaremos verificar a sua familiarização com as bibliotecas padrões (standard libs), bem como sua experiência com programação orientada a objetos a partir da estrutura de seu projeto.
2. Inicie o projeto usando Maven:

# Referência
./mvnw spring-boot:run

Este desafio foi baseado neste outro desafio: https://github.com/lschallenges/data-engineering
Isso iniciará a aplicação Spring Boot.

3. Abra um navegador da web e acesse 'http://localhost:8080' para acessar a página inicial da aplicação.

## Fazendo Upload de um Arquivo CNAB

Você pode fazer upload de um arquivo CNAB usando a API REST fornecida. Use uma ferramenta como cURL ou Postman para fazer uma solicitação POST para http://localhost:8080/api/upload, enviando o arquivo CNAB como um parâmetro de formulário com o nome "file".

Exemplo de cURL:

curl -X POST -F "file=@/caminho/para/seu/arquivo.cnab" http://localhost:8080/api/upload

## Visualizando Operações de Loja

Você pode visualizar as operações de lojas e seus saldos totais acessando a seguinte URL em seu navegador:

http://localhost:8080/api/store-operations

Isso exibirá uma lista de operações de loja com seus respectivos saldos totais.

## Desenvolvedor

Este projeto foi desenvolvido por Gustavo Wendell.

## Licença
Este projeto está licenciado sob a Licença MIT - consulte o arquivo LICENSE para obter detalhes.

Espero que este README ajude a configurar e entender o projeto. Você pode personalizá-lo conforme necessário para incluir informações específicas do seu projeto.

---

Boa sorte!
33 changes: 33 additions & 0 deletions api-upload-file/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
HELP.md
target/
!.mvn/wrapper/maven-wrapper.jar
!**/src/main/**/target/
!**/src/test/**/target/

### STS ###
.apt_generated
.classpath
.factorypath
.project
.settings
.springBeans
.sts4-cache

### IntelliJ IDEA ###
.idea
*.iws
*.iml
*.ipr

### NetBeans ###
/nbproject/private/
/nbbuild/
/dist/
/nbdist/
/.nb-gradle/
build/
!**/src/main/**/build/
!**/src/test/**/build/

### VS Code ###
.vscode/
Binary file added api-upload-file/.mvn/wrapper/maven-wrapper.jar
Binary file not shown.
18 changes: 18 additions & 0 deletions api-upload-file/.mvn/wrapper/maven-wrapper.properties
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.6.0/apache-maven-3.6.0-bin.zip
wrapperUrl=https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.2.0/maven-wrapper-3.2.0.jar
73 changes: 73 additions & 0 deletions api-upload-file/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
# CNAB File Upload

Este é um projeto Java Spring Boot para fazer upload e análise de arquivos CNAB (Cadastro Nacional de Atividades Bancárias). Ele inclui uma API REST para fazer upload de arquivos CNAB e exibir operações de lojas com seus saldos totais.

## Pré-requisitos

Certifique-se de ter os seguintes pré-requisitos instalados em seu sistema:

Java Development Kit (JDK) 17 ou superior

Docker (opcional, se você deseja executar o PostgreSQL em um contêiner Docker)

Certifique-se de ter o Git instalado em sua máquina. Você pode baixá-lo aqui.

## Clonando o repositório
1. Abra o terminal (ou prompt de comando) em sua máquina.

2. Navegue até o diretório onde você deseja clonar o projeto.

3. Execute o seguinte comando para clonar o repositório:

git clone https://github.com/seu-usuario/seu-repositorio.git

## Configuração do Banco de Dados

O projeto utiliza o PostgreSQL como banco de dados. Você pode configurar o banco de dados editando o arquivo application.properties. As configurações padrão são as seguintes:

spring.datasource.url=jdbc:postgresql://localhost:5432/db_manager_file
spring.datasource.username=postgres
spring.datasource.password=admin

Certifique-se de que o PostgreSQL esteja em execução na porta 5432 e que o banco de dados db_manager_file tenha sido criado.

## Executando o Projeto

1. Navegue até o diretório raiz do projeto:

cd seu-repositorio

2. Inicie o projeto usando Maven:

./mvnw spring-boot:run

Isso iniciará a aplicação Spring Boot.

3. Abra um navegador da web e acesse 'http://localhost:8080' para acessar a página inicial da aplicação.

## Fazendo Upload de um Arquivo CNAB

Você pode fazer upload de um arquivo CNAB usando a API REST fornecida. Use uma ferramenta como cURL ou Postman para fazer uma solicitação POST para http://localhost:8080/api/upload, enviando o arquivo CNAB como um parâmetro de formulário com o nome "file".

Exemplo de cURL:

curl -X POST -F "file=@/caminho/para/seu/arquivo.cnab" http://localhost:8080/api/upload

## Visualizando Operações de Loja

Você pode visualizar as operações de lojas e seus saldos totais acessando a seguinte URL em seu navegador:

http://localhost:8080/api/store-operations

Isso exibirá uma lista de operações de loja com seus respectivos saldos totais.

## Desenvolvedor

Este projeto foi desenvolvido por Gustavo Wendell.

## Licença
Este projeto está licenciado sob a Licença MIT - consulte o arquivo LICENSE para obter detalhes.

Espero que este README ajude a configurar e entender o projeto. Você pode personalizá-lo conforme necessário para incluir informações específicas do seu projeto.


26 changes: 26 additions & 0 deletions api-upload-file/docker-compose.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
version: '3.8'
services:
app:
image: openjdk:17-jdk
ports:
- "8080:8080"
volumes:
- ./app:/app
working_dir: /app
command: ./mvnw spring-boot:run
depends_on:
- db
environment:
- SPRING_DATASOURCE_URL=jdbc:postgresql://db:5432/db_manager_file
- SPRING_DATASOURCE_USERNAME=postgres
- SPRING_DATASOURCE_PASSWORD=admin
db:
image: postgres:13
ports:
- "5432:5432"
volumes:
- ./data:/var/lib/postgresql/data
environment:
- POSTGRES_DB=db_file
- POSTGRES_USER=db_user
- POSTGRES_PASSWORD=db_password
Loading