"use server"; import { PrismaClient } from "@prisma/client"; import { revalidatePath } from "next/cache"; const prisma = new PrismaClient(); export interface FileData { id: string; filename: string; mimetype: string; size: number; createdAt: Date; updatedAt: Date; } export async function getFiles(): Promise { try { const files = await prisma.file.findMany({ select: { id: true, filename: true, mimetype: true, size: true, createdAt: true, updatedAt: true, }, orderBy: { createdAt: 'desc', }, }); return files; } catch (error) { console.error("Error listing files:", error); throw new Error("Failed to list files"); } finally { await prisma.$disconnect(); } } export async function downloadFile(id: string): Promise<{ data: Uint8Array; filename: string; mimetype: string; size: number; } | null> { try { const file = await prisma.file.findUnique({ where: { id }, }); if (!file) { return null; } return { data: file.data, filename: file.filename, mimetype: file.mimetype, size: file.size, }; } catch (error) { console.error("Error retrieving file:", error); throw new Error("Failed to retrieve file"); } finally { await prisma.$disconnect(); } } export async function deleteFile(id: string): Promise { try { const file = await prisma.file.findUnique({ where: { id }, }); if (!file) { return false; } await prisma.file.delete({ where: { id }, }); revalidatePath('/files'); revalidatePath('/dashboard'); return true; } catch (error) { console.error("Error deleting file:", error); throw new Error("Failed to delete file"); } finally { await prisma.$disconnect(); } }