- Go 95.1%
- PLpgSQL 4.3%
- Shell 0.6%
| cmd | ||
| docs | ||
| internal | ||
| schema | ||
| scripts | ||
| web | ||
| .gitignore | ||
| CHANGELOG.md | ||
| config.yaml.example | ||
| go.mod | ||
| go.sum | ||
| README.md | ||
| treedoc-birnen-anweisung.md | ||
obstdoc
Ein Verzeichnis der Obstsorten — Apfel, Birne, Quitte, Speierling und die anderen Fruchtarten aus dem L&F-Vault. Während treedoc den einzelnen Baum dokumentiert, dokumentiert obstdoc die Sorte und zeigt zu jeder Sorte die dokumentierten (treedoc) und die in OpenStreetMap kartierten Bäume dieser Sorte.
Das Go-Modul heißt forge.23.nu/md/obstdoc. Es ist wie
treework aufgebaut: eigener Postgres-Store, Bäume read-only über
die öffentliche treedoc-HTTP-API, optionales OSM-OAuth nur für Identität.
Datenfluss
L&F-Vault (Obstsorten/*.md) treedoc-API OSM / Overpass
│ obstdoc-import --vault │ --trees │ --trees
▼ ▼ ▼
┌──────────────────────────────────────────────────────────────────┐
│ PostgreSQL (DB: obstdoc, eigene DB — NICHT das replizierte │
│ treestore). sorten + fruchtarten + sorten_namen + baeume-Cache │
│ Der Sorte↔Baum-Link ist die VIEW sorten_baeume (abgeleitet). │
└───────────────────────────────┬──────────────────────────────────┘
▼
┌───────────────┐
│ obstdoc │ Anzeige-Server (read-only)
└───────────────┘
Der Kernpunkt: Namen sind uneinheitlich (Vault ist NFD, treedoc/OSM sind NFC;
Bäume tragen Klammer-Synonyme wie „Peter Broich (Kaiser Willhelm)"). Alle
Namensauflösung läuft über die SQL-Funktion obst_key() und die Tabelle
sorten_namen. Der Sorte↔Baum-Link ist bewusst nicht gespeichert, sondern
die View sorten_baeume — eine neue Alias-Zeile verknüpft alle betroffenen
Bäume auf einmal, nichts wird stale.
Komponenten
| Pfad | Zweck |
|---|---|
cmd/obstdoc |
HTTP-Anzeige-Server |
cmd/obstdoc-import |
Lokales Tool: Vault-Import + Baum-Cache-Refresh |
internal/vault |
Parser für die Obstsorten-Notizen (Frontmatter, Ernte-Codes, …) |
internal/store |
Postgres-Store + Schema (schema.sql) |
internal/treedoc |
Read-only-Client der treedoc-API |
internal/osm |
Overpass-Client (OSM-Bäume mit Cultivar-Tag) |
internal/sync |
Baum-Cache aus treedoc + OSM aktualisieren |
internal/auth |
OSM-OAuth (identisch zu treework) |
Einrichten & Starten
# 1. Datenbank einmalig anlegen (Superuser):
# CREATE DATABASE obstdoc; \c obstdoc; CREATE EXTENSION IF NOT EXISTS postgis;
cp config.yaml.example config.yaml # db_dsn + vault_obstsorten setzen
# 2. Sorten importieren + Baum-Cache füllen (lokal, liest Vault + treedoc + OSM):
go run ./cmd/obstdoc-import # == --all
# 3. Server starten:
go run ./cmd/obstdoc # http://localhost:8768
obstdoc-import ist idempotent: Notizen werden per Dateiname erfasst und bei
unverändertem Inhalt übersprungen; der Baum-Cache wird bei jedem Lauf komplett
neu aufgebaut. Nach einer Parser- oder Schema-Änderung ist ein erneuter Lauf der
vorgesehene Reparaturweg.
Konfiguration (Env-Overrides)
| Variable | Zweck |
|---|---|
OBSTDOC_DB_DSN |
Postgres-DSN der obstdoc-DB |
OBSTDOC_VAULT |
Pfad zum Obstsorten/-Ordner |
TREEDOC_BASE_URL |
treedoc-API-Basis |
OVERPASS_ENDPOINT / OVERPASS_RADIUS_KM |
OSM-Sync |
OBSTDOC_OSM_CLIENT_ID / _SECRET / OBSTDOC_SESSION_SECRET |
OSM-OAuth |