General design desisions made for this project.
Don't use flask-sqlalchemy because that would require a flask context to use the models. Separating these out will allow for non-api (scripts, other tools) to use the models. Instead we will have a models.db module that will manage the sessions, and use a Flask teardown callback to cleanup the sessions manually.
- Track password history for password reuse rules.
- Remove login without losing Profile data.
- Have Profiles without Logins for initial setup before notifying users, or for people that won't ever login.
- Track Login sessions.
- Create Login Tokens for Admins without knowing password.
- Login session timeouts.
- Easier cross customer analysis.
- Less infrastructure.
- Allow Logins to access multiple tenant's models.
More flexible for differing access cases.
CloudFront includes compression, which is a preferred solution for this requirement. Other Cloud providers hopefully offer something similar.
Other options include: