Files
desktop/modules/fx-rates/module.json
Lars Gebhardt-Kusche d121f74bd0
All checks were successful
Deploy / deploy-staging (push) Successful in 25s
Deploy / deploy-production (push) Has been skipped
Main update
2026-06-24 02:24:39 +02:00

91 lines
4.5 KiB
JSON

{
"name": "fx-rates",
"title": "Waehrungs-Checker",
"version": "0.1.0",
"description": "Zentrales Modul fuer Waehrungskurse, Historie, API-Abrufe und Desktop-Widget.",
"enabled_by_default": true,
"app_scope": "module",
"installable": true,
"desktop": {
"available": true,
"show_on_desktop": true,
"show_in_start_menu": true
},
"widgets": [
{
"widget_id": "fx-rates-refresh",
"title": "Waehrungskurse",
"icon": "FX",
"zone": "sidebar",
"default_enabled": true,
"supports_public_home": false,
"summary": "Aktuelle FX-Kurse pruefen und bei Bedarf manuell aktualisieren.",
"content": "Ein API-Abruf wird nur ausgefuehrt, wenn der letzte Snapshot alt genug ist, ausser bei explizitem Force.",
"launch_app_id": "fx-rates",
"action_label": "App oeffnen",
"widget_type": "fx-rates-refresh",
"status_api": "/api/fx-rates/index.php?path=v1/status",
"refresh_api": "/api/fx-rates/index.php?path=v1/refresh"
}
],
"cron_jobs": [
{
"job_id": "refresh-rates",
"label": "FX-Kurse aktualisieren",
"description": "Laedt neue Wechselkurse, sofern der letzte Snapshot nicht mehr frisch genug ist.",
"endpoint_path": "/api/fx-rates/index.php?path=v1/refresh",
"method": "POST",
"payload": {
"trigger_source": "cron"
},
"default_enabled": false,
"default_cron": "0 */6 * * *",
"lock_minutes": 15
},
{
"job_id": "sync-currency-catalog",
"label": "FX-Waehrungskatalog synchronisieren",
"description": "Aktualisiert den internen Waehrungskatalog des Moduls.",
"endpoint_path": "/api/fx-rates/index.php?path=v1/currency-catalog/sync",
"method": "POST",
"payload": {
"trigger_source": "cron"
},
"default_enabled": false,
"default_cron": "30 3 * * 1",
"lock_minutes": 30
}
],
"setup": {
"sections": {
"database": true
},
"fields": [
{ "name": "use_separate_db", "label": "Eigene Modul-DB nutzen", "type": "checkbox", "required": false, "help": "Wenn aktiv, werden die DB-Daten unten verwendet. Sonst wird die Projekt-DB genutzt." },
{ "name": "db.driver", "label": "DB Driver", "type": "text", "required": false, "help": "z.B. pgsql oder mysql" },
{ "name": "db.host", "label": "DB Host", "type": "text", "required": false },
{ "name": "db.port", "label": "DB Port", "type": "number", "required": false },
{ "name": "db.dbname", "label": "DB Name", "type": "text", "required": false },
{ "name": "db.schema", "label": "DB Schema", "type": "text", "required": false },
{ "name": "db.user", "label": "DB User", "type": "text", "required": false },
{ "name": "db.password", "label": "DB Passwort", "type": "password", "required": false },
{ "name": "provider", "label": "FX Provider", "type": "text", "required": false, "help": "Unterstuetzt legacy currencyapi.net und currencyapi.com v3." },
{ "name": "api_version", "label": "FX API Version", "type": "select", "required": false, "help": "Steuert die Endpoint-Version unabhaengig von der Domain." },
{ "name": "api_url", "label": "FX API URL", "type": "text", "required": false, "help": "Nur die Basis-URL eintragen, z.B. https://api.currencyapi.com oder https://currencyapi.net." },
{ "name": "currencies_url", "label": "FX Waehrungs-URL", "type": "text", "required": false, "help": "Optional separate Basis-URL fuer den Waehrungskatalog." },
{ "name": "api_key", "label": "FX API Key", "type": "password", "required": false },
{ "name": "timeout_sec", "label": "Timeout (Sek.)", "type": "number", "required": false },
{ "name": "refresh_max_age_hours", "label": "Max. Alter fuer API-Refresh (Std.)", "type": "number", "required": false, "help": "Blockiert neue manuelle/API-Refreshes, solange der letzte gespeicherte Abruf juenger ist. Nur mit force darf frueher aktualisiert werden." },
{ "name": "default_base_currency", "label": "Standard-Basiswaehrung", "type": "text", "required": false },
{ "name": "display_base_currency", "label": "Anzeige-Basiswaehrung", "type": "text", "required": false },
{ "name": "preferred_currencies", "label": "Bevorzugte Waehrungen", "type": "text", "required": false, "help": "Kommagetrennte Liste, z.B. EUR,USD,DOGE,BTC." },
{ "name": "schedule_timezone", "label": "Zeitzone", "type": "text", "required": false, "help": "z.B. Europe/Berlin" }
]
},
"auth": {
"required": true,
"users": [],
"groups": []
}
}