BREAKING: postgres + saas

This commit is contained in:
Vasily Zubarev
2025-04-03 13:07:54 +02:00
parent 54a892ddb0
commit f523b1f8ba
136 changed files with 3971 additions and 1563 deletions

View File

@@ -0,0 +1,68 @@
"use server"
import { getCurrentUser } from "@/lib/auth"
import { EXPORT_AND_IMPORT_FIELD_MAP } from "@/models/export_and_import"
import { createTransaction } from "@/models/transactions"
import { parse } from "@fast-csv/parse"
import { revalidatePath } from "next/cache"
export async function parseCSVAction(prevState: any, formData: FormData) {
const file = formData.get("file") as File
if (!file) {
return { success: false, error: "No file uploaded" }
}
if (!file.name.toLowerCase().endsWith(".csv")) {
return { success: false, error: "Only CSV files are allowed" }
}
try {
const buffer = Buffer.from(await file.arrayBuffer())
const rows: string[][] = []
const parser = parse()
.on("data", (row) => rows.push(row))
.on("error", (error) => {
throw error
})
parser.write(buffer)
parser.end()
// Wait for parsing to complete
await new Promise((resolve) => parser.on("end", resolve))
return { success: true, data: rows }
} catch (error) {
console.error("Error parsing CSV:", error)
return { success: false, error: "Failed to parse CSV file" }
}
}
export async function saveTransactionsAction(prevState: any, formData: FormData) {
const user = await getCurrentUser()
try {
const rows = JSON.parse(formData.get("rows") as string) as Record<string, unknown>[]
for (const row of rows) {
const transactionData: Record<string, unknown> = {}
for (const [fieldCode, value] of Object.entries(row)) {
const fieldDef = EXPORT_AND_IMPORT_FIELD_MAP[fieldCode]
if (fieldDef?.import) {
transactionData[fieldCode] = await fieldDef.import(user.id, value as string)
} else {
transactionData[fieldCode] = value as string
}
}
await createTransaction(user.id, transactionData)
}
revalidatePath("/import/csv")
revalidatePath("/transactions")
return { success: true }
} catch (error) {
console.error("Error saving transactions:", error)
return { success: false, error: "Failed to save transactions: " + error }
}
}