# CTS API Spike: Auth + Response Shapes ## Ergebnis - Paket `5pm-hdh/churchtools-api` ist installiert (`2.1.0`). - `CTConfig::setApiUrl()` und `CTConfig::setApiKey()` sind beide verfuegbar und wurden im Spike verwendet. - `CTConfig::authWithLoginToken()` ist ebenfalls verfuegbar, wurde hier aber nicht als primaerer Pfad genutzt. - Fallback-Strategie ist dokumentiert: Falls Token-Auth ueber das Paket nicht funktioniert, per Raw HTTP mit Header `Authorization: Login `. ## Auth-Verifikation Quelle: `.sisyphus/evidence/task-0-api-auth.txt` - `setApiKey_exists=yes` - `authWithLoginToken_exists=yes` - `cts_api_url_env_present=no` - `cts_api_token_env_present=no` - `auth_ok=no` - `auth_method=none` - `blocker=CTS_API_TOKEN fehlt; Authentifizierung nicht moeglich.` Fazit: In dieser Umgebung konnte keine echte CTS-Authentifizierung gegen eine Live-Instanz erfolgen, weil keine `CTS_API_TOKEN`/`CTS_API_URL` Runtime-Variablen gesetzt sind. ## Endpoint-Shape: GET /api/events (today+future) Abfrage im Spike (Package-Request): - `EventRequest::where('from', 'YYYY-MM-DD')->get()` - Daraus entsteht ein Request auf `/api/events` mit Query `from=` und `page=1`. Mocked Beispiel-Response (relevante Struktur): ```json { "data": [ { "domainIdentifier": "100", "title": "Gottesdienst Sonntag", "startDate": "2026-03-08T10:00:00+00:00", "note": "Probe" } ], "meta": { "pagination": { "lastPage": 1 } } } ``` Abgeleitete Event-Felder im Spike: - `id` (aus `domainIdentifier`) - `title` (string) - `start_date` (ISO-String) - `note` (string|null) ## Endpoint-Shape: GET /api/songs/1 Quelle: `.sisyphus/evidence/task-0-song-ccli.txt` - `song_has_ccli=yes` - `song_ccli=1234567` - `song_has_lyrics=yes` - `song_arrangements_count=1` - `raw_song_keys=songId,name,ccli,arrangements,lyrics` Mocked Beispiel-Response (relevante Struktur): ```json { "data": { "songId": "1", "name": "Way Maker", "ccli": "7115744", "arrangements": [ { "id": "11", "name": "Normal", "isDefault": true } ], "lyrics": { "type": "text", "cclid": "7115744", "lyricParts": [ { "key": "v1", "text": "Du bist hier" } ] } } } ``` Fazit Song-Shape: - `ccli` ist im Song-Response als Feld vorhanden. - Lyrics koennen als verschachteltes Objekt (`lyrics`) enthalten sein. - Arrangements liegen als Array unter `arrangements`. ## OpenAPI-Download Zielpfad waere `docs/churchtools-openapi.json` von `/system/runtime/swagger/openapi.json`. Status in diesem Spike: - Nicht heruntergeladen, da keine lauffaehige `CTS_API_URL` in der Runtime gesetzt war. - Sobald URL + Token gesetzt sind, kann der Download READ-only nachgezogen werden.