Zum Hauptinhalt springen

Den Verein erkunden

Diese Anleitung führt durch die häufigsten Leseoperationen: Herausfinden, auf welche Vereine Ihr Konto Zugriff hat, und anschließendes Abrufen von Spielern, Trackern, Mannschaften und Sessions — alles mit einfachen HTTP-Aufrufen, die Sie direkt mit curl ausführen können.

Die in diesen Beispielen verwendete Staging-URL ist:

https://api.dp.dev.tracktics.systems

Ersetzen Sie <ihr-firebase-jwt> in allen Anfragen durch das Firebase-ID-Token Ihres Kontos.


Schritt 1 — Ihre Vereine abrufen

Der erste Aufruf ist fast immer GET /my_clubs. Er gibt alle Vereine zurück, auf die Ihr Konto Zugriff hat, zusammen mit Ihren Rollen in jedem Verein.

curl -s \
-H "Authorization: Bearer <ihr-firebase-jwt>" \
https://api.dp.dev.tracktics.systems/my_clubs

Beispielantwort

{
"clubs": [
{
"club_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"name": "FC Beispiel",
"avatar": "/avatars/fc-beispiel.png",
"timestamp": "2025-01-15T10:00:00Z",
"revision": 1
}
],
"roles": [
["club admin", "club editor"]
]
}

Das roles-Array ist parallel zum clubs-Array aufgebaut — roles[0] enthält die Rollen für clubs[0] usw.

Notieren Sie sich die club_id; Sie wird für alle weiteren Aufrufe benötigt.


Schritt 2 — Vollständigen Vereins-Snapshot abrufen (BFF)

Der BFF-Endpunkt GET /v1/bff/club/{club_id} liefert Spieler, Tracker, Rollen und Tracker-Spieler-Zuordnungen in einer einzigen Anfrage. Dies ist der empfohlene Ausgangspunkt für jede Vereinsansicht, da dadurch mehrere Einzelabrufe entfallen.

CLUB_ID="a1b2c3d4-e5f6-7890-abcd-ef1234567890"

curl -s \
-H "Authorization: Bearer <ihr-firebase-jwt>" \
"https://api.dp.dev.tracktics.systems/v1/bff/club/${CLUB_ID}"

Beispielantwort

{
"club": {
"club_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"name": "FC Beispiel",
"avatar": "/avatars/fc-beispiel.png",
"timestamp": "2025-01-15T10:00:00Z",
"revision": 1
},
"players": [
{
"player_id": "b2c3d4e5-f6a7-8901-bcde-f12345678901",
"club_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"name": "Alice Müller",
"avatar": "/avatars/alice.png",
"timestamp": "2025-01-15T10:30:00Z",
"revision": 1
},
{
"player_id": "c3d4e5f6-a7b8-9012-cdef-123456789012",
"club_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"name": "Bob Schmidt",
"avatar": "/avatars/bob.png",
"timestamp": "2025-01-15T10:35:00Z",
"revision": 1
}
],
"trackers": [
{
"tracker_id": "d4e5f6a7-b8c9-0123-def1-234567890123",
"club_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"name": "Tracker 01",
"timestamp": "2025-01-15T11:00:00Z",
"revision": 1
}
],
"roles": [
{
"role_id": "e5f6a7b8-c9d0-1234-ef12-345678901234",
"club_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"user_id": "f6a7b8c9-d0e1-2345-f123-456789012345",
"roles": ["club admin", "club editor"],
"timestamp": "2025-01-15T09:00:00Z",
"revision": 1
}
],
"tracker_player_relations": [
{
"relation_id": "a7b8c9d0-e1f2-3456-a123-456789012345",
"tracker_id": "d4e5f6a7-b8c9-0123-def1-234567890123",
"player_id": "b2c3d4e5-f6a7-8901-bcde-f12345678901",
"club_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"timestamp": "2025-01-15T11:30:00Z",
"revision": 1
}
]
}
FeldInhalt
clubVereinsmetadaten (Name, Avatar)
playersAlle im Verein registrierten Spieler
trackersAlle GPS-Tracker des Vereins
rolesNutzer-Rollen-Zuweisungen innerhalb des Vereins
tracker_player_relationsAktuelle Tracker ↔ Spieler-Zuordnungen

Schritt 3 — Mannschaften auflisten

Mannschaften sind Untermengen des Vereins. Verwenden Sie den Standard-Listen-Endpunkt:

curl -s \
-H "Authorization: Bearer <ihr-firebase-jwt>" \
"https://api.dp.dev.tracktics.systems/clubs/${CLUB_ID}/teams"

Beispielantwort

[
{
"team_id": "f7a8b9c0-d1e2-3456-f123-456789012345",
"club_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"name": "Erste Mannschaft",
"timestamp": "2025-01-10T08:00:00Z",
"revision": 1
},
{
"team_id": "07b8c9d0-e1f2-4567-0123-456789012345",
"club_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"name": "U17",
"timestamp": "2025-01-10T08:05:00Z",
"revision": 1
}
]

Notieren Sie sich die team_id-Werte — sie werden für die Abfrage von Sessions in Schritt 4 benötigt.


Schritt 4 — Sessions einer Mannschaft auflisten

Sessions sind einer Mannschaft zugeordnet. Ersetzen Sie team_id durch den Wert aus Schritt 3:

TEAM_ID="f7a8b9c0-d1e2-3456-f123-456789012345"

curl -s \
-H "Authorization: Bearer <ihr-firebase-jwt>" \
"https://api.dp.dev.tracktics.systems/clubs/${CLUB_ID}/teams/${TEAM_ID}/sessions"

Beispielantwort

[
{
"session_id": "17c8d9e0-f1a2-5678-1234-567890123456",
"club_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"team_id": "f7a8b9c0-d1e2-3456-f123-456789012345",
"name": "Training 2025-01-15",
"start": "2025-01-15T16:00:00Z",
"end": "2025-01-15T17:30:00Z",
"timestamp": "2025-01-15T16:00:00Z",
"revision": 1
}
]

Für einen bestimmten Zeitraum können from und until als Query-Parameter (ISO 8601) angegeben werden:

curl -s \
-H "Authorization: Bearer <ihr-firebase-jwt>" \
"https://api.dp.dev.tracktics.systems/clubs/${CLUB_ID}/teams/${TEAM_ID}/sessions?from=2025-01-01T00:00:00Z&until=2025-02-01T00:00:00Z&order=asc"

Paginierung

Alle Listen-Endpunkte (/teams, /sessions, /players, /trackers) unterstützen cursor-basierte Paginierung über den Pagination-Next-Token-Response-Header. Ist der Header vorhanden, gibt es weitere Ergebnisse:

# Erste Seite
curl -si \
-H "Authorization: Bearer <ihr-firebase-jwt>" \
"https://api.dp.dev.tracktics.systems/clubs/${CLUB_ID}/teams/${TEAM_ID}/sessions?limit=10" \
| grep -E "Pagination-Next-Token|^\["

# Nächste Seite — Token aus dem Header verwenden
curl -s \
-H "Authorization: Bearer <ihr-firebase-jwt>" \
"https://api.dp.dev.tracktics.systems/clubs/${CLUB_ID}/teams/${TEAM_ID}/sessions?limit=10&next_token=<token-aus-header>"
ParameterStandardBeschreibung
limit100Einträge pro Seite (Maximum 100)
next_tokenCursor aus dem Pagination-Next-Token-Header
orderdescasc für älteste zuerst, desc für neueste zuerst
fromNur Einträge ab diesem Zeitstempel zurückgeben
untilNur Einträge bis zu diesem Zeitstempel zurückgeben

Nächste Schritte

  • Live-Positionsdaten einer Session über WebSocket-Kanäle abonnieren
  • Historische Positionsdaten über den REST-Positions-Endpunkt abfragen (GET /clubs/{club_id}/trackers/{tracker_id}/positions)