mirror of
https://github.com/Portabase/portabase.git
synced 2026-07-14 11:16:13 +02:00
fix: delete backup crash if no file.
This commit is contained in:
@@ -7,12 +7,9 @@ import * as drizzleDb from "@/db";
|
||||
import {db} from "@/db";
|
||||
import {and, eq} from "drizzle-orm";
|
||||
import {Backup, Restoration} from "@/db/schema/07_database";
|
||||
import {NextResponse} from "next/server";
|
||||
import {
|
||||
deleteFileS3Private,
|
||||
deleteLocalPrivate,
|
||||
uploadLocalPrivate,
|
||||
uploadS3Private
|
||||
} from "@/features/upload/private/upload.action";
|
||||
import {env} from "@/env.mjs";
|
||||
import {withUpdatedAt} from "@/db/utils";
|
||||
@@ -89,98 +86,32 @@ export const deleteBackupAction = userAction
|
||||
|
||||
let success: boolean, message: string;
|
||||
|
||||
const result =
|
||||
settings.storage === "local"
|
||||
? await deleteLocalPrivate(parsedInput.file)
|
||||
: await deleteFileS3Private(`${parsedInput.projectSlug}/${parsedInput.file}`, env.S3_BUCKET_NAME!);
|
||||
if (parsedInput.file) {
|
||||
const result =
|
||||
settings.storage === "local"
|
||||
? await deleteLocalPrivate(parsedInput.file)
|
||||
: await deleteFileS3Private(`${parsedInput.projectSlug}/${parsedInput.file}`, env.S3_BUCKET_NAME!);
|
||||
|
||||
({success, message} = result);
|
||||
({success, message} = result);
|
||||
|
||||
if (!success) {
|
||||
return {
|
||||
success: false,
|
||||
actionError: {
|
||||
message: message,
|
||||
status: 404,
|
||||
cause: "Unable to delete backup from storage",
|
||||
messageParams: {message: "Error deleting the backup"},
|
||||
},
|
||||
};
|
||||
if (!success) {
|
||||
return {
|
||||
success: false,
|
||||
actionError: {
|
||||
message: message,
|
||||
status: 404,
|
||||
cause: "Unable to delete backup from storage",
|
||||
messageParams: {message: "Error deleting the backup"},
|
||||
},
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
return {
|
||||
success: true,
|
||||
actionSuccess: {
|
||||
message: `Backup deleted successfully (ref: ${parsedInput.backupId}).`,
|
||||
},
|
||||
};
|
||||
|
||||
|
||||
// const [settings] = await db.select().from(drizzleDb.schemas.setting).where(eq(drizzleDb.schemas.setting.name, "system")).limit(1);
|
||||
// if (!settings) {
|
||||
// return {
|
||||
// success: false,
|
||||
// actionError: {
|
||||
// message: "No settings found.",
|
||||
// status: 404,
|
||||
// cause: "No settings found.",
|
||||
// messageParams: {message: "Error deleting the backup"},
|
||||
// },
|
||||
// };
|
||||
// }
|
||||
//
|
||||
//
|
||||
// let success: boolean, message: string;
|
||||
//
|
||||
// const result =
|
||||
// settings.storage === "local"
|
||||
// ? await deleteLocalPrivate(parsedInput.file)
|
||||
// : await deleteFileS3Private(`${parsedInput.projectSlug}/${parsedInput.file}`, env.S3_BUCKET_NAME!);
|
||||
//
|
||||
// ({success, message} = result);
|
||||
//
|
||||
// if (!success) {
|
||||
// return {
|
||||
// success: false,
|
||||
// actionError: {
|
||||
// message: message,
|
||||
// status: 404,
|
||||
// cause: "Unable to delete backup from storage",
|
||||
// messageParams: {message: "Error deleting the backup"},
|
||||
// },
|
||||
// };
|
||||
// }
|
||||
//
|
||||
// await db
|
||||
// .delete(drizzleDb.schemas.backup)
|
||||
// .where(and(eq(drizzleDb.schemas.backup.id, parsedInput.backupId), eq(drizzleDb.schemas.backup.databaseId, parsedInput.databaseId)))
|
||||
// .execute();
|
||||
//
|
||||
// const backupExists = await db
|
||||
// .select()
|
||||
// .from(drizzleDb.schemas.backup)
|
||||
// .where(and(eq(drizzleDb.schemas.backup.id, parsedInput.backupId), eq(drizzleDb.schemas.backup.databaseId, parsedInput.databaseId)))
|
||||
// .execute();
|
||||
//
|
||||
//
|
||||
// if (backupExists.length === 0) {
|
||||
// return {
|
||||
// success: true,
|
||||
// actionSuccess: {
|
||||
// message: "Backup deleted successfully.",
|
||||
// },
|
||||
// };
|
||||
// } else {
|
||||
// return {
|
||||
// success: false,
|
||||
// actionError: {
|
||||
// message: "Backup not found or already deleted.",
|
||||
// status: 404,
|
||||
// cause: "Backup could not be deleted (from database or remote storage).",
|
||||
// messageParams: {message: "Error deleting the backup"},
|
||||
// },
|
||||
// };
|
||||
// }
|
||||
} catch (error) {
|
||||
return {
|
||||
success: false,
|
||||
@@ -246,7 +177,6 @@ export const rerunRestorationAction = userAction
|
||||
});
|
||||
|
||||
|
||||
// Create Restoration Action (Drizzle version)
|
||||
export const createRestorationAction = userAction
|
||||
.schema(
|
||||
z.object({
|
||||
@@ -256,7 +186,6 @@ export const createRestorationAction = userAction
|
||||
)
|
||||
.action(async ({parsedInput}): Promise<ServerActionResult<Restoration>> => {
|
||||
try {
|
||||
// Insert new restoration into the database
|
||||
const restorationData = await db
|
||||
.insert(drizzleDb.schemas.restoration)
|
||||
.values({
|
||||
|
||||
@@ -75,8 +75,9 @@ export async function deleteFileS3Private(fileName: string, bucketName: string)
|
||||
*/
|
||||
export async function deleteLocalPrivate(fileName: string) {
|
||||
try {
|
||||
console.log(fileName);
|
||||
const filePath = path.join(process.cwd(), privateLocalDir, fileName);
|
||||
|
||||
console.log(`Deleted ${filePath}`);
|
||||
// Delete locally
|
||||
await unlink(filePath);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user