From ba7766f2f693306ac0f7895a9b42909c2b69da27 Mon Sep 17 00:00:00 2001 From: MarconLP <13001502+MarconLP@users.noreply.github.com> Date: Sun, 23 Apr 2023 13:13:43 +0200 Subject: [PATCH] add posthog to trpc context and add view video event --- src/server/api/routers/video.ts | 21 ++++++++++++++++++--- src/server/api/trpc.ts | 2 ++ src/server/posthog.ts | 6 ++++++ 3 files changed, 26 insertions(+), 3 deletions(-) create mode 100644 src/server/posthog.ts diff --git a/src/server/api/routers/video.ts b/src/server/api/routers/video.ts index 7e5ab3f..d952b8e 100644 --- a/src/server/api/routers/video.ts +++ b/src/server/api/routers/video.ts @@ -41,8 +41,8 @@ export const videoRouter = createTRPCRouter({ get: publicProcedure .input(z.object({ videoId: z.string() })) .query(async ({ ctx, input }) => { - const { s3 } = ctx; - const video = await ctx.prisma.video.findUnique({ + const { s3, posthog, session, prisma } = ctx; + const video = await prisma.video.findUnique({ where: { id: input.videoId, }, @@ -54,10 +54,25 @@ export const videoRouter = createTRPCRouter({ throw new TRPCError({ code: "NOT_FOUND" }); } - if (video.userId !== ctx?.session?.user.id && !video.sharing) { + if (!session || (video.userId !== session?.user.id && !video.sharing)) { throw new TRPCError({ code: "FORBIDDEN" }); } + posthog.capture({ + distinctId: session.user.id, + event: "viewing video", + properties: { + videoId: video.id, + videoCreatedAt: video.createdAt, + videoUpdatedAt: video.updatedAt, + videoUser: video.user.id, + videoSharing: video.sharing, + videoDeleteAfterLinkExpires: video.delete_after_link_expires, + videoShareLinkExpiresAt: video.shareLinkExpiresAt, + }, + }); + void posthog.shutdownAsync(); + const getObjectCommand = new GetObjectCommand({ Bucket: env.AWS_BUCKET_NAME, Key: video.userId + "/" + video.id, diff --git a/src/server/api/trpc.ts b/src/server/api/trpc.ts index 9224b68..904eb5b 100644 --- a/src/server/api/trpc.ts +++ b/src/server/api/trpc.ts @@ -41,6 +41,7 @@ const createInnerTRPCContext = (opts: CreateContextOptions) => { session: opts.session, prisma, s3, + posthog, stripe, req: opts.req, res: opts.res, @@ -79,6 +80,7 @@ import { ZodError } from "zod"; import { s3 } from "~/server/aws/s3"; import { stripe } from "~/server/stripe"; import { type NextApiRequest, type NextApiResponse } from "next"; +import { posthog } from "~/server/posthog"; const t = initTRPC.context().create({ transformer: superjson, diff --git a/src/server/posthog.ts b/src/server/posthog.ts new file mode 100644 index 0000000..1c9869e --- /dev/null +++ b/src/server/posthog.ts @@ -0,0 +1,6 @@ +import { PostHog } from "posthog-node"; +import { env } from "~/env.mjs"; + +export const posthog = new PostHog(env.NEXT_PUBLIC_POSTHOG_KEY, { + host: env.NEXT_PUBLIC_POSTHOG_HOST, +});