From 8405a9bf0c75b53b8356332e78a25fc40d817a70 Mon Sep 17 00:00:00 2001 From: izzy Date: Fri, 21 Nov 2025 11:18:19 +0000 Subject: [PATCH] fix: use 'startRestoreFlow' on onboarding page --- mobile/openapi/README.md | 1 + .../lib/api/maintenance_admin_api.dart | 40 +++++++++++++++++++ open-api/immich-openapi-specs.json | 27 +++++++++++++ open-api/typescript-sdk/src/fetch-client.ts | 9 +++++ web/src/routes/+page.svelte | 8 +--- 5 files changed, 79 insertions(+), 6 deletions(-) diff --git a/mobile/openapi/README.md b/mobile/openapi/README.md index 97e6860aca..a2704ab1bf 100644 --- a/mobile/openapi/README.md +++ b/mobile/openapi/README.md @@ -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 diff --git a/mobile/openapi/lib/api/maintenance_admin_api.dart b/mobile/openapi/lib/api/maintenance_admin_api.dart index 50c025ebec..1d6e3455b6 100644 --- a/mobile/openapi/lib/api/maintenance_admin_api.dart +++ b/mobile/openapi/lib/api/maintenance_admin_api.dart @@ -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 startRestoreFlowWithHttpInfo() async { + // ignore: prefer_const_declarations + final apiPath = r'/admin/maintenance/backups/restore'; + + // ignore: prefer_final_locals + Object? postBody; + + final queryParams = []; + final headerParams = {}; + final formParams = {}; + + const contentTypes = []; + + + 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 startRestoreFlow() async { + final response = await startRestoreFlowWithHttpInfo(); + if (response.statusCode >= HttpStatus.badRequest) { + throw ApiException(response.statusCode, await _decodeBodyBytes(response)); + } + } } diff --git a/open-api/immich-openapi-specs.json b/open-api/immich-openapi-specs.json index e3c01e51c3..61949c42ea 100644 --- a/open-api/immich-openapi-specs.json +++ b/open-api/immich-openapi-specs.json @@ -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", diff --git a/open-api/typescript-sdk/src/fetch-client.ts b/open-api/typescript-sdk/src/fetch-client.ts index 28e3af3d87..a9cd16b0c9 100644 --- a/open-api/typescript-sdk/src/fetch-client.ts +++ b/open-api/typescript-sdk/src/fetch-client.ts @@ -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 */ diff --git a/web/src/routes/+page.svelte b/web/src/routes/+page.svelte index 34e8f0ad31..d8881e52d4 100644 --- a/web/src/routes/+page.svelte +++ b/web/src/routes/+page.svelte @@ -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')); }