This project simulate a virtual wallet to use Django atomic transactions.
Staff users could do almost any type of action while regular users only could do things with their own wallets.
Only superusers could change wallet balance.
- docker engine >= 19.03.
- docker-compose >= 1.27.
- Ubuntu 18.04 (Bionic).
- docker engine == 20.10.9.
- docker-compose == 1.28.4.
If you can run a Makefile
command, you can use a "fast init" with: make loaddata
.
Build docker image:
make build
Apply django migrations:
make migrate
Run django runserver command:
make dev
Run uvicorn server:
make uvicorn
Apply initial_data.json
fixture. This action will erase all previous data:
make loaddata
make tests
docker-compose -p django_atomic_transactions -f environment/docker-compose.yml build
Apply django migrations:
docker-compose -p django_atomic_transactions -f environment/docker-compose.yml run --rm --service-ports web migrate
- Runserver
Run django runserver command:
docker-compose -p django_atomic_transactions -f environment/docker-compose.yml run --rm --service-ports web dev
- Uvicorn
Run uvicorn server:
docker-compose -p django_atomic_transactions -f environment/docker-compose.yml run --rm --service-ports web uvicorn
Apply initial_data.json
fixture. This action will erase all previous data:
docker-compose -p django_atomic_transactions -f environment/docker-compose.yml run --rm --service-ports web loaddata
docker-compose -p django_atomic_transactions -f environment/docker-compose.yml run --rm --service-ports web python manage.py test --failfast api
Sometimes when try to migrate it gets an error message like that. The IP is an example:
Is the server running on host "db" (<192.168.1.25>) and accepting
TCP/IP connections on port 5432?
When web
is up and running and db
is not ready yet, we could have this type of error.
In this situation try to execute it again.
- Use possitive integer instead of float / decimal fields to save
amount
. Use type to control possitve or negative transactions. Do not forget validations! This will improve performance. - Move DRF views logic like transactions from views to model. With this change we avoid our DRF dependance and we change it to another technology in the future.
- Remove staff accounts (html select) from regular user wallet and transactions creation UI.
- Auto create a transaction error on atomic
IntegrityError
. - Add
flake8
to testing stage. - Create a view using django templates and css grid to show
GetNumClientAccounts
. - Create a business flow:
- Create business account.
- Create business wallet.
- Create business transactions.
- Allow business to manage their our client accounts.
- Enable django admin login with created users.
- Enable django password validations on user creation.
- Finish Dockerfile production stage.
- Improve
pg_ready
in containerhealthcheck
.
...
Are you here yet? OK, nice one. I should invite you to a cup of coffee. Just give me your wallet username and password to get in touch hehehe (yep, a simple joke).