Exercise 7 of 10 · 0 passed
The Repository Pattern
The repository pattern separates data access from business logic. Services talk to a Repo interface — not directly to SQLite, files, or any specific backend.
The payoff:
- Swap in-memory storage for a real database without touching your service
- Test your service without a database at all
- One interface, many implementations
Why care? This is how the cohort's expense classifier stays testable while supporting both in-memory (tests) and SQLite (production) backends.
Task
Expense and the ExpenseRepo Protocol are already defined. Implement InMemoryExpenseRepo with full CRUD:
add(expense)— store and return the expenseget(expense_id)— return the expense orNonelist_all()— return all stored expensesdelete(expense_id)— remove it, returnTrueif found,Falseif not
Click "Run tests". First time loads Python in your browser (~5s). After that, runs are instant on this page and ~1s on the others.
Loading tests…
Pass the tests to reveal the reference solution.
The point of the exercise is the struggle, not the answer. Once your tests are green, the reference solution unlocks here so you can compare patterns.
Loading solution…
That's the warm-up.
You ran ten exercises against a mocked SDK. The cohort builds the real thing: an AI agent shipped to production with 150+ passing tests, Telegram bot, FastAPI, Streamlit, Docker. Six weeks. Every PR reviewed.