From 4c64aeeb35d07a39909ef54f4a5827449740038a Mon Sep 17 00:00:00 2001 From: MarconLP <13001502+MarconLP@users.noreply.github.com> Date: Sun, 16 Apr 2023 01:01:50 +0200 Subject: [PATCH] add api route to check for expired videos --- src/pages/api/check-expired-videos.ts | 58 +++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 src/pages/api/check-expired-videos.ts diff --git a/src/pages/api/check-expired-videos.ts b/src/pages/api/check-expired-videos.ts new file mode 100644 index 0000000..7ad4d99 --- /dev/null +++ b/src/pages/api/check-expired-videos.ts @@ -0,0 +1,58 @@ +import type { NextApiRequest, NextApiResponse } from "next"; +import { prisma } from "~/server/db"; +import { DeleteObjectCommand } from "@aws-sdk/client-s3"; +import { env } from "~/env.mjs"; +import { s3 } from "~/server/aws/s3"; + +export default async function handler( + req: NextApiRequest, + res: NextApiResponse +) { + const expiredVideos = await prisma.video.findMany({ + where: { + shareLinkExpiresAt: { + lte: new Date(), + }, + delete_after_link_expires: true, + sharing: true, + }, + include: { + user: true, + }, + }); + + const updatedVideos = await prisma.video.updateMany({ + where: { + shareLinkExpiresAt: { + lte: new Date(), + }, + delete_after_link_expires: false, + sharing: true, + }, + data: { + sharing: false, + }, + }); + + const expiredVideoIds = expiredVideos.map((x) => x.id); + expiredVideos.map(async (video) => { + const deleteObjectCommand = new DeleteObjectCommand({ + Bucket: env.AWS_BUCKET_NAME, + Key: video.user.id + "/" + video.id, + }); + + return await s3.send(deleteObjectCommand); + }); + + const deletedVideos = await prisma.video.deleteMany({ + where: { + id: { + in: expiredVideoIds, + }, + }, + }); + + res + .status(200) + .json({ name: "John Doe", expiredVideos, updatedVideos, deletedVideos }); +}