diff --git a/app/settings/backups/files/route.ts b/app/settings/backups/data/route.ts similarity index 64% rename from app/settings/backups/files/route.ts rename to app/settings/backups/data/route.ts index 6ec0211..61a5c8b 100644 --- a/app/settings/backups/files/route.ts +++ b/app/settings/backups/data/route.ts @@ -1,3 +1,4 @@ +import { DATABASE_FILE } from "@/lib/db" import { FILE_UPLOAD_PATH } from "@/lib/files" import fs, { readdirSync } from "fs" import JSZip from "jszip" @@ -7,22 +8,31 @@ import path from "path" export async function GET(request: Request) { try { const zip = new JSZip() - const folder = zip.folder("uploads") - if (!folder) { + const rootFolder = zip.folder("data") + if (!rootFolder) { console.error("Failed to create zip folder") return new NextResponse("Internal Server Error", { status: 500 }) } - const files = getAllFilePaths(FILE_UPLOAD_PATH) - files.forEach((file) => { - folder.file(file.replace(FILE_UPLOAD_PATH, ""), fs.readFileSync(file)) + const databaseFile = fs.readFileSync(DATABASE_FILE) + rootFolder.file("database.sqlite", databaseFile) + + const uploadsFolder = rootFolder.folder("uploads") + if (!uploadsFolder) { + console.error("Failed to create uploads folder") + return new NextResponse("Internal Server Error", { status: 500 }) + } + + const uploadedFiles = getAllFilePaths(FILE_UPLOAD_PATH) + uploadedFiles.forEach((file) => { + uploadsFolder.file(file.replace(FILE_UPLOAD_PATH, ""), fs.readFileSync(file)) }) const archive = await zip.generateAsync({ type: "blob" }) return new NextResponse(archive, { headers: { "Content-Type": "application/octet-stream", - "Content-Disposition": `attachment; filename="uploads.zip"`, + "Content-Disposition": `attachment; filename="data.zip"`, }, }) } catch (error) { diff --git a/app/settings/backups/database/route.ts b/app/settings/backups/database/route.ts deleted file mode 100644 index 65f5240..0000000 --- a/app/settings/backups/database/route.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { DATABASE_FILE } from "@/lib/db" -import fs from "fs" -import { NextResponse } from "next/server" - -export async function GET(request: Request) { - try { - const file = fs.readFileSync(DATABASE_FILE) - return new NextResponse(file, { - headers: { - "Content-Type": "application/octet-stream", - "Content-Disposition": `attachment; filename="database.sqlite"`, - }, - }) - } catch (error) { - console.error("Error exporting database:", error) - return new NextResponse("Internal Server Error", { status: 500 }) - } -} diff --git a/app/settings/backups/page.tsx b/app/settings/backups/page.tsx index 617ee85..85955fc 100644 --- a/app/settings/backups/page.tsx +++ b/app/settings/backups/page.tsx @@ -3,7 +3,7 @@ import { FormError } from "@/components/forms/error" import { Button } from "@/components/ui/button" import { Card } from "@/components/ui/card" -import { Download, Loader2 } from "lucide-react" +import { Download } from "lucide-react" import Link from "next/link" import { useActionState } from "react" import { restoreBackupAction } from "./actions" @@ -16,29 +16,25 @@ export default function BackupSettingsPage() {