From 212f4992c1e9aef7c949b5b4044c5c3ebd28595a Mon Sep 17 00:00:00 2001 From: Till-JS <101404291+Till-JS@users.noreply.github.com> Date: Tue, 17 Feb 2026 13:56:47 +0100 Subject: [PATCH] fix(manacore-web): handle contacts API response format The Contacts API returns { contacts: Contact[], total: number } but the service was treating it as a direct Contact[] array. Co-Authored-By: Claude Opus 4.5 --- .../apps/web/src/lib/api/services/contacts.ts | 35 +++++++++++++------ 1 file changed, 25 insertions(+), 10 deletions(-) diff --git a/apps/manacore/apps/web/src/lib/api/services/contacts.ts b/apps/manacore/apps/web/src/lib/api/services/contacts.ts index b2aa226f3..2e15d09d1 100644 --- a/apps/manacore/apps/web/src/lib/api/services/contacts.ts +++ b/apps/manacore/apps/web/src/lib/api/services/contacts.ts @@ -67,6 +67,14 @@ export interface ContactActivity { createdAt: string; } +/** + * API response format from Contacts backend + */ +interface ContactsApiResponse { + contacts: Contact[]; + total: number; +} + /** * Contacts service for dashboard widgets */ @@ -75,22 +83,29 @@ export const contactsService = { * Get favorite contacts */ async getFavoriteContacts(limit: number = 5): Promise> { - const result = await getClient().get(`/contacts?isFavorite=true&limit=${limit}`); - return result; + const result = await getClient().get( + `/contacts?isFavorite=true&limit=${limit}` + ); + + if (result.error || !result.data) { + return { data: null, error: result.error }; + } + + return { data: result.data.contacts || [], error: null }; }, /** * Get recent contacts (by updatedAt) */ async getRecentContacts(limit: number = 5): Promise> { - const result = await getClient().get(`/contacts?limit=${limit}`); + const result = await getClient().get(`/contacts?limit=${limit}`); if (result.error || !result.data) { - return result; + return { data: null, error: result.error }; } // Sort by updatedAt and filter archived - const sorted = result.data + const sorted = (result.data.contacts || []) .filter((c) => !c.isArchived) .sort((a, b) => new Date(b.updatedAt).getTime() - new Date(a.updatedAt).getTime()) .slice(0, limit); @@ -102,16 +117,16 @@ export const contactsService = { * Get contacts with upcoming birthdays */ async getUpcomingBirthdays(days: number = 30): Promise> { - const result = await getClient().get('/contacts'); + const result = await getClient().get('/contacts'); if (result.error || !result.data) { - return result; + return { data: null, error: result.error }; } const today = new Date(); const futureDate = new Date(Date.now() + days * 24 * 60 * 60 * 1000); - const withBirthdays = result.data.filter((c) => { + const withBirthdays = (result.data.contacts || []).filter((c) => { if (!c.birthday || c.isArchived) return false; const birthday = new Date(c.birthday); @@ -133,13 +148,13 @@ export const contactsService = { * Get contact count */ async getContactCount(): Promise> { - const result = await getClient().get('/contacts'); + const result = await getClient().get('/contacts'); if (result.error || !result.data) { return { data: null, error: result.error }; } - const active = result.data.filter((c) => !c.isArchived); + const active = (result.data.contacts || []).filter((c) => !c.isArchived); const favorites = active.filter((c) => c.isFavorite); return { data: { total: active.length, favorites: favorites.length }, error: null };