No description
commit fcd005b8624023547f28b7b28e59e6099bcfc7d4
Author: jableader <jacobdunk@gmail.com>
Date: Sun Oct 19 20:24:07 2025 +1100
Openapi tightening
commit f93bd8f641d561052c7bd075bae321b4ff3b676d
Author: jableader <jacobdunk@gmail.com>
Date: Sun Oct 19 19:03:52 2025 +1100
Removed refactor strategy doc
commit 0c5a61092f522be0c47cbbe86917c8a7e4e2d339
Author: jableader <jacobdunk@gmail.com>
Date: Sun Oct 19 17:48:33 2025 +1100
mypy & ruff checks
commit 23d66d6b18984127e17c73c3063f6120385935e9
Author: jableader <jacobdunk@gmail.com>
Date: Sun Oct 19 16:49:35 2025 +1100
Final removal of db.py files
commit f454aed1ca9783cc558cc203f29a7fe31b62a975
Author: jableader <jacobdunk@gmail.com>
Date: Sun Oct 19 15:42:31 2025 +1100
Finalise restructure, remove db.py files
commit 7187f6dd89489521538791c6bdebb426514beb99
Author: jableader <jacobdunk@gmail.com>
Date: Sun Oct 19 15:34:54 2025 +1100
commit 6fea227ae20d32b8eb1e7a4885006a620fcc7bb1
Author: jableader <jacobdunk@gmail.com>
Date: Sun Oct 19 15:32:53 2025 +1100
commit 27415e7e02d89195ad514cb017a9dbbf84d7a5e4
Author: jableader <jacobdunk@gmail.com>
Date: Sun Oct 19 15:31:10 2025 +1100
commit b773428033d855f9ad82005602e049c1a2e3c585
Author: jableader <jacobdunk@gmail.com>
Date: Sun Oct 19 15:28:58 2025 +1100
commit 116592c95278d995f4c516e87f2cea43cf5b7735
Author: jableader <jacobdunk@gmail.com>
Date: Sun Oct 19 15:25:21 2025 +1100
commit 03ec565faea088971968ee2f9bb83e2de16b21f3
Author: jableader <jacobdunk@gmail.com>
Date: Sun Oct 19 15:21:29 2025 +1100
Plan
|
||
|---|---|---|
| .github/workflows | ||
| api | ||
| ingredients | ||
| meals | ||
| persons | ||
| products | ||
| recipes | ||
| scripts | ||
| shopping | ||
| tests | ||
| .editorconfig | ||
| .gitignore | ||
| common.py | ||
| db.py | ||
| main.py | ||
| openapi.json | ||
| plan.md | ||
| pyproject.toml | ||
| README.md | ||
| requirements.txt | ||
| settings.py | ||
| transform.sql | ||
| units.py | ||
Meal planner backend
Structure
main.py: FastAPI app with all HTTP endpoints.db.py: aiosqlite connection + schema bootstrap across subpackages (calls each feature'srepository.create).- Domain packages with models and persistence:
products/(models.py, repository.py, scrapers for Woolworths/Coles)ingredients/(models.py, repository.py)recipes/(models.py, repository.py, scraping.py)meals/(models.py, repository.py, service.py)persons/(models.py, repository.py)shopping/(models.py, repository.py)
tests/: unit and API tests with sample HTTP fixtures.
Getting started
Install packages
pip install -r ./requirements.txt
Run API (dev)
uvicorn main:app --reload
Run tests
pytest -q
Tooling
This repo includes baseline configs in pyproject.toml:
- black (format)
- ruff (lint)
- mypy (type check)
Optional commands (install these locally first):
ruff check .
ruff format .
mypy .
Environment variables
- DOOF_DB: Path to sqlite database (default:
./data/doof.sqlite) - DOOF_PORT: Port the server listens on when containerized; align Dockerfile
EXPOSEaccordingly.
OpenAPI schema
- Generate the schema artifact used by the frontend and CI checks:
python scripts/export_openapi.py
This writes openapi.json to the repo root. Versioned endpoints live under /api/v1, legacy under /api (deprecated with Deprecation header).
Schema lint/diff (manual)
Optionally, lint and compare schemas locally using Node tools:
npx -y @stoplight/spectral-cli lint openapi.json
npx -y openapi-diff --fail-on-changed --fail-on-incompatible path/to/baseline.json openapi.json
Keep a baseline.json on release branches to detect breaking changes.