feat: add metadata catalog cleanup commands

This commit is contained in:
Codex
2026-08-28 00:37:43 +02:00
parent 79c4c925b5
commit 58ee9cffe4
19 changed files with 942 additions and 66 deletions
@@ -13,12 +13,14 @@ import { ApiError, apiErrorMessage } from "../api/client";
import {
createCatalogDatabase,
deleteCatalogDatabase,
deleteCatalogDatabaseMetadata,
listCatalogDatabases,
replaceCatalogDatabaseSecrets,
startCatalogSync,
testCatalogDatabase,
updateCatalogDatabase,
type CatalogDatabase,
type CatalogDatabaseMetadataDeleteTarget,
type CatalogSecretName,
type CatalogSyncScope,
type CatalogSyncRun,
@@ -588,6 +590,28 @@ export function DatabaseManagementPage({
}
}, [queryClient, rememberSyncRun]);
const deleteSelectedMetadata = useCallback(async (
selected: CatalogDatabase[],
target: CatalogDatabaseMetadataDeleteTarget,
) => {
try {
const databaseIds = selected.map((row) => row.id!);
const counts = await deleteCatalogDatabaseMetadata(databaseIds, target);
await Promise.all(databaseIds.flatMap((databaseId) => [
queryClient.invalidateQueries({ queryKey: ["catalog-tables", databaseId] }),
queryClient.invalidateQueries({ queryKey: ["catalog-columns", databaseId] }),
queryClient.invalidateQueries({ queryKey: ["catalog-relationships", databaseId] }),
]));
await queryClient.invalidateQueries({ queryKey: DATABASE_QUERY_KEY });
toast.success(target === "tables"
? `Deleted ${counts.tables} catalog tables, ${counts.columns} columns, and ${counts.relationships} relationships`
: `Deleted ${counts.relationships} catalog relationships`);
} catch (error) {
toast.error(apiErrorMessage(error));
throw error;
}
}, [queryClient]);
const syncDatabase = useCallback(async (scope: CatalogSyncScope) => {
if (!activeRow?.id || !activeRow.configured) return;
try {
@@ -677,6 +701,7 @@ export function DatabaseManagementPage({
onOpenSync={openSync}
onTestSelected={testSelected}
onSyncSelected={syncSelected}
onDeleteMetadataSelected={deleteSelectedMetadata}
/>
)}
</div>