No description
| .github/workflows | ||
| api | ||
| ingredients | ||
| meals | ||
| persons | ||
| products | ||
| recipes | ||
| scripts | ||
| shopping | ||
| tests | ||
| .editorconfig | ||
| .gitignore | ||
| common.py | ||
| db.py | ||
| main.py | ||
| openapi-baseline.json | ||
| openapi.json | ||
| plan.md | ||
| pyproject.toml | ||
| README.md | ||
| refactor-project-strategy.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.- Domain packages with models and persistence:
products/(db, scrapers for Woolworths/Coles)ingredients/recipes/(db, scraping)meals/persons/shopping/
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
python -m unittest -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 .
black .
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.