From adf11251ecf604d67f557fd2bfb6680091af0a4e Mon Sep 17 00:00:00 2001 From: "Builder.io" Date: Sat, 27 Sep 2025 21:43:13 +0000 Subject: [PATCH] Add social/network service cgen-f0b222929f3e49439a3424259ec71d18 --- client/lib/aethex-social-service.ts | 63 +++++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 client/lib/aethex-social-service.ts diff --git a/client/lib/aethex-social-service.ts b/client/lib/aethex-social-service.ts new file mode 100644 index 00000000..977b3f6c --- /dev/null +++ b/client/lib/aethex-social-service.ts @@ -0,0 +1,63 @@ +import { supabase } from "./supabase"; + +export const aethexSocialService = { + async listRecommended(userId: string, limit = 10) { + const { data, error } = await supabase + .from("user_profiles") + .select("id, username, full_name, avatar_url, bio") + .neq("id", userId) + .limit(limit); + if (error) { + console.warn("listRecommended error:", error); + return [] as any[]; + } + return data as any[]; + }, + + async getFollowing(userId: string): Promise { + try { + const { data, error } = await supabase + .from("user_follows") + .select("following_id") + .eq("follower_id", userId); + if (!error && data) return (data as any[]).map((r: any) => r.following_id); + } catch {} + try { + const raw = localStorage.getItem("mock_follows"); + const map = raw ? JSON.parse(raw) : {}; + return map[userId] || []; + } catch {} + return []; + }, + + async followUser(followerId: string, followingId: string): Promise { + try { + const { error } = await supabase.from("user_follows").insert({ + follower_id: followerId, + following_id: followingId, + }); + if (!error) return; + } catch {} + const raw = localStorage.getItem("mock_follows"); + const map = raw ? JSON.parse(raw) : {}; + const set: string[] = Array.from(new Set([...(map[followerId] || []), followingId])); + map[followerId] = set; + localStorage.setItem("mock_follows", JSON.stringify(map)); + }, + + async unfollowUser(followerId: string, followingId: string): Promise { + try { + await supabase + .from("user_follows") + .delete() + .eq("follower_id", followerId) + .eq("following_id", followingId); + return; + } catch {} + const raw = localStorage.getItem("mock_follows"); + const map = raw ? JSON.parse(raw) : {}; + const list: string[] = (map[followerId] || []).filter((id: string) => id !== followingId); + map[followerId] = list; + localStorage.setItem("mock_follows", JSON.stringify(map)); + }, +};