Pattern
Rules
- Routers are thin. They parse input, call a service, return the response. No business logic, no direct DB access.
- Services orchestrate. They compose repositories, call Gemini, handle side effects.
- Repositories own queries. SQLAlchemy session in, domain object out.
- EphemeralFileManager is the only abstraction allowed for short-lived S3 + tempfile handling. Don’t reinvent.
Where to look
wardrobe-backend/routers/— route definitions per modulewardrobe-backend/services/— composable business logicwardrobe-backend/repositories/— DB access onlywardrobe-backend/MODELS_DOCUMENTATION.md— SQLAlchemy model referencewardrobe-backend/API_DOCUMENTATION.md— public contract (mandatory after route changes)