Build a simulation of 'Bering Bank' that allows users to perform the following operations:
- Create user account
- Register cards(plural!)
- Disable card
- Enable card
- Check account balance
- Withdraw cash
- Deposit cash
- Use ANY Relational Database you prefer.
- Install dependencies you find necessary.
- Write code under 'app' project
- Complete the tests(using pytest)
- Use Port and Adapater architecture(To qualify your seniority.)
- Apply 'State pattern' to manage card's state (reference: https://refactoring.guru/design-patterns/state/python/example)
- Proper implementation of logging
- Special case handling(Be creative!) such as event notification on withdrawal of money that's more than a certain amount of money.