Skip to content

Commit e96c267

Browse files
committed
Add Folder Id when Uploadin a File
1 parent c592857 commit e96c267

3 files changed

Lines changed: 27 additions & 7 deletions

File tree

src/app/api/uploadthing/core.ts

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,35 @@
1+
/* eslint-disable @typescript-eslint/only-throw-error */
2+
13
import { auth } from "@clerk/nextjs/server";
24
import { createUploadthing, type FileRouter } from "uploadthing/next";
35
import { UploadThingError } from "uploadthing/server";
6+
import { z } from "zod";
47

58
import * as mutations from "~/server/db/mutations";
9+
import * as queries from "~/server/db/queries";
610

711
const f = createUploadthing();
812

913
export const ourFileRouter = {
1014
imageUploader: f({ image: { maxFileSize: "4MB", maxFileCount: 1 } })
11-
.middleware(async () => {
15+
.input(z.object({ folderId: z.number() }))
16+
.middleware(async ({ input }) => {
1217
const user = await auth();
13-
14-
// eslint-disable-next-line @typescript-eslint/only-throw-error
1518
if (!user.userId) throw new UploadThingError("Unauthorized");
1619

17-
return { userId: user.userId };
20+
const folder = await queries.getFolderById(input.folderId);
21+
if (!folder) throw new UploadThingError("Folder not found");
22+
23+
if (folder.ownerId !== user.userId)
24+
throw new UploadThingError("Unauthorized");
25+
26+
return { userId: user.userId, parent: folder.id };
1827
})
1928
.onUploadComplete(async ({ metadata, file }) => {
2029
console.log("Upload complete for userId:", metadata.userId);
2130
console.log("file url", file.ufsUrl);
2231

23-
const uploadedFile = { ...file, parent: 0 };
32+
const uploadedFile = { ...file, parent: metadata.parent };
2433
await mutations.createFile(uploadedFile, metadata.userId);
2534

2635
return { uploadedBy: metadata.userId };

src/server/db/mutations.ts

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
import { db } from "~/server/db";
22
import { type File, files_table as filesSchema } from "~/server/db/schema";
33

4-
export function createFile(file: Omit<File, "id" | "parent">, _userId: string) {
5-
return db.insert(filesSchema).values({ ...file, parent: 1 });
4+
export function createFile(
5+
file: Pick<File, "name" | "size" | "url" | "parent">,
6+
userId: string,
7+
) {
8+
return db.insert(filesSchema).values({ ...file, ownerId: userId });
69
}

src/server/db/queries.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,14 @@ export function getAllFolders(folderId: number) {
3333
.where(eq(folderSchema.parent, folderId));
3434
}
3535

36+
export async function getFolderById(folderId: number) {
37+
const folders = await db
38+
.select()
39+
.from(folderSchema)
40+
.where(eq(folderSchema.id, folderId));
41+
return folders[0];
42+
}
43+
3644
export function getAllFiles(folderId: number) {
3745
return db.select().from(fileSchema).where(eq(fileSchema.parent, folderId));
3846
}

0 commit comments

Comments
 (0)