mirror of
https://github.com/Portabase/portabase.git
synced 2026-07-14 11:16:13 +02:00
Working on table data in detabase backups.
This commit is contained in:
+2
-3
@@ -21,9 +21,6 @@ export default async function RoutePage(props: PageParams<{
|
|||||||
}>) {
|
}>) {
|
||||||
const {projectId, databaseId} = await props.params;
|
const {projectId, databaseId} = await props.params;
|
||||||
|
|
||||||
console.log("ici", projectId);
|
|
||||||
console.log("laa", databaseId);
|
|
||||||
|
|
||||||
const organization = await getOrganization({});
|
const organization = await getOrganization({});
|
||||||
|
|
||||||
if (!organization) {
|
if (!organization) {
|
||||||
@@ -100,7 +97,9 @@ export default async function RoutePage(props: PageParams<{
|
|||||||
<BackupButton disable={isAlreadyBackup} databaseId={databaseId}/>
|
<BackupButton disable={isAlreadyBackup} databaseId={databaseId}/>
|
||||||
</PageActions>
|
</PageActions>
|
||||||
</div>
|
</div>
|
||||||
|
{dbItem.description && (
|
||||||
<PageDescription className="mt-5 sm:mt-0">{dbItem.description}</PageDescription>
|
<PageDescription className="mt-5 sm:mt-0">{dbItem.description}</PageDescription>
|
||||||
|
)}
|
||||||
<PageContent className="flex flex-col w-full h-full">
|
<PageContent className="flex flex-col w-full h-full">
|
||||||
<DatabaseKpi successRate={successRate} database={dbItem} availableBackups={availableBackups}
|
<DatabaseKpi successRate={successRate} database={dbItem} availableBackups={availableBackups}
|
||||||
totalBackups={totalBackups}/>
|
totalBackups={totalBackups}/>
|
||||||
|
|||||||
+1
-1
@@ -54,7 +54,7 @@ services:
|
|||||||
|
|
||||||
s3:
|
s3:
|
||||||
container_name: s3-portabase-dev
|
container_name: s3-portabase-dev
|
||||||
image: minio/minio:latest
|
image: docker.io/bitnami/minio:latest
|
||||||
ports:
|
ports:
|
||||||
- "9000:9000"
|
- "9000:9000"
|
||||||
- "9001:9001"
|
- "9001:9001"
|
||||||
|
|||||||
@@ -1,14 +1,13 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
echo " ____ __ __ "
|
#echo " ____ __ __ "
|
||||||
echo " / __ \____ _____/ /_____ _/ /_ ____ _________ "
|
#echo " / __ \____ _____/ /_____ _/ /_ ____ _________ "
|
||||||
echo " / /_/ / __ \/ ___/ __/ __ / __ \/ __ / ___/ _ \ "
|
#echo " / /_/ / __ \/ ___/ __/ __ / __ \/ __ / ___/ _ \ "
|
||||||
echo " / ____/ /_/ / / / /_/ /_/ / /_/ / /_/ (__ ) __/ "
|
#echo " / ____/ /_/ / / / /_/ /_/ / /_/ / /_/ (__ ) __/ "
|
||||||
echo " /_/ \____/_/ \__/\__,_/_.___/\__,_/____/\___/ "
|
#echo " /_/ \____/_/ \__/\__,_/_.___/\__,_/____/\___/ "
|
||||||
echo " "
|
#echo " "
|
||||||
echo " Community Edition v1.1.1 "
|
#echo " Community Edition v1.1.1 "
|
||||||
echo " "
|
#echo " "
|
||||||
|
|
||||||
|
|
||||||
node server.js
|
node server.js
|
||||||
|
|
||||||
|
|||||||
@@ -141,6 +141,9 @@ export function backupColumns(isAlreadyRestore: boolean, settings: Setting, data
|
|||||||
};
|
};
|
||||||
|
|
||||||
return (
|
return (
|
||||||
|
<>
|
||||||
|
{rowData.deletedAt == null && (
|
||||||
|
|
||||||
<DropdownMenu>
|
<DropdownMenu>
|
||||||
<DropdownMenuTrigger asChild>
|
<DropdownMenuTrigger asChild>
|
||||||
<Button variant="ghost" className="h-8 w-8 p-0">
|
<Button variant="ghost" className="h-8 w-8 p-0">
|
||||||
@@ -152,7 +155,8 @@ export function backupColumns(isAlreadyRestore: boolean, settings: Setting, data
|
|||||||
<DropdownMenuLabel>Actions</DropdownMenuLabel>
|
<DropdownMenuLabel>Actions</DropdownMenuLabel>
|
||||||
{status == "success" ? (
|
{status == "success" ? (
|
||||||
<>
|
<>
|
||||||
<TooltipCustom disabled={isAlreadyRestore} text="Already a restoration waiting">
|
<TooltipCustom disabled={isAlreadyRestore}
|
||||||
|
text="Already a restoration waiting">
|
||||||
<DropdownMenuItem
|
<DropdownMenuItem
|
||||||
disabled={mutationRestore.isPending || isAlreadyRestore}
|
disabled={mutationRestore.isPending || isAlreadyRestore}
|
||||||
onClick={async () => {
|
onClick={async () => {
|
||||||
@@ -182,6 +186,9 @@ export function backupColumns(isAlreadyRestore: boolean, settings: Setting, data
|
|||||||
</DropdownMenuItem>
|
</DropdownMenuItem>
|
||||||
</DropdownMenuContent>
|
</DropdownMenuContent>
|
||||||
</DropdownMenu>
|
</DropdownMenu>
|
||||||
|
)}
|
||||||
|
</>
|
||||||
|
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -1,13 +1,13 @@
|
|||||||
import * as drizzleDb from "@/db";
|
import * as drizzleDb from "@/db";
|
||||||
import {db} from "@/db";
|
import {db} from "@/db";
|
||||||
import {desc, eq} from "drizzle-orm";
|
import {and, desc, eq, isNull} from "drizzle-orm";
|
||||||
import {deleteBackupCronAction} from "@/lib/tasks/database/utils/delete";
|
import {deleteBackupCronAction} from "@/lib/tasks/database/utils/delete";
|
||||||
|
|
||||||
export async function enforceRetentionCount(databaseId: string, count: number) {
|
export async function enforceRetentionCount(databaseId: string, count: number) {
|
||||||
const backups = await db.query.backup.findMany({
|
const backups = await db.query.backup.findMany({
|
||||||
where: eq(drizzleDb.schemas.backup.databaseId, databaseId),
|
where: and(eq(drizzleDb.schemas.backup.databaseId, databaseId), isNull(drizzleDb.schemas.backup.deletedAt)),
|
||||||
orderBy: desc(drizzleDb.schemas.backup.createdAt),
|
orderBy: desc(drizzleDb.schemas.backup.createdAt),
|
||||||
with:{
|
with: {
|
||||||
database: {
|
database: {
|
||||||
with: {
|
with: {
|
||||||
project: true
|
project: true
|
||||||
@@ -38,6 +38,5 @@ export async function enforceRetentionCount(databaseId: string, count: number) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -8,6 +8,7 @@ import * as drizzleDb from "@/db";
|
|||||||
import {and, eq} from "drizzle-orm";
|
import {and, eq} from "drizzle-orm";
|
||||||
import {deleteFileS3Private, deleteLocalPrivate} from "@/features/upload/private/upload.action";
|
import {deleteFileS3Private, deleteLocalPrivate} from "@/features/upload/private/upload.action";
|
||||||
import {env} from "@/env.mjs";
|
import {env} from "@/env.mjs";
|
||||||
|
import {withUpdatedAt} from "@/db/utils";
|
||||||
|
|
||||||
|
|
||||||
export const deleteBackupCronAction = action
|
export const deleteBackupCronAction = action
|
||||||
@@ -35,16 +36,13 @@ export const deleteBackupCronAction = action
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
await db
|
await db
|
||||||
.update(drizzleDb.schemas.backup)
|
.update(drizzleDb.schemas.backup)
|
||||||
.set({
|
.set(withUpdatedAt({
|
||||||
deletedAt: new Date(),
|
deletedAt: new Date(),
|
||||||
})
|
}))
|
||||||
.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;
|
let success: boolean, message: string;
|
||||||
|
|
||||||
const result =
|
const result =
|
||||||
@@ -71,12 +69,10 @@ 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)))
|
||||||
// .execute();
|
// .execute();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
return {
|
return {
|
||||||
success: true,
|
success: true,
|
||||||
actionSuccess: {
|
actionSuccess: {
|
||||||
message: "Backup deleted successfully.",
|
message: `Backup deleted successfully (${parsedInput.backupId}).`,
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -85,7 +81,7 @@ export const deleteBackupCronAction = action
|
|||||||
return {
|
return {
|
||||||
success: false,
|
success: false,
|
||||||
actionError: {
|
actionError: {
|
||||||
message: "Failed to delete backup.",
|
message: `Failed to delete backup(${parsedInput.backupId}).`,
|
||||||
status: 500,
|
status: 500,
|
||||||
cause: error instanceof Error ? error.message : "Unknown error",
|
cause: error instanceof Error ? error.message : "Unknown error",
|
||||||
messageParams: {message: "Error deleting the backup"},
|
messageParams: {message: "Error deleting the backup"},
|
||||||
|
|||||||
Reference in New Issue
Block a user