deleteFile.tsx 1.0 KB

123456789101112131415161718192021222324252627282930313233343536373839
  1. import { Elysia, t } from "elysia";
  2. import { userService } from "./user";
  3. import { unlink } from "node:fs/promises";
  4. import { WEBROOT } from "../helpers/env";
  5. import { uploadsDir } from "..";
  6. import db from "../db/db";
  7. export const deleteFile = new Elysia()
  8. .use(userService)
  9. .post(
  10. "/delete",
  11. async ({ body, redirect, jwt, cookie: { auth, jobId } }) => {
  12. if (!auth?.value) {
  13. return redirect(`${WEBROOT}/login`, 302);
  14. }
  15. const user = await jwt.verify(auth.value);
  16. if (!user) {
  17. return redirect(`${WEBROOT}/login`, 302);
  18. }
  19. if (!jobId?.value) {
  20. return redirect(`${WEBROOT}/`, 302);
  21. }
  22. const existingJob = await db
  23. .query("SELECT * FROM jobs WHERE id = ? AND user_id = ?")
  24. .get(jobId.value, user.id);
  25. if (!existingJob) {
  26. return redirect(`${WEBROOT}/`, 302);
  27. }
  28. const userUploadsDir = `${uploadsDir}${user.id}/${jobId.value}/`;
  29. await unlink(`${userUploadsDir}${body.filename}`);
  30. },
  31. { body: t.Object({ filename: t.String() }) },
  32. )