From 036f23b77787d6b75eb6b1fc4d6256b885e4a84f Mon Sep 17 00:00:00 2001 From: ZareMate <0.zaremate@gmail.com> Date: Mon, 12 May 2025 19:21:57 +0200 Subject: [PATCH] feat: implement owner check functionality and update file action components --- src/app/_components/ActionButtons.tsx | 4 ++-- src/app/_components/FileGrid.tsx | 1 + src/app/api/files/share/route.ts | 3 ++- src/app/search/page.tsx | 3 ++- src/app/share/page.tsx | 6 +++++- src/utils/checkOwner.ts | 12 ++++++++++++ 6 files changed, 24 insertions(+), 5 deletions(-) create mode 100644 src/utils/checkOwner.ts diff --git a/src/app/_components/ActionButtons.tsx b/src/app/_components/ActionButtons.tsx index 23b2f59..ba85138 100644 --- a/src/app/_components/ActionButtons.tsx +++ b/src/app/_components/ActionButtons.tsx @@ -93,12 +93,12 @@ export function FileActionsContainer({ console.error(err); } }} - className="flex items-center justify-center rounded-full bg-gray-500 p-2 hover:bg-gray-600" + className="flex items-center justify-center rounded-full bg-gray-500 p-2 hover:bg-gray-600 transition-all duration-300" > {isPublic )} diff --git a/src/app/_components/FileGrid.tsx b/src/app/_components/FileGrid.tsx index 93cccc7..eea72ff 100644 --- a/src/app/_components/FileGrid.tsx +++ b/src/app/_components/FileGrid.tsx @@ -7,6 +7,7 @@ import { env } from "~/env.js"; import { FilePreview } from "~/app/_components/FilePreview"; import { useFileActions } from "~/app/_components/FileActions"; import { FileActionsContainer } from "./ActionButtons"; +import { checkOwner } from "~/utils/checkOwner"; // Import the client component interface FileDetails { id: string; diff --git a/src/app/api/files/share/route.ts b/src/app/api/files/share/route.ts index fd7f25e..edab5e4 100644 --- a/src/app/api/files/share/route.ts +++ b/src/app/api/files/share/route.ts @@ -25,10 +25,11 @@ export async function GET(req: Request) { name: file.name, size: file.size, owner: file.uploadedBy?.name ?? null, + ownerId: file.uploadedBy?.id ?? null, ownerAvatar: file.uploadedBy?.image ?? null, uploadDate: file.uploadDate, id: file.id, - isOwner: session?.user?.id === file.uploadedById, + isOwner: null, type: file.extension, url: file.url, description: file.description, diff --git a/src/app/search/page.tsx b/src/app/search/page.tsx index a778de6..8e47ce9 100644 --- a/src/app/search/page.tsx +++ b/src/app/search/page.tsx @@ -10,6 +10,7 @@ interface FileDetails { name: string; size: number; owner: string; + ownerId: string; ownerAvatar: string | null; uploadDate: string; id: string; @@ -107,7 +108,7 @@ export default function SearchFile() { fileId={file.id} fileName={file.name} fileUrl={file.url} - isOwner={false} // Check if the user is the owner + isOwner={false} isPublic={file.isPublic} // Check if the file is public /> diff --git a/src/app/share/page.tsx b/src/app/share/page.tsx index fa13e1a..e9524bc 100644 --- a/src/app/share/page.tsx +++ b/src/app/share/page.tsx @@ -7,11 +7,14 @@ import { FileDescriptionContainer, } from "~/app/_components/ActionButtons"; // Import the client component import type { Metadata } from "next"; +import { checkOwner } from "~/utils/checkOwner"; // Import the client component +import { auth } from "~/server/auth"; interface FileDetails { name: string; size: number; owner: string; + ownerId: string; ownerAvatar: string | null; uploadDate: string; id: string; @@ -96,6 +99,7 @@ export default async function FilePreviewContainer({ } const fileDetails = await fetchFileDetails(fileId); + const session = await auth(); if (!fileDetails) { return ( @@ -167,7 +171,7 @@ export default async function FilePreviewContainer({ fileId={fileDetails.id} fileName={fileDetails.name} fileUrl={fileDetails.url} - isOwner={true} + isOwner={session?.user?.id ? await checkOwner(fileDetails.ownerId, session.user.id) : false} isPublic={fileDetails.isPublic} /> diff --git a/src/utils/checkOwner.ts b/src/utils/checkOwner.ts new file mode 100644 index 0000000..9181953 --- /dev/null +++ b/src/utils/checkOwner.ts @@ -0,0 +1,12 @@ +import type { Session } from "next-auth"; + +export const checkOwner = async (id: string , session: string) => { + console.log("Session:", session); + console.log("File ID:", id); + if (session) { + console.log("Session User ID:", session); + console.log("File Owner ID:", id); + return id === session; + } + return false; +} \ No newline at end of file