intermediate
Repositories
Use repositories for aggregate persistence operations while avoiding service layers that become thin ORM wrappers.
TypeORM repositories expose CRUD and custom queries for an entity. Convenient for simple persistence, but services still need clear business boundaries—not every query belongs in a generic base repository.
const repo = manager.getRepository(Order);
await repo.find({ where: { status: 'open' }, relations: ['customer'] });
On interviews: custom repository methods, `EntityManager` in transactions, when query builder is the better tool.
Common pitfalls: global repository calls inside a transaction bypassing the transactional manager; generic wrappers adding noise without policy.
The trade-off is quick CRUD ergonomics versus transaction-correct access.
Checklist:
- Use transaction-scoped managers.
- Expose use-case queries.
- Avoid generic wrappers with no policy.
- Prefer query builder for complex SQL.