diff --git a/src/components/wrappers/dashboard/database/import/import-modal.tsx b/src/components/wrappers/dashboard/database/import/import-modal.tsx
index bcb5e659..2b1b213d 100644
--- a/src/components/wrappers/dashboard/database/import/import-modal.tsx
+++ b/src/components/wrappers/dashboard/database/import/import-modal.tsx
@@ -38,7 +38,7 @@ export const ImportModal = ({database}: ImportModalProps) => {
setOpen(false)}
- databaseId={database.id}/>
+ database={database}/>
diff --git a/src/components/wrappers/dashboard/database/import/upload-backup-zone.tsx b/src/components/wrappers/dashboard/database/import/upload-backup-zone.tsx
index 10a01c11..0ab28d70 100644
--- a/src/components/wrappers/dashboard/database/import/upload-backup-zone.tsx
+++ b/src/components/wrappers/dashboard/database/import/upload-backup-zone.tsx
@@ -9,13 +9,15 @@ import {ButtonWithLoading} from "@/components/wrappers/common/button/button-with
import {toast} from "sonner";
import {uploadBackupAction} from "@/components/wrappers/dashboard/database/import/upload-backup.action";
import {Card, CardContent} from "@/components/ui/card";
+import {DatabaseWith} from "@/db/schema/07_database";
+import {getFileHeadersBasedOnDbms} from "@/utils/common";
type UploadRetentionZoneProps = {
onSuccessAction?: () => void;
- databaseId: string;
+ database: DatabaseWith;
};
-export const UploadBackupZone = ({onSuccessAction, databaseId}: UploadRetentionZoneProps) => {
+export const UploadBackupZone = ({onSuccessAction, database}: UploadRetentionZoneProps) => {
const queryClient = useQueryClient();
const router = useRouter();
@@ -30,7 +32,7 @@ export const UploadBackupZone = ({onSuccessAction, databaseId}: UploadRetentionZ
const formData = new FormData();
formData.append("file", file);
- formData.append("databaseId", databaseId);
+ formData.append("databaseId", database.id);
const result = await uploadBackupAction(formData)
@@ -38,7 +40,7 @@ export const UploadBackupZone = ({onSuccessAction, databaseId}: UploadRetentionZ
if (inner?.success) {
toast.success(inner.actionSuccess?.message);
onSuccessAction?.()
- queryClient.invalidateQueries({queryKey: ["database-data", databaseId]});
+ queryClient.invalidateQueries({queryKey: ["database-data", database.id]});
router.refresh();
} else {
toast.error(inner?.actionError?.message);
@@ -47,19 +49,20 @@ export const UploadBackupZone = ({onSuccessAction, databaseId}: UploadRetentionZ
console.error(err);
toast.error("An error occurred while upload in the backup");
} finally {
- queryClient.invalidateQueries({queryKey: ["database-data", databaseId]});
+ queryClient.invalidateQueries({queryKey: ["database-data", database.id]});
setIsProcessing(false);
}
},
});
- const acceptDbImportFiles: Record = {
- "application/sql": [".sql"],
- "application/x-sql": [".sql"],
- "text/plain": [".sql"],
- "application/octet-stream": [".dump"],
- };
+ const acceptDbImportFiles = getFileHeadersBasedOnDbms(database.dbms)
+ console.log(acceptDbImportFiles)
+
+ const fileKindDescription = Object.values(acceptDbImportFiles)
+ .flat()
+ .join(", ");
+
return (
<>
@@ -67,11 +70,11 @@ export const UploadBackupZone = ({onSuccessAction, databaseId}: UploadRetentionZ
) : (
setFile(file)}
/>
@@ -86,8 +89,6 @@ export const UploadBackupZone = ({onSuccessAction, databaseId}: UploadRetentionZ
)}
-
-
>
);
};
diff --git a/src/utils/common.ts b/src/utils/common.ts
index 5b2a50db..adaa7f14 100644
--- a/src/utils/common.ts
+++ b/src/utils/common.ts
@@ -17,7 +17,7 @@ export function buildOrganizationWithMembers(
const org = rows[0].organization;
- const invitations : OrganizationInvitation[] = rows
+ const invitations: OrganizationInvitation[] = rows
.filter(r => r.invitation)
.map(r => ({
...r.invitation!,
@@ -38,7 +38,6 @@ export function buildOrganizationWithMembers(
}
-
export function getFileExtension(dbType: string) {
switch (dbType) {
case "postgresql":
@@ -48,4 +47,39 @@ export function getFileExtension(dbType: string) {
default:
return ".dump";
}
-}
\ No newline at end of file
+}
+
+export function getFileHeadersBasedOnDbms(dbType: string): Record {
+ switch (dbType) {
+ case "postgresql":
+ return {
+ "application/octet-stream": [".dump"],
+ };
+ case "mysql":
+ case "mariadb":
+ return {
+ "application/sql": [".sql"],
+ "application/x-sql": [".sql"],
+ };
+ case "mongodb":
+ return {
+ "application/gzip": [".archive.gz"],
+ };
+ case "firebird":
+ return {
+ "application/octet-stream": [".fbk"],
+ };
+ case "valkey":
+ case "redis":
+ return {
+ "application/octet-stream": [".rdb"],
+ };
+ case "sqlite":
+ return {
+ "application/octet-stream": [".backup"],
+ };
+ default:
+ throw new Error(`Unsupported database type: ${dbType}`);
+
+ }
+}