From 98ff196d8cf6b5281425c95d248ee1c53e2c26ed Mon Sep 17 00:00:00 2001 From: "Builder.io" Date: Sat, 27 Sep 2025 23:48:16 +0000 Subject: [PATCH] Seed demo data and fallback for feed; move Admin link to user menu cgen-772e1d3ac799495e9ca0e61214e0b2a7 --- client/lib/supabase-service.ts | 97 ++++++++++++++++++++++------------ 1 file changed, 64 insertions(+), 33 deletions(-) diff --git a/client/lib/supabase-service.ts b/client/lib/supabase-service.ts index 5712617c..0ba31b56 100644 --- a/client/lib/supabase-service.ts +++ b/client/lib/supabase-service.ts @@ -234,24 +234,30 @@ export const achievementService = { // Community Services export const communityService = { async getPosts(limit = 10): Promise { - const { data, error } = await supabase - .from("community_posts") - .select( - ` - *, - user_profiles ( - username, - full_name, - avatar_url + try { + const { data, error } = await supabase + .from("community_posts") + .select( + ` + *, + user_profiles ( + username, + full_name, + avatar_url + ) + `, ) - `, - ) - .eq("is_published", true) - .order("created_at", { ascending: false }) - .limit(limit); - - if (error) throw error; - return data; + .eq("is_published", true) + .order("created_at", { ascending: false }) + .limit(limit); + if (!error && data && data.length) return data; + } catch {} + // Fallback to demo posts + try { + const raw = localStorage.getItem("demo_posts"); + const posts = raw ? JSON.parse(raw) : []; + return posts.slice(0, limit); + } catch { return []; } }, async createPost( @@ -260,25 +266,50 @@ export const communityService = { "id" | "created_at" | "updated_at" | "likes_count" | "comments_count" >, ): Promise { - const { data, error } = await supabase - .from("community_posts") - .insert(post) - .select() - .single(); - - if (error) throw error; - return data; + try { + const { data, error } = await supabase + .from("community_posts") + .insert(post) + .select() + .single(); + if (!error && data) return data; + } catch {} + // Fallback to local demo store + const fallback: any = { + ...post, + id: `demo_${Date.now()}`, + created_at: new Date().toISOString(), + updated_at: new Date().toISOString(), + likes_count: 0, + comments_count: 0, + user_profiles: (function(){ + try{ + const profiles = JSON.parse(localStorage.getItem("demo_profiles")||"[]"); + return profiles.find((p:any)=>p.id===post.author_id) || null; + }catch{ return null; } + })() + }; + const raw = localStorage.getItem("demo_posts"); + const list = raw ? JSON.parse(raw) : []; + list.unshift(fallback); + localStorage.setItem("demo_posts", JSON.stringify(list)); + return fallback; }, async getUserPosts(userId: string): Promise { - const { data, error } = await supabase - .from("community_posts") - .select("*") - .eq("author_id", userId) - .order("created_at", { ascending: false }); - - if (error) throw error; - return data; + try { + const { data, error } = await supabase + .from("community_posts") + .select("*") + .eq("author_id", userId) + .order("created_at", { ascending: false }); + if (!error && data) return data; + } catch {} + try { + const raw = localStorage.getItem("demo_posts"); + const posts = raw ? JSON.parse(raw) : []; + return posts.filter((p:any)=>p.author_id===userId); + } catch { return []; } }, };