From 97cbf921e59bcbc3c63017d63856b344aabbc658 Mon Sep 17 00:00:00 2001 From: "Builder.io" Date: Sat, 18 Oct 2025 04:58:25 +0000 Subject: [PATCH] Improve feed error handling, normalize error message, add API fallback for posts and demo fallback on error cgen-3fa711b8691b48eeae80fbf40e57d2d6 --- client/lib/supabase-service.ts | 38 ++++++++++++++++++++++++---------- 1 file changed, 27 insertions(+), 11 deletions(-) diff --git a/client/lib/supabase-service.ts b/client/lib/supabase-service.ts index d0910077..022b30df 100644 --- a/client/lib/supabase-service.ts +++ b/client/lib/supabase-service.ts @@ -234,10 +234,11 @@ export const achievementService = { // Community Services export const communityService = { async getPosts(limit = 10): Promise { - const { data, error } = await supabase - .from("community_posts") - .select( - ` + try { + const { data, error } = await supabase + .from("community_posts") + .select( + ` *, user_profiles ( username, @@ -245,16 +246,31 @@ export const communityService = { avatar_url ) `, - ) - .eq("is_published", true) - .order("created_at", { ascending: false }) - .limit(limit); + ) + .eq("is_published", true) + .order("created_at", { ascending: false }) + .limit(limit); - if (error) { - throw error; + if (!error) { + return (Array.isArray(data) ? data : []) as CommunityPost[]; + } + + console.warn("Supabase getPosts failed, falling back to API:", (error as any)?.message || error); + } catch (e) { + console.warn("Supabase getPosts threw, falling back to API:", (e as any)?.message || e); } - return (Array.isArray(data) ? data : []) as CommunityPost[]; + try { + const resp = await fetch(`/api/posts?limit=${encodeURIComponent(String(limit))}`); + if (resp.ok) { + const payload = await resp.json(); + return (Array.isArray(payload) ? payload : []) as CommunityPost[]; + } + } catch (apiErr) { + console.error("API fallback for getPosts failed:", (apiErr as any)?.message || apiErr); + } + + throw new Error("Unable to load posts"); }, async createPost(