refactor: split actions into flow/restore

This commit is contained in:
izzy 2026-01-06 13:05:53 +00:00
parent fae9d10855
commit 770bf7365c
No known key found for this signature in database
8 changed files with 19 additions and 11 deletions

View File

@ -25,12 +25,14 @@ class MaintenanceAction {
static const start = MaintenanceAction._(r'start');
static const end = MaintenanceAction._(r'end');
static const selectDatabaseRestore = MaintenanceAction._(r'select_database_restore');
static const restoreDatabase = MaintenanceAction._(r'restore_database');
/// List of all possible values in this [enum][MaintenanceAction].
static const values = <MaintenanceAction>[
start,
end,
selectDatabaseRestore,
restoreDatabase,
];
@ -72,6 +74,7 @@ class MaintenanceActionTypeTransformer {
switch (data) {
case r'start': return MaintenanceAction.start;
case r'end': return MaintenanceAction.end;
case r'select_database_restore': return MaintenanceAction.selectDatabaseRestore;
case r'restore_database': return MaintenanceAction.restoreDatabase;
default:
if (!allowNull) {

View File

@ -17317,6 +17317,7 @@
"enum": [
"start",
"end",
"select_database_restore",
"restore_database"
],
"type": "string"

View File

@ -5264,6 +5264,7 @@ export enum UserAvatarColor {
export enum MaintenanceAction {
Start = "start",
End = "end",
SelectDatabaseRestore = "select_database_restore",
RestoreDatabase = "restore_database"
}
export enum StorageFolder {

View File

@ -1,3 +1,4 @@
import { ValidateIf } from 'class-validator';
import { MaintenanceAction, StorageFolder } from 'src/enum';
import { ValidateEnum, ValidateString } from 'src/validation';
@ -5,7 +6,8 @@ export class SetMaintenanceModeDto {
@ValidateEnum({ enum: MaintenanceAction, name: 'MaintenanceAction' })
action!: MaintenanceAction;
@ValidateString({ optional: true })
@ValidateIf((o) => o.action === MaintenanceAction.RestoreDatabase)
@ValidateString()
restoreBackupFilename?: string;
}

View File

@ -696,6 +696,7 @@ export enum DatabaseLock {
export enum MaintenanceAction {
Start = 'start',
End = 'end',
SelectDatabaseRestore = 'select_database_restore',
RestoreDatabase = 'restore_database',
}

View File

@ -303,12 +303,8 @@ export class MaintenanceWorkerService {
case MaintenanceAction.End: {
return this.endMaintenance();
}
case MaintenanceAction.RestoreDatabase: {
if (!action.restoreBackupFilename) {
return;
}
break;
case MaintenanceAction.SelectDatabaseRestore: {
return;
}
}
@ -330,6 +326,10 @@ export class MaintenanceWorkerService {
try {
switch (action.action) {
case MaintenanceAction.RestoreDatabase: {
if (!action.restoreBackupFilename) {
throw new Error("Expected restoreBackupFilename but it's missing!");
}
await this.restoreBackup(action.restoreBackupFilename);
break;
}

View File

@ -65,7 +65,7 @@ export class MaintenanceService extends BaseService {
return this.startMaintenance(
{
action: MaintenanceAction.RestoreDatabase,
action: MaintenanceAction.SelectDatabaseRestore,
},
'admin',
);

View File

@ -31,11 +31,11 @@
</script>
<AuthPageLayout
withHeader={$status?.action !== MaintenanceAction.RestoreDatabase}
withHeader={$status?.action === MaintenanceAction.Start || $status?.action === MaintenanceAction.End}
withBackdrop={$status?.action === MaintenanceAction.Start}
>
<div class="flex flex-col place-items-center text-center gap-4">
{#if $status?.action === MaintenanceAction.RestoreDatabase && $status.task}
{#if $status?.action === MaintenanceAction.RestoreDatabase}
<Heading size="large" color="primary" tag="h1">{$t('maintenance_action_restore')}</Heading>
{#if $status.error}
<Scrollable class="max-h-80">
@ -51,7 +51,7 @@
<Text>{$t('maintenance_task_restore')}</Text>
{/if}
{/if}
{:else if $status?.action === MaintenanceAction.RestoreDatabase && $auth}
{:else if $status?.action === MaintenanceAction.SelectDatabaseRestore && $auth}
<MaintenanceRestoreFlow {end} />
{:else}
<Heading size="large" color="primary" tag="h1">{$t('maintenance_title')}</Heading>