- find_images: verify exact fruit_id prefix (stem-parse before _s0.) to prevent cross-fruit image contamination (e.g. mitschurins steals mitschurins_fruchtbare images) - DATA_DIR uses os.path.abspath to handle symlinks / relative invocation - counts["images"] derived from IMAGE_DIRS constant, not hardcoded keys - counts["warnings"] incremented on missing-id/name skip (was missing) - UPSERT preserves existing comment (comment = fruits.comment, not NULL) - Print summary and rollback moved inside try/except to avoid NameError - Remove dead XML_PATH constant - Tests: add tearDown to clean up tmpdir; fix vacuous _tn exclusion test to include positive-control _s0 file; add prefix-collision regression test Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
26 lines
758 B
Markdown
26 lines
758 B
Markdown
# OSDB — Obstsortendatenbank
|
|
|
|
A full-stack fruit-variety database (Go + Vue 3).
|
|
|
|
## Features
|
|
|
|
- Users can view a "Hello, OSDB!" landing page that confirms the backend is reachable via the Vite proxy.
|
|
- Users can create, view, edit, and delete fruit varieties, including managing synonyms and uploading images.
|
|
- Administrators can bulk-import the legacy fruit database from XML using `scripts/import_fruits.py`.
|
|
|
|
## Quick Start
|
|
|
|
```bash
|
|
cp .env.example .env # set credentials
|
|
make dev-db # start Postgres (waits until healthy)
|
|
make migrate-up # apply schema migrations
|
|
make run-backend # Echo API on :3000
|
|
make run-frontend # Vite dev server on :5000
|
|
```
|
|
|
|
## Testing
|
|
|
|
```bash
|
|
make test
|
|
```
|