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}`); + + } +}