files.ts 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. "use server";
  2. import { PrismaClient } from "@prisma/client";
  3. import { revalidatePath } from "next/cache";
  4. const prisma = new PrismaClient();
  5. export interface FileData {
  6. id: string;
  7. filename: string;
  8. mimetype: string;
  9. size: number;
  10. createdAt: Date;
  11. updatedAt: Date;
  12. }
  13. export async function getFiles(): Promise<FileData[]> {
  14. try {
  15. const files = await prisma.file.findMany({
  16. select: {
  17. id: true,
  18. filename: true,
  19. mimetype: true,
  20. size: true,
  21. createdAt: true,
  22. updatedAt: true,
  23. },
  24. orderBy: {
  25. createdAt: 'desc',
  26. },
  27. });
  28. return files;
  29. } catch (error) {
  30. console.error("Error listing files:", error);
  31. throw new Error("Failed to list files");
  32. } finally {
  33. await prisma.$disconnect();
  34. }
  35. }
  36. export async function downloadFile(id: string): Promise<{
  37. data: Uint8Array;
  38. filename: string;
  39. mimetype: string;
  40. size: number;
  41. } | null> {
  42. try {
  43. const file = await prisma.file.findUnique({
  44. where: { id },
  45. });
  46. if (!file) {
  47. return null;
  48. }
  49. return {
  50. data: file.data,
  51. filename: file.filename,
  52. mimetype: file.mimetype,
  53. size: file.size,
  54. };
  55. } catch (error) {
  56. console.error("Error retrieving file:", error);
  57. throw new Error("Failed to retrieve file");
  58. } finally {
  59. await prisma.$disconnect();
  60. }
  61. }
  62. export async function deleteFile(id: string): Promise<boolean> {
  63. try {
  64. const file = await prisma.file.findUnique({
  65. where: { id },
  66. });
  67. if (!file) {
  68. return false;
  69. }
  70. await prisma.file.delete({
  71. where: { id },
  72. });
  73. revalidatePath('/files');
  74. revalidatePath('/dashboard');
  75. return true;
  76. } catch (error) {
  77. console.error("Error deleting file:", error);
  78. throw new Error("Failed to delete file");
  79. } finally {
  80. await prisma.$disconnect();
  81. }
  82. }