Files
Aegis/tasks/lessons.md

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 db fixture for repository/integration tests, client fixture 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 HTTPException from 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.