# Mining-Checker Modul ## Zweck Das Modul erfasst DOGE-Mining-Messpunkte, analysiert OCR-Vorschlaege aus Screenshots, speichert Messreihen projektbezogen und berechnet Performance-, Kurs- und Zielmetriken. ## Ordnerstruktur ```text modules/mining-checker/ |-- api/ |-- assets/ | |-- css/ | `-- js/ |-- config/ |-- docs/ |-- pages/ |-- partials/ |-- sql/ | `-- migrations/ |-- src/ | |-- Api/ | |-- Domain/ | |-- Infrastructure/ | `-- Support/ |-- storage/uploads/ |-- bootstrap.php `-- module.json ``` ## API-Endpunkte - `GET /api/mining-checker/v1/health` - `GET /api/mining-checker/v1/projects/{projectKey}/bootstrap` - `GET /api/mining-checker/v1/projects/{projectKey}/measurements` - `POST /api/mining-checker/v1/projects/{projectKey}/measurements` - `POST /api/mining-checker/v1/projects/{projectKey}/ocr-preview` - `GET /api/mining-checker/v1/projects/{projectKey}/settings` - `PUT /api/mining-checker/v1/projects/{projectKey}/settings` - `GET /api/mining-checker/v1/projects/{projectKey}/targets` - `POST /api/mining-checker/v1/projects/{projectKey}/targets` - `PATCH /api/mining-checker/v1/projects/{projectKey}/targets/{targetId}` - `GET /api/mining-checker/v1/projects/{projectKey}/dashboards` - `POST /api/mining-checker/v1/projects/{projectKey}/dashboards` - `GET /api/mining-checker/v1/projects/{projectKey}/dashboard-data` - `POST /api/mining-checker/v1/projects/{projectKey}/seed-import` - `GET /api/mining-checker/v1/projects/{projectKey}/schema-status` - `POST /api/mining-checker/v1/projects/{projectKey}/initialize` - `POST /api/mining-checker/v1/projects/{projectKey}/upgrade` - `GET /api/mining-checker/v1/projects/{projectKey}/connection-test` - `GET /api/mining-checker/v1/projects/{projectKey}/fx-history` - `POST /api/mining-checker/v1/projects/{projectKey}/legacy-fx-migrate` ## Integration 1. SQL aus dem passenden Dialekt-Schema ausfuehren: - MySQL/MariaDB: `sql/schema.mysql.sql` - PostgreSQL: `sql/schema.pgsql.sql` - `sql/schema.sql` bleibt der Rueckfall fuer bestehende Setups 2. Das Modul nutzt bewusst dieselbe Projekt-Datenbank wie die Anwendung und legt seine Tabellen mit dem Praefix `miningcheck_` an. 3. Modulroute ueber `/module/mining-checker` aufrufen. 4. REST-API wird ueber `/api/mining-checker/...` vom Hauptprojekt geroutet. Hinweis: Wenn beim ersten API-Zugriff noch keine `miningcheck_*` Tabellen vorhanden sind, importiert das Modul automatisch das zum aktiven PDO-Treiber passende Schema. Seed-Daten werden dabei nicht automatisch eingespielt. Fuer eine manuelle Initialisierung, ein inkrementelles Upgrade oder einen Reset gibt es zusaetzlich `schema-status`, `upgrade` und `initialize`. Mit `{ "drop_existing": true }` werden vorhandene `miningcheck_*` Tabellen inklusive Daten geloescht und das Schema neu angelegt. ## OCR-Hinweis Das Modul unterstuetzt einen OCR-Provider-Stack. Standardmaessig wird zuerst `ocr.space` verwendet und danach optional auf lokales `tesseract` zurueckgefallen. Empfohlene Umgebungsvariablen: - `MINING_CHECKER_OCR_PROVIDERS=ocrspace,tesseract` - `MINING_CHECKER_OCR_SPACE_URL=https://api.ocr.space/parse/image` - `MINING_CHECKER_OCR_SPACE_API_KEY=...` - `MINING_CHECKER_OCR_SPACE_LANGUAGE=eng` - `MINING_CHECKER_OCR_SPACE_ENGINE=2` - `MINING_CHECKER_OCR_SPACE_SCALE=true` - `MINING_CHECKER_OCR_SPACE_DETECT_ORIENTATION=true` - `MINING_CHECKER_OCR_SPACE_IS_TABLE=false` - `MINING_CHECKER_OCR_SPACE_TIMEOUT=25` - `MINING_CHECKER_TESSERACT_BIN=/usr/bin/tesseract` - `MINING_CHECKER_TESSERACT_LANG=eng` Laut OCR.space-Doku wird `POST https://api.ocr.space/parse/image` mit `file`, Header-`apikey`, optional `language`, `scale`, `detectOrientation`, `isTable` und `OCREngine` verwendet. Der Modulparser wertet die OCR.space-Felder `ParsedResults`, `ParsedText`, `IsErroredOnProcessing`, `ErrorMessage` und `OCRExitCode` aus. Quellen: https://ocr.space/ocrapi ## Wechselkurse und Waehrungen Der Mining-Checker speichert keine eigenen FX-Snapshots mehr, sondern referenziert die `fetch_id` aus `fx-rates`. Auch der Waehrungskatalog und die bevorzugten Waehrungen kommen ausschliesslich aus `fx-rates`. Der Mining-Checker fuehrt keine eigene Waehrungstabelle und keine eigene Alias-Verwaltung mehr im Laufzeitpfad. - `MINING_CHECKER_FX_AUTO_FETCH_ON_MISS=false` Optionaler JSON-Body: - `base`: Standard `EUR` - `symbols`: wird aktuell ignoriert; der Mining-Checker speichert immer den kompletten Waehrungssatz des Fetches Beispiel: ```json { "base": "EUR" } ``` `currencyapi.net` wird ueber das Modul `fx-rates` abgefragt. Aus dem Response werden `base`, `rates` und `updated` uebernommen; `valid` muss `true` sein. Die eigentlichen Fetches und Raten liegen im Modul `fx-rates`. Pro Abruf entsteht genau ein Datensatz in `fx-rates` mit Basiswaehrung, Provider und Stichtag. Neue Mining-Messpunkte pruefen beim Speichern, ob ein neuer FX-Fetch noetig ist; falls nicht, wird die letzte passende `fetch_id` wiederverwendet. Falls noch historische Mining-Checker-Fetches in `miningcheck_fx_fetches` und `miningcheck_fx_rates` liegen, kann `POST /api/mining-checker/v1/projects/{projectKey}/legacy-fx-migrate` diese nach `fx-rates` ueberfuehren. Danach werden bestehende Messpunkte soweit moeglich auf die passende `fx_fetch_id` aktualisiert. Fuer Auswertungen, Berichte und Listen speichert der Mining-Checker pro Messpunkt die damals passende `fx_fetch_id`. Historische Umrechnungen laufen damit gegen genau den zugeordneten `fx-rates`-Snapshot.