diff --git a/src/features/onboarding/actions/apply-db-settings.action.ts b/src/features/onboarding/actions/apply-db-settings.action.ts
index 17a34184..7213d0bc 100644
--- a/src/features/onboarding/actions/apply-db-settings.action.ts
+++ b/src/features/onboarding/actions/apply-db-settings.action.ts
@@ -93,6 +93,7 @@ export const applyOnboardingDbSettingsAction = userAction
};
const applyScheduling = async () => {
+ if (backupMethod === undefined) return;
// Direct DB update — intentionally skips the side effect in
// updateDatabaseBackupPolicyAction that deletes retention policy on null.
const cronValue =
@@ -105,37 +106,41 @@ export const applyOnboardingDbSettingsAction = userAction
const applyNotifications = async () => {
if (!notificationPolicies) return;
- await db
- .delete(drizzleDb.schemas.alertPolicy)
- .where(eq(drizzleDb.schemas.alertPolicy.databaseId, databaseId));
+ await db.transaction(async (tx) => {
+ await tx
+ .delete(drizzleDb.schemas.alertPolicy)
+ .where(eq(drizzleDb.schemas.alertPolicy.databaseId, databaseId));
- if (notificationPolicies.length > 0) {
- await db.insert(drizzleDb.schemas.alertPolicy).values(
- notificationPolicies.map((p) => ({
- databaseId,
- notificationChannelId: p.channelId,
- eventKinds: p.eventKinds as any,
- enabled: p.enabled,
- }))
- );
- }
+ if (notificationPolicies.length > 0) {
+ await tx.insert(drizzleDb.schemas.alertPolicy).values(
+ notificationPolicies.map((p) => ({
+ databaseId,
+ notificationChannelId: p.channelId,
+ eventKinds: p.eventKinds as any,
+ enabled: p.enabled,
+ }))
+ );
+ }
+ });
};
const applyStorage = async () => {
if (!storagePolicies) return;
- await db
- .delete(drizzleDb.schemas.storagePolicy)
- .where(eq(drizzleDb.schemas.storagePolicy.databaseId, databaseId));
+ await db.transaction(async (tx) => {
+ await tx
+ .delete(drizzleDb.schemas.storagePolicy)
+ .where(eq(drizzleDb.schemas.storagePolicy.databaseId, databaseId));
- if (storagePolicies.length > 0) {
- await db.insert(drizzleDb.schemas.storagePolicy).values(
- storagePolicies.map((p) => ({
- databaseId,
- storageChannelId: p.channelId,
- enabled: p.enabled,
- }))
- );
- }
+ if (storagePolicies.length > 0) {
+ await tx.insert(drizzleDb.schemas.storagePolicy).values(
+ storagePolicies.map((p) => ({
+ databaseId,
+ storageChannelId: p.channelId,
+ enabled: p.enabled,
+ }))
+ );
+ }
+ });
};
if (section === "retention" || section === "all") await applyRetention();
diff --git a/src/features/onboarding/steps/step-db-settings.tsx b/src/features/onboarding/steps/step-db-settings.tsx
index 60474711..5a72905c 100644
--- a/src/features/onboarding/steps/step-db-settings.tsx
+++ b/src/features/onboarding/steps/step-db-settings.tsx
@@ -497,7 +497,7 @@ const NotificationsSection = ({