This project simulates a virtual wallet with Django atomic transactions.
Staff users could do almost any type of action while regular users only could manage their own wallets.
Only superusers could change wallet balance.
- docker engine >= 19.03.
 - docker-compose >= 1.27.
 
- docker version >= 28.3.3
 
If you can run a Makefile command, you can use a "fast init" with: make loaddata.
Build docker image:
make buildApply django migrations:
make migrateRun django runserver command:
make devRun uvicorn server:
make uvicornApply initial_data.json fixture. This action will erase all previous data:
make loaddataDefault admin password for local development is admin.
make testsSometimes 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 
flake8to 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_readyin 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 silly joke).