Files
TaxHacker/models/files.ts
2025-04-04 14:52:48 +02:00

86 lines
1.8 KiB
TypeScript

"use server"
import { prisma } from "@/lib/db"
import { unlink } from "fs/promises"
import path from "path"
import { cache } from "react"
import { getTransactionById } from "./transactions"
export const getUnsortedFiles = cache(async (userId: string) => {
return await prisma.file.findMany({
where: {
isReviewed: false,
userId,
},
orderBy: {
createdAt: "desc",
},
})
})
export const getUnsortedFilesCount = cache(async (userId: string) => {
return await prisma.file.count({
where: {
isReviewed: false,
userId,
},
})
})
export const getFileById = cache(async (id: string, userId: string) => {
return await prisma.file.findFirst({
where: { id, userId },
})
})
export const getFilesByTransactionId = cache(async (id: string, userId: string) => {
const transaction = await getTransactionById(id, userId)
if (transaction && transaction.files) {
return await prisma.file.findMany({
where: {
id: {
in: transaction.files as string[],
},
userId,
},
orderBy: {
createdAt: "asc",
},
})
}
return []
})
export const createFile = async (userId: string, data: any) => {
return await prisma.file.create({
data: {
...data,
userId,
},
})
}
export const updateFile = async (id: string, userId: string, data: any) => {
return await prisma.file.update({
where: { id, userId },
data,
})
}
export const deleteFile = async (id: string, userId: string) => {
const file = await getFileById(id, userId)
if (!file) {
return
}
try {
await unlink(path.resolve(path.normalize(file.path)))
} catch (error) {
console.error("Error deleting file:", error)
}
return await prisma.file.delete({
where: { id, userId },
})
}