From 1be0a94b51ef6f3a6d89b531c2923901280a45d3 Mon Sep 17 00:00:00 2001 From: duffyduck Date: Fri, 3 Apr 2026 12:50:16 +0200 Subject: [PATCH] Fetch full contact details from Starface instead of summary The contacts list endpoint only returns summaryValues/phoneNumbers. Now fetch each contact individually via GET /contacts/{id} to get all fields (blocks/attributes). Also log the detail JSON structure so we can verify the field mapping is correct. Co-Authored-By: Claude Opus 4.6 (1M context) --- .../Services/StarfaceApiClient.cs | 33 +++++++++++++++---- 1 file changed, 26 insertions(+), 7 deletions(-) diff --git a/src/StarfaceOutlookSync/Services/StarfaceApiClient.cs b/src/StarfaceOutlookSync/Services/StarfaceApiClient.cs index 8d1e27dd..5ea40e72 100644 --- a/src/StarfaceOutlookSync/Services/StarfaceApiClient.cs +++ b/src/StarfaceOutlookSync/Services/StarfaceApiClient.cs @@ -209,15 +209,34 @@ namespace StarfaceOutlookSync.Services if (array.Count == 0) break; - // Ersten Kontakt als Debug-Info loggen - if (firstPage && array.Count > 0) - { - OnDebug?.Invoke($"Starface API Rohdaten (1. Kontakt):\n{array[0].ToString(Formatting.Indented)}"); - firstPage = false; - } + OnDebug?.Invoke($"Seite {page}: {array.Count} Kontakte in Liste"); + // Die Listen-API gibt nur Summary zurueck. + // Jeden Kontakt einzeln abrufen fuer alle Felder. foreach (var item in array) - contacts.Add(MapFromStarface(item)); + { + var id = item["id"]?.ToString(); + if (string.IsNullOrEmpty(id)) continue; + + try + { + var detailResp = await _http.GetAsync($"{_baseUrl}/contacts/{id}"); + if (detailResp.IsSuccessStatusCode) + { + var detailBody = await detailResp.Content.ReadAsStringAsync(); + var detailObj = JObject.Parse(detailBody); + + if (firstPage) + { + OnDebug?.Invoke($"Starface Kontakt-Detail (1. Kontakt):\n{detailObj.ToString(Formatting.Indented)}"); + firstPage = false; + } + + contacts.Add(MapFromStarface(detailObj)); + } + } + catch { } + } if (array.Count < pageSize) break; page++;