Skip to content

renanbs/pdv

Repository files navigation

PDV

This project consists in registering all payments made by customers to an establishment. The main idea of the architecture was based on the Clean Architecture, so I chose to follow the Hexagonal Architecture.

  • It was only tested on Linux.

The "Nosso Segundo Desafio" is in this link: https://github.com/renanbs/pdv/blob/master/code-review.py

Requirements

  • Make
  • Python 3.8+
  • pyenv

Development Environment

Automation tool

This project uses Makefile as automation tool. Replace pdv label to your project name.

Set-up Virtual Environment

The following commands will install and set-up pyenv tool (https://github.com/pyenv/pyenv) used to create/manage virtual environments:

Just replace zshrc with the configuration file of your interpreter, like bashrc

$ git clone https://github.com/pyenv/pyenv.git ~/.pyenv
$ echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.zshrc
$ echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.zshrc
$ echo -e 'if command -v pyenv 1>/dev/null 2>&1; then\n eval "$(pyenv init -)"\nfi' >> ~/.zshrc
$ exec "$SHELL"
$ git clone https://github.com/pyenv/pyenv-virtualenv.git $(pyenv root)/plugins/pyenv-virtualenv
$ echo 'eval "$(pyenv virtualenv-init -)"' >> ~/.zshrc
$ exec "$SHELL"

After that, access the project directory and execute make create-venv to create and recreate the virtual environment.

The environment will be create in your home directory:

$PROJECT_NAME and $PYTHON_VERSION are variables defined in the Makefile

$HOME/.pyenv/versions/$PROJECT_NAME-$PYTHON_VERSION/bin/python

/home/renan/.pyenv/versions/pdv-3.8.5/bin/python

Run unit tests, style and convention

  • Tests will run with coverage minimum at 80%.

Running code style

➜ make code-convention

Running unit tests

➜ make test

Running code style and all tests

➜ make

How to run this project

There are some ways to run this project.

When you create virtual environment, you have those 3 options above:

➜ flask run

or

➜ python wsgi.py

or

➜ make run

Or if you want, you can build a docker and run it:

➜ make build-docker
➜ make run-docker

Both options will start the server in your localhost using port 5000.

The server is accessible at the link below, despite there is no root endpoint:

http://127.0.0.1:5000/

The endpoints available are:

Extra endpoints


Usage examples

cURL

Create a establishment

➜ curl -X POST http://127.0.0.1:5000/api/v1/estabelecimento -d '{"nome": "Meu EC", "cnpj": "970.640.320001-92", "dono": "juca owner", "telefone": "51999999999"}' -H 'Content-Type: application/json'

Create a transaction with the establishment from the command above

➜ curl -X POST http://127.0.0.1:5000/api/v1/transacao -d '{"cliente": "48779229034", "estabelecimento": "970.640.320001-92", "valor": 10, "descricao": "my lunch"}' -H 'Content-Type: application/json'

List the transactions from a establishment

➜ curl http://127.0.0.1:5000/api/v1/transacoes/estabelecimento?cnpj=97064032000192 -H 'Content-Type: application/json'

List all establishments

➜ curl http://127.0.0.1:5000/api/v1/estabelecimentos -H 'Content-Type: application/json'