From 067c37b05e1d9376958f569b7ae99530f7950cb7 Mon Sep 17 00:00:00 2001 From: DevMirza Date: Fri, 22 Dec 2023 20:49:04 +0000 Subject: [PATCH 1/7] feat: Livekit Webhook From 6500187324cad8e825ed774017988d4aa883d834 Mon Sep 17 00:00:00 2001 From: DevMirza Date: Fri, 22 Dec 2023 20:58:42 +0000 Subject: [PATCH 2/7] update recommended service --- lib/recommended-service.ts | 36 ++++++++++++++++++++++++++++++++---- 1 file changed, 32 insertions(+), 4 deletions(-) diff --git a/lib/recommended-service.ts b/lib/recommended-service.ts index 4278155..a510a37 100644 --- a/lib/recommended-service.ts +++ b/lib/recommended-service.ts @@ -42,15 +42,43 @@ export const getRecommended = async () => { }, ], }, - orderBy: { - createAt: "desc", + include: { + stream: { + select: { + isLive: true, + }, + }, }, + orderBy: [ + { + stream: { + isLive: "desc", + }, + }, + { + createAt: "desc", + }, + ], }); } else { users = await db.user.findMany({ - orderBy: { - createAt: "desc", + include: { + stream: { + select: { + isLive: true, + }, + }, }, + orderBy: [ + { + stream: { + isLive: "desc", + }, + }, + { + createAt: "desc", + }, + ], }); } From adb57fed7ea8d90cee6ee71f1e5a3a30865f9cb1 Mon Sep 17 00:00:00 2001 From: DevMirza Date: Fri, 22 Dec 2023 21:02:08 +0000 Subject: [PATCH 3/7] update follow service --- lib/follow-service.ts | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/lib/follow-service.ts b/lib/follow-service.ts index 34d0ce8..a7f8f44 100644 --- a/lib/follow-service.ts +++ b/lib/follow-service.ts @@ -17,8 +17,28 @@ export const getFollowedUsers = async () => { }, }, include: { - following: true, + following: { + include: { + stream: { + select: { + isLive: true, + }, + }, + }, + }, }, + orderBy: [ + { + following: { + stream: { + isLive: "desc", + }, + }, + }, + { + createdAt: "desc", + }, + ], }); return followedUsers; From cc10d6867bf23a9e7b73ee9217ce7122dd7c4b5d Mon Sep 17 00:00:00 2001 From: DevMirza Date: Fri, 22 Dec 2023 21:06:29 +0000 Subject: [PATCH 4/7] get data from db if user is live or not --- app/(browse)/_components/sidebar/recommended.tsx | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/app/(browse)/_components/sidebar/recommended.tsx b/app/(browse)/_components/sidebar/recommended.tsx index 157facc..64abef0 100644 --- a/app/(browse)/_components/sidebar/recommended.tsx +++ b/app/(browse)/_components/sidebar/recommended.tsx @@ -5,7 +5,9 @@ import { User } from "@prisma/client"; import { UserItem, UserItemSkeleton } from "./user-item"; interface RecommendedProps { - data: User[]; + data: (User & { + stream: { isLive: boolean } | null; + })[]; } export const Recommended = ({ data }: RecommendedProps) => { @@ -26,7 +28,7 @@ export const Recommended = ({ data }: RecommendedProps) => { key={user.id} username={user.username} imageUrl={user.imageUrl} - isLive={true} + isLive={user.stream?.isLive} /> ))} From d6246d26ada26fb58f41abaae4e0e98794f19db8 Mon Sep 17 00:00:00 2001 From: DevMirza Date: Fri, 22 Dec 2023 21:11:23 +0000 Subject: [PATCH 5/7] check for db if the following is live or not --- app/(browse)/_components/sidebar/following.tsx | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/app/(browse)/_components/sidebar/following.tsx b/app/(browse)/_components/sidebar/following.tsx index 0826995..9daba4e 100644 --- a/app/(browse)/_components/sidebar/following.tsx +++ b/app/(browse)/_components/sidebar/following.tsx @@ -5,7 +5,13 @@ import { Follow, User } from "@prisma/client"; import { UserItem, UserItemSkeleton } from "./user-item"; interface FollowingProps { - data: (Follow & { following: User })[]; + data: (Follow & { + following: User & { + stream: { + isLive: boolean; + } | null; + }; + })[]; } export const Following = ({ data }: FollowingProps) => { @@ -28,7 +34,7 @@ export const Following = ({ data }: FollowingProps) => { key={follow.following.id} username={follow.following.username} imageUrl={follow.following.imageUrl} - isLive={true} + isLive={follow.following.stream?.isLive} /> ))} From 3c24bbc7a1a75536fd5d340192148b01c6cf9856 Mon Sep 17 00:00:00 2001 From: DevMirza Date: Fri, 22 Dec 2023 22:38:48 +0000 Subject: [PATCH 6/7] add livekit webhook api --- app/api/webhooks/livekit/route.ts | 42 +++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 app/api/webhooks/livekit/route.ts diff --git a/app/api/webhooks/livekit/route.ts b/app/api/webhooks/livekit/route.ts new file mode 100644 index 0000000..4df7bcf --- /dev/null +++ b/app/api/webhooks/livekit/route.ts @@ -0,0 +1,42 @@ +import { db } from "@/lib/db"; +import { WebhookReceiver } from "livekit-server-sdk"; +import { headers } from "next/headers"; + +const reciever = new WebhookReceiver( + process.env.LIVEKIT_API_KEY!, + process.env.LIVEKIT_API_SECRET! +); + +export async function POST(req: Request) { + const body = await req.text(); + const headerPayload = headers(); + const authorization = headerPayload.get("Authorization"); + + if (!authorization) { + return new Response("No authorization header", { status: 400 }); + } + + const event = reciever.receive(body, authorization); + + if (event.event === "ingress_started") { + await db.stream.update({ + where: { + ingressId: event.ingressInfo?.ingressId, + }, + data: { + isLive: true, + }, + }); + } + + if (event.event === "ingress_ended") { + await db.stream.update({ + where: { + ingressId: event.ingressInfo?.ingressId, + }, + data: { + isLive: false, + }, + }); + } +} From a20ebe4f2b4d3c04dfadc9760add4d0098848545 Mon Sep 17 00:00:00 2001 From: DevMirza Date: Fri, 22 Dec 2023 22:49:44 +0000 Subject: [PATCH 7/7] update --- app/api/webhooks/livekit/route.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/api/webhooks/livekit/route.ts b/app/api/webhooks/livekit/route.ts index 4df7bcf..f5d6d68 100644 --- a/app/api/webhooks/livekit/route.ts +++ b/app/api/webhooks/livekit/route.ts @@ -2,7 +2,7 @@ import { db } from "@/lib/db"; import { WebhookReceiver } from "livekit-server-sdk"; import { headers } from "next/headers"; -const reciever = new WebhookReceiver( +const receiver = new WebhookReceiver( process.env.LIVEKIT_API_KEY!, process.env.LIVEKIT_API_SECRET! ); @@ -16,7 +16,7 @@ export async function POST(req: Request) { return new Response("No authorization header", { status: 400 }); } - const event = reciever.receive(body, authorization); + const event = receiver.receive(body, authorization); if (event.event === "ingress_started") { await db.stream.update({