1.1 KiB
1.1 KiB
Aegis — Lessons Learned
Architecture
- Domain entities must have ZERO framework imports. If you need SQLAlchemy or FastAPI in an entity, the design is wrong.
- Services should never call
db.commit(). Use UnitOfWork at the router/use-case level. - Domain exceptions propagate up and the error_handler middleware maps them to HTTP responses automatically.
- The
from_orm()/apply_to()pattern bridges ORM models and domain entities cleanly.
Testing
- Use the
dbfixture for repository/integration tests,clientfixture for API tests. - SQLite conftest patches PostgreSQL types (UUID, JSONB) — always verify on real PG in CI.
- Pure domain tests need no fixtures at all — just construct entities directly.
Patterns to Avoid
- Never raise
HTTPExceptionfrom services — raise domain exceptions instead. - Never put business logic in routers — delegate to entities or services.
- Never create DB sessions manually (
SessionLocal()) outside of background jobs. - Never swallow exceptions with bare
except: pass— at minimum log a warning.