30 lines
761 B
TypeScript
30 lines
761 B
TypeScript
import { NextResponse } from "next/server";
|
|
import { prisma } from "@/lib/db";
|
|
import { getSessionUser } from "@/lib/auth";
|
|
import { getSignedDownloadUrl } from "@/lib/r2";
|
|
|
|
type Props = {
|
|
params: Promise<{ id: string }>;
|
|
};
|
|
|
|
export async function GET(_req: Request, { params }: Props) {
|
|
const session = await getSessionUser();
|
|
if (!session) {
|
|
return NextResponse.json({ error: "Unauthorized" }, { status: 401 });
|
|
}
|
|
|
|
const { id } = await params;
|
|
|
|
const file = await prisma.file.findFirst({
|
|
where: { id, userId: session.userId },
|
|
});
|
|
|
|
if (!file) {
|
|
return NextResponse.json({ error: "File not found" }, { status: 404 });
|
|
}
|
|
|
|
const url = await getSignedDownloadUrl(file.key);
|
|
return NextResponse.json({ url, name: file.name });
|
|
}
|
|
|