fix: use 'startRestoreFlow' on onboarding page

This commit is contained in:
izzy
2025-11-21 11:18:19 +00:00
parent 3933b23e2c
commit 8405a9bf0c
5 changed files with 79 additions and 6 deletions

View File

@@ -164,6 +164,7 @@ Class | Method | HTTP request | Description
*MaintenanceAdminApi* | [**maintenanceLogin**](doc//MaintenanceAdminApi.md#maintenancelogin) | **POST** /admin/maintenance/login | Log into maintenance mode
*MaintenanceAdminApi* | [**maintenanceStatus**](doc//MaintenanceAdminApi.md#maintenancestatus) | **GET** /admin/maintenance/status | Get maintenance mode status
*MaintenanceAdminApi* | [**setMaintenanceMode**](doc//MaintenanceAdminApi.md#setmaintenancemode) | **POST** /admin/maintenance | Set maintenance mode
*MaintenanceAdminApi* | [**startRestoreFlow**](doc//MaintenanceAdminApi.md#startrestoreflow) | **POST** /admin/maintenance/backups/restore | Start backup restore flow
*MapApi* | [**getMapMarkers**](doc//MapApi.md#getmapmarkers) | **GET** /map/markers | Retrieve map markers
*MapApi* | [**reverseGeocode**](doc//MapApi.md#reversegeocode) | **GET** /map/reverse-geocode | Reverse geocode coordinates
*MemoriesApi* | [**addMemoryAssets**](doc//MemoriesApi.md#addmemoryassets) | **PUT** /memories/{id}/assets | Add assets to a memory

View File

@@ -264,4 +264,44 @@ class MaintenanceAdminApi {
throw ApiException(response.statusCode, await _decodeBodyBytes(response));
}
}
/// Start backup restore flow
///
/// Put Immich into maintenance mode to restore a backup (Immich must not be configured)
///
/// Note: This method returns the HTTP [Response].
Future<Response> startRestoreFlowWithHttpInfo() async {
// ignore: prefer_const_declarations
final apiPath = r'/admin/maintenance/backups/restore';
// ignore: prefer_final_locals
Object? postBody;
final queryParams = <QueryParam>[];
final headerParams = <String, String>{};
final formParams = <String, String>{};
const contentTypes = <String>[];
return apiClient.invokeAPI(
apiPath,
'POST',
queryParams,
postBody,
headerParams,
formParams,
contentTypes.isEmpty ? null : contentTypes.first,
);
}
/// Start backup restore flow
///
/// Put Immich into maintenance mode to restore a backup (Immich must not be configured)
Future<void> startRestoreFlow() async {
final response = await startRestoreFlowWithHttpInfo();
if (response.statusCode >= HttpStatus.badRequest) {
throw ApiException(response.statusCode, await _decodeBodyBytes(response));
}
}
}

View File

@@ -419,6 +419,33 @@
"x-immich-state": "Alpha"
}
},
"/admin/maintenance/backups/restore": {
"post": {
"description": "Put Immich into maintenance mode to restore a backup (Immich must not be configured)",
"operationId": "startRestoreFlow",
"parameters": [],
"responses": {
"201": {
"description": ""
}
},
"summary": "Start backup restore flow",
"tags": [
"Maintenance (admin)"
],
"x-immich-history": [
{
"version": "v9.9.9",
"state": "Added"
},
{
"version": "v9.9.9",
"state": "Alpha"
}
],
"x-immich-state": "Alpha"
}
},
"/admin/maintenance/backups/{filename}": {
"delete": {
"description": "Delete a backup by its filename",

View File

@@ -1866,6 +1866,15 @@ export function listBackups(opts?: Oazapfts.RequestOpts) {
...opts
}));
}
/**
* Start backup restore flow
*/
export function startRestoreFlow(opts?: Oazapfts.RequestOpts) {
return oazapfts.ok(oazapfts.fetchText("/admin/maintenance/backups/restore", {
...opts,
method: "POST"
}));
}
/**
* Delete backup
*/

View File

@@ -3,7 +3,7 @@
import { AppRoute } from '$lib/constants';
import { websocketStore } from '$lib/stores/websocket';
import { handleError } from '$lib/utils/handle-error';
import { MaintenanceAction, setMaintenanceMode } from '@immich/sdk';
import { startRestoreFlow } from '@immich/sdk';
import { Button, Heading, Stack } from '@immich/ui';
import { t } from 'svelte-i18n';
@@ -13,11 +13,7 @@
isMaintenanceMode: true,
});
await setMaintenanceMode({
setMaintenanceModeDto: {
action: MaintenanceAction.RestoreDatabase,
},
});
await startRestoreFlow();
} catch (error) {
handleError(error, $t('admin.maintenance_start_error'));
}