feat: calculate used storage

This commit is contained in:
Vasily Zubarev
2025-04-10 15:14:54 +02:00
parent ea8a3295e9
commit 62bad46e58
13 changed files with 87 additions and 25 deletions

View File

@@ -2,8 +2,9 @@
import { ActionState } from "@/lib/actions"
import { getCurrentUser } from "@/lib/auth"
import { getUserUploadsDirectory, unsortedFilePath } from "@/lib/files"
import { getDirectorySize, getUserUploadsDirectory, unsortedFilePath } from "@/lib/files"
import { createFile } from "@/models/files"
import { updateUser } from "@/models/users"
import { randomUUID } from "crypto"
import { mkdir, writeFile } from "fs/promises"
import { revalidatePath } from "next/cache"
@@ -50,6 +51,10 @@ export async function uploadFilesAction(formData: FormData): Promise<ActionState
})
)
// Update user storage used
const storageUsed = await getDirectorySize(await getUserUploadsDirectory(user))
await updateUser(user.id, { storageUsed })
console.log("uploadedFiles", uploadedFiles)
revalidatePath("/unsorted")

View File

@@ -32,18 +32,21 @@ export default async function RootLayout({ children }: { children: React.ReactNo
const user = await getCurrentUser()
const unsortedFilesCount = await getUnsortedFilesCount(user.id)
const userProfile = {
id: user.id,
name: user.name || "",
email: user.email,
avatar: user.avatar || undefined,
storageUsed: user.storageUsed || 0,
}
return (
<NotificationProvider>
<ScreenDropArea>
<SidebarProvider>
<MobileMenu unsortedFilesCount={unsortedFilesCount} />
<AppSidebar
profile={{
id: user.id,
name: user.name || "",
email: user.email,
avatar: user.avatar || undefined,
}}
profile={userProfile}
unsortedFilesCount={unsortedFilesCount}
isSelfHosted={config.selfHosted.isEnabled}
/>

View File

@@ -3,7 +3,7 @@
import { transactionFormSchema } from "@/forms/transactions"
import { ActionState } from "@/lib/actions"
import { getCurrentUser } from "@/lib/auth"
import { getTransactionFileUploadPath, getUserUploadsDirectory } from "@/lib/files"
import { getDirectorySize, getTransactionFileUploadPath, getUserUploadsDirectory } from "@/lib/files"
import { updateField } from "@/models/fields"
import { createFile, deleteFile } from "@/models/files"
import {
@@ -14,6 +14,7 @@ import {
updateTransaction,
updateTransactionFiles,
} from "@/models/transactions"
import { updateUser } from "@/models/users"
import { Transaction } from "@prisma/client"
import { randomUUID } from "crypto"
import { mkdir, writeFile } from "fs/promises"
@@ -106,6 +107,11 @@ export async function deleteTransactionFileAction(
)
await deleteFile(fileId, user.id)
// Update user storage used
const storageUsed = await getDirectorySize(await getUserUploadsDirectory(user))
await updateUser(user.id, { storageUsed })
revalidatePath(`/transactions/${transactionId}`)
return { success: true, data: transaction }
}
@@ -169,6 +175,10 @@ export async function uploadTransactionFilesAction(formData: FormData): Promise<
: fileRecords.map((file) => file.id)
)
// Update user storage used
const storageUsed = await getDirectorySize(await getUserUploadsDirectory(user))
await updateUser(user.id, { storageUsed })
revalidatePath(`/transactions/${transactionId}`)
return { success: true }
} catch (error) {