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 {db} from "@/db";
|
||||||
import {and, eq} from "drizzle-orm";
|
import {and, eq} from "drizzle-orm";
|
||||||
import {Backup, Restoration} from "@/db/schema/07_database";
|
import {Backup, Restoration} from "@/db/schema/07_database";
|
||||||
import {NextResponse} from "next/server";
|
|
||||||
import {
|
import {
|
||||||
deleteFileS3Private,
|
deleteFileS3Private,
|
||||||
deleteLocalPrivate,
|
deleteLocalPrivate,
|
||||||
uploadLocalPrivate,
|
|
||||||
uploadS3Private
|
|
||||||
} from "@/features/upload/private/upload.action";
|
} from "@/features/upload/private/upload.action";
|
||||||
import {env} from "@/env.mjs";
|
import {env} from "@/env.mjs";
|
||||||
import {withUpdatedAt} from "@/db/utils";
|
import {withUpdatedAt} from "@/db/utils";
|
||||||
@@ -89,98 +86,32 @@ export const deleteBackupAction = userAction
|
|||||||
|
|
||||||
let success: boolean, message: string;
|
let success: boolean, message: string;
|
||||||
|
|
||||||
const result =
|
if (parsedInput.file) {
|
||||||
settings.storage === "local"
|
const result =
|
||||||
? await deleteLocalPrivate(parsedInput.file)
|
settings.storage === "local"
|
||||||
: await deleteFileS3Private(`${parsedInput.projectSlug}/${parsedInput.file}`, env.S3_BUCKET_NAME!);
|
? await deleteLocalPrivate(parsedInput.file)
|
||||||
|
: await deleteFileS3Private(`${parsedInput.projectSlug}/${parsedInput.file}`, env.S3_BUCKET_NAME!);
|
||||||
|
|
||||||
({success, message} = result);
|
({success, message} = result);
|
||||||
|
|
||||||
if (!success) {
|
if (!success) {
|
||||||
return {
|
return {
|
||||||
success: false,
|
success: false,
|
||||||
actionError: {
|
actionError: {
|
||||||
message: message,
|
message: message,
|
||||||
status: 404,
|
status: 404,
|
||||||
cause: "Unable to delete backup from storage",
|
cause: "Unable to delete backup from storage",
|
||||||
messageParams: {message: "Error deleting the backup"},
|
messageParams: {message: "Error deleting the backup"},
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return {
|
return {
|
||||||
success: true,
|
success: true,
|
||||||
actionSuccess: {
|
actionSuccess: {
|
||||||
message: `Backup deleted successfully (ref: ${parsedInput.backupId}).`,
|
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) {
|
} catch (error) {
|
||||||
return {
|
return {
|
||||||
success: false,
|
success: false,
|
||||||
@@ -246,7 +177,6 @@ export const rerunRestorationAction = userAction
|
|||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
// Create Restoration Action (Drizzle version)
|
|
||||||
export const createRestorationAction = userAction
|
export const createRestorationAction = userAction
|
||||||
.schema(
|
.schema(
|
||||||
z.object({
|
z.object({
|
||||||
@@ -256,7 +186,6 @@ export const createRestorationAction = userAction
|
|||||||
)
|
)
|
||||||
.action(async ({parsedInput}): Promise<ServerActionResult<Restoration>> => {
|
.action(async ({parsedInput}): Promise<ServerActionResult<Restoration>> => {
|
||||||
try {
|
try {
|
||||||
// Insert new restoration into the database
|
|
||||||
const restorationData = await db
|
const restorationData = await db
|
||||||
.insert(drizzleDb.schemas.restoration)
|
.insert(drizzleDb.schemas.restoration)
|
||||||
.values({
|
.values({
|
||||||
|
|||||||
@@ -75,8 +75,9 @@ export async function deleteFileS3Private(fileName: string, bucketName: string)
|
|||||||
*/
|
*/
|
||||||
export async function deleteLocalPrivate(fileName: string) {
|
export async function deleteLocalPrivate(fileName: string) {
|
||||||
try {
|
try {
|
||||||
|
console.log(fileName);
|
||||||
const filePath = path.join(process.cwd(), privateLocalDir, fileName);
|
const filePath = path.join(process.cwd(), privateLocalDir, fileName);
|
||||||
|
console.log(`Deleted ${filePath}`);
|
||||||
// Delete locally
|
// Delete locally
|
||||||
await unlink(filePath);
|
await unlink(filePath);
|
||||||
|
|
||||||
|
|||||||
@@ -43,27 +43,31 @@ export const deleteBackupCronAction = action
|
|||||||
}))
|
}))
|
||||||
.where(and(eq(drizzleDb.schemas.backup.id, parsedInput.backupId), eq(drizzleDb.schemas.backup.databaseId, parsedInput.databaseId)))
|
.where(and(eq(drizzleDb.schemas.backup.id, parsedInput.backupId), eq(drizzleDb.schemas.backup.databaseId, parsedInput.databaseId)))
|
||||||
|
|
||||||
let success: boolean, message: string;
|
|
||||||
|
|
||||||
const result =
|
if (parsedInput.file) {
|
||||||
settings.storage === "local"
|
let success: boolean, message: string;
|
||||||
? await deleteLocalPrivate(parsedInput.file)
|
|
||||||
: await deleteFileS3Private(`${parsedInput.projectSlug}/${parsedInput.file}`, env.S3_BUCKET_NAME!);
|
|
||||||
|
|
||||||
({success, message} = result);
|
const result =
|
||||||
|
settings.storage === "local"
|
||||||
|
? await deleteLocalPrivate(parsedInput.file)
|
||||||
|
: await deleteFileS3Private(`${parsedInput.projectSlug}/${parsedInput.file}`, env.S3_BUCKET_NAME!);
|
||||||
|
|
||||||
if (!success) {
|
({success, message} = result);
|
||||||
return {
|
|
||||||
success: false,
|
if (!success) {
|
||||||
actionError: {
|
return {
|
||||||
message: message,
|
success: false,
|
||||||
status: 404,
|
actionError: {
|
||||||
cause: "Unable to delete backup from storage",
|
message: message,
|
||||||
messageParams: {message: "Error deleting the backup"},
|
status: 404,
|
||||||
},
|
cause: "Unable to delete backup from storage",
|
||||||
};
|
messageParams: {message: "Error deleting the backup"},
|
||||||
|
},
|
||||||
|
};
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
return {
|
return {
|
||||||
success: true,
|
success: true,
|
||||||
actionSuccess: {
|
actionSuccess: {
|
||||||
|
|||||||
Reference in New Issue
Block a user