From f6582bbf59ea2144557c738f773bf7e70700bc91 Mon Sep 17 00:00:00 2001 From: Brian Obot Date: Mon, 13 Jul 2026 22:11:16 +0100 Subject: [PATCH 1/2] Update template to enforce better code structure and harden security, include an upgrade guide for projects generated with older version of the templates --- .coverage | Bin 53248 -> 53248 bytes .env.example | 7 + .gitignore | 2 + README.md | 58 +- TODO.md | 0 UPGRADING.md | 568 ++++++++++++++++++ ...b6a379_add_user_model_with_basic_fields.py | 7 +- app/database.py | 12 +- app/dependencies.py | 13 +- app/limiter.py | 14 + app/logger.py | 2 +- app/mailer.py | 10 +- app/main.py | 41 +- app/middlewares.py | 22 +- app/models/_base.py | 2 +- app/models/auth.py | 6 +- app/models/tests/factories.py | 1 + app/redis_manager.py | 34 +- app/routers/auth.py | 32 +- app/routers/health.py | 31 + app/routers/tests/conftest.py | 4 +- app/routers/tests/test_auth.py | 54 +- app/schemas/auth.py | 18 +- app/services/auth.py | 243 ++++---- app/services/tests/test_auth.py | 128 ++-- app/settings.py | 20 +- app/tests/test_dependencies.py | 13 + app/tests/test_main.py | 8 + app/tests/test_middlewares.py | 71 ++- app/tests/test_redis_manager.py | 14 +- conftest.py | 18 +- mypy.ini | 5 + ruff.toml | 3 + 33 files changed, 1203 insertions(+), 258 deletions(-) create mode 100644 TODO.md create mode 100644 UPGRADING.md create mode 100644 app/limiter.py create mode 100644 app/routers/health.py create mode 100644 ruff.toml diff --git a/.coverage b/.coverage index 9d463891a133fab5724a5e02a2bb9bf23c999222..e2e624d3074cee801c04eee7b9adaff3670940e6 100644 GIT binary patch delta 1793 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