| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126 |
- "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;
- userId: string | null;
- createdAt: Date;
- updatedAt: Date;
- }
- export async function getFiles(): Promise<FileData[]> {
- try {
- const files = await prisma.file.findMany({
- select: {
- id: true,
- filename: true,
- mimetype: true,
- size: true,
- userId: 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 getFilesByUserId(userId: string): Promise<FileData[]> {
- try {
- const files = await prisma.file.findMany({
- where: {
- userId: userId,
- },
- select: {
- id: true,
- filename: true,
- mimetype: true,
- size: true,
- userId: true,
- createdAt: true,
- updatedAt: true,
- },
- orderBy: {
- createdAt: 'desc',
- },
- });
- return files;
- } catch (error) {
- console.error("Error listing files by user:", error);
- throw new Error("Failed to list files by user");
- } 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<boolean> {
- 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();
- }
- }
|