diff --git a/src/routes/+page.svelte b/src/routes/+page.svelte index ee2ddb6..c35de9e 100644 --- a/src/routes/+page.svelte +++ b/src/routes/+page.svelte @@ -24,6 +24,7 @@ profilePictureUrl?: string | null; likeCount?: number; isLikedByUser?: boolean; + isFromFriend?: boolean; media: Array<{ id: string; findId: string; @@ -53,6 +54,7 @@ }; likeCount?: number; isLiked?: boolean; + isFromFriend?: boolean; media?: Array<{ type: string; url: string; @@ -102,6 +104,7 @@ }, likeCount: serverFind.likeCount, isLiked: serverFind.isLikedByUser, + isFromFriend: serverFind.isFromFriend, media: serverFind.media?.map( (m: { type: string; url: string; thumbnailUrl: string | null }) => ({ type: m.type, @@ -120,7 +123,7 @@ case 'public': return allFinds.filter((find) => find.isPublic === 1); case 'friends': - return allFinds.filter((find) => find.isPublic === 0 && find.userId !== data.user!.id); + return allFinds.filter((find) => find.isFromFriend === true); case 'mine': return allFinds.filter((find) => find.userId === data.user!.id); case 'all': diff --git a/src/routes/api/finds/+server.ts b/src/routes/api/finds/+server.ts index 0ed0064..b5193a3 100644 --- a/src/routes/api/finds/+server.ts +++ b/src/routes/api/finds/+server.ts @@ -107,7 +107,15 @@ export const GET: RequestHandler = async ({ url, locals }) => { SELECT 1 FROM ${findLike} WHERE ${findLike.findId} = ${find.id} AND ${findLike.userId} = ${locals.user.id} - ) THEN 1 ELSE 0 END` + ) THEN 1 ELSE 0 END`, + isFromFriend: sql`CASE WHEN ${ + friendIds.length > 0 + ? sql`${find.userId} IN (${sql.join( + friendIds.map((id) => sql`${id}`), + sql`, ` + )})` + : sql`FALSE` + } THEN 1 ELSE 0 END` }) .from(find) .innerJoin(user, eq(find.userId, user.id)) @@ -199,7 +207,8 @@ export const GET: RequestHandler = async ({ url, locals }) => { ...findItem, profilePictureUrl: userProfilePictureUrl, media: mediaWithSignedUrls, - isLikedByUser: Boolean(findItem.isLikedByUser) + isLikedByUser: Boolean(findItem.isLikedByUser), + isFromFriend: Boolean(findItem.isFromFriend) }; }) );