MEC JSON REST API – Gap-Analyse
Basis-URL: https://mec.mall-cockpit.de/wp-json/mallcockpit/v1
Testparameter: ?center_id=975 (Lausitz-Center Hoyerswerda)
Stand: Mai 2026
Diese Seite dokumentiert alle bekannten MEC-API-Endpunkte, ihre Datenstruktur und den Import-Status in CockpitOS.
Vollständige Endpunkt-Übersicht
| Endpunkt | Beschreibung | CockpitOS-Modell | Status | Empfehlung |
|---|---|---|---|---|
/shops | Shop-Stammdaten (Name, Logo, Kategorie, Öffnungszeiten) | Shop / ShopLocation | ✅ importiert | — |
/center-aktionen | Center-Nachrichten & Aktionen | News | ✅ importiert | — |
/services | Center-Services (Dienstleistungen) | Service | ✅ importiert | — |
/stellenmarkt | Stellenanzeigen der Shops | Job | ✅ importiert | — |
/shop-angebote | Shop-Angebote / Rabattaktionen | Offer | ✅ importiert | — |
/shop-events | Shop-Events mit Datum | Event | ✅ importiert | — |
/informationen | Center-Metadaten (Social, Kontakt, Anfahrt) | ShoppingCenter / templateContent | ✅ importiert | — |
/slider | Hero-Slides (Bilder, Farben, Links) | templateContent['mec-template-d'].hero | ✅ importiert | — |
/centers | Alle MEC-Center-IDs und Hostnamen | intern (Center-Auswahl) | ✅ importiert | — |
/centerzeitung | Center-Zeitungs-Ausgaben (PDF + Vorschaubild) | News | ✅ neu implementiert | Als News-Eintrag mit tag centerzeitung |
/centerplan | SVG-Grundriss je Stockwerk | Centerplan + MapFloor | ✅ neu implementiert | Als MapFloor mit mapSvg |
/center-aktionen-aus-der-nachbarschaft | Nachrichten aus dem Umfeld (Kategorie-Filter) | News | ⚠️ nicht implementiert | Redundant: gleiche Struktur wie /center-aktionen, nur mit centeraktion_kategorie: "aus_der_nachbarschaft" |
/center-aktionen-archiv | Archivierte Center-Aktionen (globale DB, ~4000 Einträge) | News | ⚠️ nicht implementiert | Sehr großer Datensatz; keine Center-Filterung zuverlässig; Import nur auf explizite Anfrage sinnvoll |
/shop-aktionen | Shop-spezifische Aktionen | Offer oder Event | ❌ keine Daten | Für center_id=975 leer; Struktur unbekannt |
/shop-coupons | Shop-Coupons | Offer | ❌ keine Daten | Für center_id=975 leer; würde auf Offer passen |
/news_aktionen | Superset aller centeraktion-Einträge (alle Kategorien) | News | ❌ nicht implementiert | Doppelter Inhalt gegenüber /center-aktionen; Antwort dauert >30 s (5769 Einträge); kein Mehrwert |
/news_aktionen/highlights | Highlights-Teilmenge | News | ❌ keine sinnvollen Daten | Gibt [0] zurück (numerisches Array, kein Content) |
/real | Unbekannt | – | ❌ keine Daten | Für center_id=975 leeres Objekt; Zweck unklar |
/hotspot | Unbekannter Inhaltstyp | – | ❌ keine Daten | Für center_id=975 leeres Objekt; Zweck unklar |
/logo | Center-Logo? | ShoppingCenter.logo | ❌ keine Daten | Für center_id=975 leeres Objekt; Logo wird bereits via /informationen (bild_video_1) importiert |
Neu implementierte Endpunkte
/centerzeitung → News
Datenstruktur (Beispiel):
{
"id": 58643,
"modified": 1658162528,
"lang": {
"de": {
"titel": "Centerzeitung",
"untertitel": "Ausgabe Juli 2022",
"beschreibung": "<p>Inhalt als HTML...</p>"
}
},
"gueltigkeitszeitraum_von": 1658095200,
"vorschaubild": "https://mec.mall-cockpit.de/wp-content/.../cover.png",
"pdf": "https://mec.mall-cockpit.de/wp-content/.../ausgabe.pdf",
"assigned_center": 1007
}
Mapping zu News:
| MEC-Feld | CockpitOS-Feld | Hinweis |
|---|---|---|
lang.de.titel + lang.de.untertitel | title | Kombiniert: "Centerzeitung – Ausgabe Juli 2022" |
lang.de.beschreibung | content | HTML-Inhalt |
stripHtml(beschreibung) | excerpt | Max. 200 Zeichen |
gueltigkeitszeitraum_von / modified | publishDate | Unix-Timestamp × 1000 |
vorschaubild | image | Import nach Bunny CDN |
| hardcoded | tags | ['centerzeitung'] |
pdf | metadata.pdfUrl | Externe PDF-URL |
'mec-import' | source |
Import aktivieren:
POST /api/import/mec
{ "sourceCenterId": 975, "targetCenterId": "...", "options": { "centerzeitung": true } }
/centerplan → Centerplan + MapFloor
Datenstruktur (Beispiel):
[
{
"modified": "1524557067171",
"ebene": "0",
"ebene_kurz": "EG",
"ebene_titel": "EG",
"versions": "single",
"svg": "https://mec.mall-cockpit.de/wp-content/.../dnd-eg_2023-1.svg"
}
]
Mapping:
| MEC-Feld | CockpitOS-Feld | Hinweis |
|---|---|---|
ebene (as int) | MapFloor.floorNumber | z.B. 0 = EG, 1 = OG1, -1 = UG1 |
ebene_titel / ebene_kurz | MapFloor.name | |
svg (URL) | MapFloor.mapImage | Direkte SVG-URL als Fallback-Bild |
| SVG-Textinhalt (via fetch) | MapFloor.mapSvg | @db.Text; leer wenn Fetch fehlschlägt |
floorNumber === 0 | MapFloor.isDefault | EG ist Standard-Ebene |
Verhalten:
- Erstellt
Centerplanfür das Center falls noch nicht vorhanden - Überspringt Ebenen die für
(centerId, floorNumber)bereits existieren (Idempotenz) - SVG-Inhalt wird via HTTP-Fetch aus MEC geladen und in
mapSvggespeichert - Fehler beim SVG-Fetch sind nicht blockierend (Eintrag wird trotzdem angelegt)
Import aktivieren:
POST /api/import/mec
{ "sourceCenterId": 975, "targetCenterId": "...", "options": { "centerplan": true } }
Nicht implementierte Endpunkte – Begründung
/center-aktionen-aus-der-nachbarschaft
Identische Datenstruktur wie /center-aktionen (gleiches lang-Schema, gleiche Felder). Unterschied: centeraktion_kategorie: "aus_der_nachbarschaft". Bei Center 975 liefert der Endpunkt nur 1 Eintrag. Da /center-aktionen bereits importiert wird, würde eine separate Implementierung zu Duplikaten führen. Empfehlung: Beim /center-aktionen-Import den centeraktion_kategorie-Wert als Tag mitübergeben, wenn eine Differenzierung gewünscht ist.
/center-aktionen-archiv
Liefert ~4000 Einträge aus allen Centern (Antwortzeit: ~25 Sekunden). Struktur identisch mit /center-aktionen. Enthält ältere, archivierte Meldungen. Empfehlung: Nur auf explizite Anfrage und mit Bulk-Import-Logik (paginiert, Center-gefiltert) implementieren.
/shop-aktionen und /shop-coupons
Für center_id=975 liefern beide Endpunkte {"nothing_found": [...]}. Strukturell würden sie auf Offer passen. Empfehlung: Implementierung erst wenn ein Center mit Daten identifiziert ist; /shop-angebote deckt den Angebots-Use-Case bereits ab.
/news_aktionen
Superset aller centeraktion-Einträge über alle Center hinweg (~5769 Einträge, >30 s Ladezeit). Gleiche Struktur wie /center-aktionen. Kein Mehrwert, da alle relevanten Einträge über /center-aktionen mit center_id-Filter bereits abgedeckt sind.
/real, /hotspot, /logo
Liefern für center_id=975 leere Objekte ({}). Zweck unklar; keine sinnvollen Daten verfügbar.
API-Client-Typen
Die TypeScript-Interfaces befinden sich in apps/dashboard/src/lib/mec-api-client.ts:
MecCenterzeitung/MecCenterzeitungLang– Centerzeitung-EinträgeMecCenterplanFloor– Centerplan-Ebenen
Fetch-Funktionen:
getMecCenterzeitung(centerId?)→Promise<MecCenterzeitung[]>getMecCenterplan(centerId)→Promise<MecCenterplanFloor[]>
Verwandte Dokumente
- MEC Import (Übersicht) – Vollständige Dokumentation des Import-Workflows
- Public Center-Website API Gap-Analyse – Gap-Analyse der öffentlichen CockpitOS-API
Nutzungsstatistik: Seitenaufrufe werden anonymisiert erfasst. Im Umami-Dashboard nach diesem Pfad filtern: /developer-guide/mec-api-gap-analyse