Skip to content
 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

29 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Desafio programação

Recursos

  • Upload de arquivos formato CNAB
  • Processamento de arquivo CNAB
  • Processamento assíncrono em segundo plano
  • Cadastro no banco de dados (PostgreSQL) de informações
  • API REST
  • Endpoint de consulta a informações processadas de arquivos CNAB
  • Endpoint de consulta a transações
  • Autenticação de usuário
  • Testes automatizados
  • Lista de operações importadas
  • Atenticação Oauth
  • Melhor cobertura de testes

Tecnologias utilizadas

  • Python 3.9
  • Django 4
  • Docker
  • Git

Dependências




Iniciando e utilizando o projeto

  1. Clonando o repositório
git clone git@github.com:deividsonorio/desafio-dev.git
  1. Na pasta clonada do projeto:
docker-compose up -d
  1. Serão criados os contâiners necesários para aplicação.
  • desafio-dev_app: Contâiner do aplicativo
  • desafio-dev_db: Banco de dados PostgreSQL
  • desafio-dev_redis: Contâiner Redis para criação de filas
  • desafio-dev_celery: Contâiner Celery para tarefas e workers
  1. A aplicação estará disponível em:

Imagem da tela inicial da API


OBS: será necessário um usuário e senha para o acesso às URLs de consultas e ao formulário.

Um super usuário é criado automaticamente:

Usuário: desafio
Senha: dev@pass



API REST

Autenticação

A autenticação é feita através de um usuário com permissões.

Na criação do projeto um usuário é criado automaticamente:

Usuário: desafio
Senha: dev@pass

Página inicial

Request

GET /

curl -u 'desafio:dev@pass' -i -H 'Accept: application/json' http://localhost:8000/

Response

HTTP/1.1 200 OK
Date: Mon, 07 Mar 2022 18:48:45 GMT
Server: WSGIServer/0.2 CPython/3.9.9
Content-Type: application/json
Vary: Accept, Cookie
Allow: GET, HEAD, OPTIONS
X-Frame-Options: DENY
Content-Length: 189
X-Content-Type-Options: nosniff
Referrer-Policy: same-origin
Cross-Origin-Opener-Policy: same-origin

{"users":"http://localhost:8000/users/","cnab_list":"http://localhost:8000/cnab_list/","transaction_list":"http://localhost:8000/transaction_list/","upload":"http://localhost:8000/upload/"}

Lista de informações processadas através dos arquivos formato CNAB

Request

GET /cnab_list/

curl -u 'desafio:dev@pass' -i -H 'Accept: application/json' http://localhost:8000/cnab_list/

Response

HTTP/1.1 200 OK
Date: Mon, 07 Mar 2022 18:49:38 GMT
Server: WSGIServer/0.2 CPython/3.9.9
Content-Type: application/json
Vary: Accept, Cookie
Allow: GET, POST, HEAD, OPTIONS
X-Frame-Options: DENY
Content-Length: 3409
X-Content-Type-Options: nosniff
Referrer-Policy: same-origin
Cross-Origin-Opener-Policy: same-origin

[{"type":"http://localhost:8000/transaction_list/3/","date":"20190301","value":"0000019200","cpf":"84515254073","card":"6777****1313","hour":"172712","shop_owner":"MARCOS PEREIRA","shop_name":"MERCADO DA AVENIDA"},{"type":"http://localhost:8000/transaction_list/3/","date":"20190301","value":"0000019200","cpf":"84515254073","card":"6777****1313","hour":"172712","shop_owner":"MARCOS PEREIRA","shop_name":"MERCADO DA AVENIDA"},{"type":"http://localhost:8000/transaction_list/3/","date":"20190301","value":"0000019200","cpf":"84515254073","card":"6777****1313","hour":"172712","shop_owner":"MARCOS PEREIRA","shop_name":"MERCADO DA AVENIDA"},{"type":"http://localhost:8000/transaction_list/3/","date":"20190301","value":"0000019200","cpf":"84515254073","card":"6777****1313","hour":"172712","shop_owner":"MARCOS PEREIRA","shop_name":"MERCADO DA AVENIDA"},{"type":"http://localhost:8000/transaction_list/3/","date":"20190301","value":"0000019200","cpf":"84515254073","card":"6777****1313","hour":"172712","shop_owner":"MARCOS PEREIRA","shop_name":"MERCADO DA AVENIDA"},{"type":"http://localhost:8000/transaction_list/3/","date":"20190301","value":"0000019200","cpf":"84515254073","card":"6777****1313","hour":"172712","shop_owner":"MARCOS PEREIRA","shop_name":"MERCADO DA AVENIDA"},{"type":"http://localhost:8000/transaction_list/3/","date":"20190301","value":"0000019200","cpf":"84515254073","card":"6777****1313","hour":"172712","shop_owner":"MARCOS PEREIRA","shop_name":"MERCADO DA AVENIDA"},{"type":"http://localhost:8000/transaction_list/3/","date":"20190301","value":"0000019200","cpf":"84515254073","card":"6777****1313","hour":"172712","shop_owner":"MARCOS PEREIRA","shop_name":"MERCADO DA AVENIDA"},{"type":"http://localhost:8000/transaction_list/3/","date":"20190301","value":"0000019200","cpf":"84515254073","card":"6777****1313","hour":"172712","shop_owner":"MARCOS PEREIRA","shop_name":"MERCADO DA AVENIDA"},{"type":"http://localhost:8000/transaction_list/3/","date":"20190301","value":"0000019200","cpf":"84515254073","card":"6777****1313","hour":"172712","shop_owner":"MARCOS PEREIRA","shop_name":"MERCADO DA AVENIDA"},{"type":"http://localhost:8000/transaction_list/3/","date":"20190301","value":"0000019200","cpf":"84515254073","card":"6777****1313","hour":"172712","shop_owner":"MARCOS PEREIRA","shop_name":"MERCADO DA AVENIDA"},{"type":"http://localhost:8000/transaction_list/3/","date":"20190301","value":"0000019200","cpf":"84515254073","card":"6777****1313","hour":"172712","shop_owner":"MARCOS PEREIRA","shop_name":"MERCADO DA AVENIDA"},{"type":"http://localhost:8000/transaction_list/3/","date":"20190301","value":"0000019200","cpf":"84515254073","card":"6777****1313","hour":"172712","shop_owner":"MARCOS PEREIRA","shop_name":"MERCADO DA AVENIDA"},{"type":"http://localhost:8000/transaction_list/3/","date":"20190301","value":"0000019200","cpf":"84515254073","card":"6777****1313","hour":"172712","shop_owner":"MARCOS PEREIRA","shop_name":"MERCADO DA AVENIDA"},{"type":"http://localhost:8000/transaction_list/3/","date":"20190301","value":"0000019200","cpf":"84515254073","card":"6777****1313","hour":"172712","shop_owner":"MARCOS PEREIRA","shop_name":"MERCADO DA AVENIDA"},{"type":"http://localhost:8000/transaction_list/3/","date":"20190301","value":"0000019200","cpf":"84515254073","card":"6777****1313","hour":"172712","shop_owner":"MARCOS PEREIRA","shop_name":"MERCADO DA AVENIDA"}]

Informação específica

Request

GET /cnab_list/<ID>

curl -u 'desafio:dev@pass' -i -H 'Accept: application/json' http://localhost:8000/cnab_list/3/

Response

HTTP/1.1 200 OK
Date: Mon, 07 Mar 2022 18:53:19 GMT
Server: WSGIServer/0.2 CPython/3.9.9
Content-Type: application/json
Vary: Accept, Cookie
Allow: GET, PUT, PATCH, DELETE, HEAD, OPTIONS
X-Frame-Options: DENY
Content-Length: 212
X-Content-Type-Options: nosniff
Referrer-Policy: same-origin
Cross-Origin-Opener-Policy: same-origin

{"type":"http://localhost:8000/transaction_list/3/","date":"20190301","value":"0000019200","cpf":"84515254073","card":"6777****1313","hour":"172712","shop_owner":"MARCOS PEREIRA","shop_name":"MERCADO DA AVENIDA"}

Lista de tipos de transações

Request

GET /transaction_list/

curl -u 'desafio:dev@pass' -i -H 'Accept: application/json' http://localhost:8000/transaction_list/

Response

HTTP/1.1 200 OK
Date: Mon, 07 Mar 2022 18:55:08 GMT
Server: WSGIServer/0.2 CPython/3.9.9
Content-Type: application/json
Vary: Accept, Cookie
Allow: GET, POST, HEAD, OPTIONS
X-Frame-Options: DENY
Content-Length: 620
X-Content-Type-Options: nosniff
Referrer-Policy: same-origin
Cross-Origin-Opener-Policy: same-origin

[{"type":1,"description":"Débito","nature":"Entrada","sign":"+"},{"type":2,"description":"Boleto","nature":"Saída","sign":"-"},{"type":3,"description":"Financiamento","nature":"Saída","sign":"-"},{"type":4,"description":"Crédito","nature":"Entrada","sign":"+"},{"type":5,"description":"Recebimento Empréstimo","nature":"Entrada","sign":"+"},{"type":6,"description":"Vendas","nature":"Entrada","sign":"+"},{"type":7,"description":"Recebimento TED","nature":"Entrada","sign":"+"},{"type":8,"description":"Recebimento DOC","nature":"Entrada","sign":"+"},{"type":9,"description":"Aluguel","nature":"Saída","sign":"-"}]

Tipo específico de transação

Request

GET /transaction_list/<ID>/

curl -u 'desafio:dev@pass' -i -H 'Accept: application/json' http://localhost:8000/transaction_list/5/

Response

HTTP/1.1 200 OK
Date: Mon, 07 Mar 2022 18:56:43 GMT
Server: WSGIServer/0.2 CPython/3.9.9
Content-Type: application/json
Vary: Accept, Cookie
Allow: GET, PUT, PATCH, DELETE, HEAD, OPTIONS
X-Frame-Options: DENY
Content-Length: 80
X-Content-Type-Options: nosniff
Referrer-Policy: same-origin
Cross-Origin-Opener-Policy: same-origin

{"type":5,"description":"Recebimento Empréstimo","nature":"Entrada","sign":"+"}

Upload de arquivo

Request

POST /upload/

Response

OBS: arquiv_cnab é o nome do campo com o arquivo que a API espera receber

curl -u 'desafio:dev@pass' -i -X POST -H "Content-Type: multipart/form-data" -F "arquivo_cnab=@CNAB.txt" http://localhost:8000/upload/

HTTP/1.1 100 Continue

HTTP/1.1 200 OK
Date: Mon, 07 Mar 2022 19:02:06 GMT
Server: WSGIServer/0.2 CPython/3.9.9
Content-Type: application/json
Vary: Accept, Cookie
Allow: GET, POST, HEAD, OPTIONS
X-Frame-Options: DENY
Content-Length: 46
X-Content-Type-Options: nosniff
Referrer-Policy: same-origin
Cross-Origin-Opener-Policy: same-origin

"Arquivo enviado para processamento. CNAB.txt"



Testes automatizados

Os testes podem ser realizados através do comando:

docker exec desafio-dev_app_1 ./manage.py test cnab

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages