From 5c6e04cc8fe9da5d0e264a2edf4d12673cb666d9 Mon Sep 17 00:00:00 2001 From: izzy Date: Thu, 6 Nov 2025 17:54:29 +0000 Subject: [PATCH] refactor: lint, open-api, remove old dto --- mobile/openapi/README.md | 1 - mobile/openapi/lib/api.dart | 1 - .../lib/api/maintenance_admin_api.dart | 20 +--- mobile/openapi/lib/api_client.dart | 2 - .../model/maintenance_mode_response_dto.dart | 99 ------------------- open-api/typescript-sdk/src/fetch-client.ts | 13 +-- server/src/dtos/maintenance.dto.ts | 7 +- .../maintenance-worker.repository.ts | 4 +- .../services/maintenance-worker.service.ts | 2 +- 9 files changed, 8 insertions(+), 141 deletions(-) delete mode 100644 mobile/openapi/lib/model/maintenance_mode_response_dto.dart diff --git a/mobile/openapi/README.md b/mobile/openapi/README.md index cb02a25d6c..6302deef59 100644 --- a/mobile/openapi/README.md +++ b/mobile/openapi/README.md @@ -405,7 +405,6 @@ Class | Method | HTTP request | Description - [MachineLearningAvailabilityChecksDto](doc//MachineLearningAvailabilityChecksDto.md) - [MaintenanceAuthDto](doc//MaintenanceAuthDto.md) - [MaintenanceLoginDto](doc//MaintenanceLoginDto.md) - - [MaintenanceModeResponseDto](doc//MaintenanceModeResponseDto.md) - [ManualJobName](doc//ManualJobName.md) - [MapMarkerResponseDto](doc//MapMarkerResponseDto.md) - [MapReverseGeocodeResponseDto](doc//MapReverseGeocodeResponseDto.md) diff --git a/mobile/openapi/lib/api.dart b/mobile/openapi/lib/api.dart index 64cd7d1e11..a033d2e740 100644 --- a/mobile/openapi/lib/api.dart +++ b/mobile/openapi/lib/api.dart @@ -171,7 +171,6 @@ part 'model/logout_response_dto.dart'; part 'model/machine_learning_availability_checks_dto.dart'; part 'model/maintenance_auth_dto.dart'; part 'model/maintenance_login_dto.dart'; -part 'model/maintenance_mode_response_dto.dart'; part 'model/manual_job_name.dart'; part 'model/map_marker_response_dto.dart'; part 'model/map_reverse_geocode_response_dto.dart'; diff --git a/mobile/openapi/lib/api/maintenance_admin_api.dart b/mobile/openapi/lib/api/maintenance_admin_api.dart index 9acc3000c7..7304dcc3d0 100644 --- a/mobile/openapi/lib/api/maintenance_admin_api.dart +++ b/mobile/openapi/lib/api/maintenance_admin_api.dart @@ -45,19 +45,11 @@ class MaintenanceAdminApi { } /// This endpoint is an admin-only route, and requires the `maintenance` permission. - Future endMaintenance() async { + Future endMaintenance() async { final response = await endMaintenanceWithHttpInfo(); if (response.statusCode >= HttpStatus.badRequest) { throw ApiException(response.statusCode, await _decodeBodyBytes(response)); } - // When a remote server returns no body with a status of 204, we shall not decode it. - // At the time of writing this, `dart:convert` will throw an "Unexpected end of input" - // FormatException when trying to decode an empty string. - if (response.body.isNotEmpty && response.statusCode != HttpStatus.noContent) { - return await apiClient.deserializeAsync(await _decodeBodyBytes(response), 'MaintenanceModeResponseDto',) as MaintenanceModeResponseDto; - - } - return null; } /// Performs an HTTP 'POST /admin/maintenance/login' operation and returns the [Response]. @@ -136,18 +128,10 @@ class MaintenanceAdminApi { } /// This endpoint is an admin-only route, and requires the `maintenance` permission. - Future startMaintenance() async { + Future startMaintenance() async { final response = await startMaintenanceWithHttpInfo(); if (response.statusCode >= HttpStatus.badRequest) { throw ApiException(response.statusCode, await _decodeBodyBytes(response)); } - // When a remote server returns no body with a status of 204, we shall not decode it. - // At the time of writing this, `dart:convert` will throw an "Unexpected end of input" - // FormatException when trying to decode an empty string. - if (response.body.isNotEmpty && response.statusCode != HttpStatus.noContent) { - return await apiClient.deserializeAsync(await _decodeBodyBytes(response), 'MaintenanceModeResponseDto',) as MaintenanceModeResponseDto; - - } - return null; } } diff --git a/mobile/openapi/lib/api_client.dart b/mobile/openapi/lib/api_client.dart index 5c2fe43d00..f61fc7e644 100644 --- a/mobile/openapi/lib/api_client.dart +++ b/mobile/openapi/lib/api_client.dart @@ -394,8 +394,6 @@ class ApiClient { return MaintenanceAuthDto.fromJson(value); case 'MaintenanceLoginDto': return MaintenanceLoginDto.fromJson(value); - case 'MaintenanceModeResponseDto': - return MaintenanceModeResponseDto.fromJson(value); case 'ManualJobName': return ManualJobNameTypeTransformer().decode(value); case 'MapMarkerResponseDto': diff --git a/mobile/openapi/lib/model/maintenance_mode_response_dto.dart b/mobile/openapi/lib/model/maintenance_mode_response_dto.dart deleted file mode 100644 index 70e8bfa8b6..0000000000 --- a/mobile/openapi/lib/model/maintenance_mode_response_dto.dart +++ /dev/null @@ -1,99 +0,0 @@ -// -// AUTO-GENERATED FILE, DO NOT MODIFY! -// -// @dart=2.18 - -// ignore_for_file: unused_element, unused_import -// ignore_for_file: always_put_required_named_parameters_first -// ignore_for_file: constant_identifier_names -// ignore_for_file: lines_longer_than_80_chars - -part of openapi.api; - -class MaintenanceModeResponseDto { - /// Returns a new [MaintenanceModeResponseDto] instance. - MaintenanceModeResponseDto({ - required this.isMaintenanceMode, - }); - - bool isMaintenanceMode; - - @override - bool operator ==(Object other) => identical(this, other) || other is MaintenanceModeResponseDto && - other.isMaintenanceMode == isMaintenanceMode; - - @override - int get hashCode => - // ignore: unnecessary_parenthesis - (isMaintenanceMode.hashCode); - - @override - String toString() => 'MaintenanceModeResponseDto[isMaintenanceMode=$isMaintenanceMode]'; - - Map toJson() { - final json = {}; - json[r'isMaintenanceMode'] = this.isMaintenanceMode; - return json; - } - - /// Returns a new [MaintenanceModeResponseDto] instance and imports its values from - /// [value] if it's a [Map], null otherwise. - // ignore: prefer_constructors_over_static_methods - static MaintenanceModeResponseDto? fromJson(dynamic value) { - upgradeDto(value, "MaintenanceModeResponseDto"); - if (value is Map) { - final json = value.cast(); - - return MaintenanceModeResponseDto( - isMaintenanceMode: mapValueOfType(json, r'isMaintenanceMode')!, - ); - } - return null; - } - - static List listFromJson(dynamic json, {bool growable = false,}) { - final result = []; - if (json is List && json.isNotEmpty) { - for (final row in json) { - final value = MaintenanceModeResponseDto.fromJson(row); - if (value != null) { - result.add(value); - } - } - } - return result.toList(growable: growable); - } - - static Map mapFromJson(dynamic json) { - final map = {}; - if (json is Map && json.isNotEmpty) { - json = json.cast(); // ignore: parameter_assignments - for (final entry in json.entries) { - final value = MaintenanceModeResponseDto.fromJson(entry.value); - if (value != null) { - map[entry.key] = value; - } - } - } - return map; - } - - // maps a json object with a list of MaintenanceModeResponseDto-objects as value to a dart map - static Map> mapListFromJson(dynamic json, {bool growable = false,}) { - final map = >{}; - if (json is Map && json.isNotEmpty) { - // ignore: parameter_assignments - json = json.cast(); - for (final entry in json.entries) { - map[entry.key] = MaintenanceModeResponseDto.listFromJson(entry.value, growable: growable,); - } - } - return map; - } - - /// The list of required keys that must be present in a JSON. - static const requiredKeys = { - 'isMaintenanceMode', - }; -} - diff --git a/open-api/typescript-sdk/src/fetch-client.ts b/open-api/typescript-sdk/src/fetch-client.ts index 670e3b405f..738bc841be 100644 --- a/open-api/typescript-sdk/src/fetch-client.ts +++ b/open-api/typescript-sdk/src/fetch-client.ts @@ -40,9 +40,6 @@ export type ActivityStatisticsResponseDto = { comments: number; likes: number; }; -export type MaintenanceModeResponseDto = { - isMaintenanceMode: boolean; -}; export type MaintenanceLoginDto = { token?: string; }; @@ -1763,10 +1760,7 @@ export function unlinkAllOAuthAccountsAdmin(opts?: Oazapfts.RequestOpts) { * This endpoint is an admin-only route, and requires the `maintenance` permission. */ export function endMaintenance(opts?: Oazapfts.RequestOpts) { - return oazapfts.ok(oazapfts.fetchJson<{ - status: 201; - data: MaintenanceModeResponseDto; - }>("/admin/maintenance/end", { + return oazapfts.ok(oazapfts.fetchText("/admin/maintenance/end", { ...opts, method: "POST" })); @@ -1787,10 +1781,7 @@ export function maintenanceLogin({ maintenanceLoginDto }: { * This endpoint is an admin-only route, and requires the `maintenance` permission. */ export function startMaintenance(opts?: Oazapfts.RequestOpts) { - return oazapfts.ok(oazapfts.fetchJson<{ - status: 201; - data: MaintenanceModeResponseDto; - }>("/admin/maintenance/start", { + return oazapfts.ok(oazapfts.fetchText("/admin/maintenance/start", { ...opts, method: "POST" })); diff --git a/server/src/dtos/maintenance.dto.ts b/server/src/dtos/maintenance.dto.ts index df21921327..5887f6f7b4 100644 --- a/server/src/dtos/maintenance.dto.ts +++ b/server/src/dtos/maintenance.dto.ts @@ -1,9 +1,4 @@ -import { ValidateBoolean, ValidateString } from 'src/validation'; - -export class MaintenanceModeResponseDto { - @ValidateBoolean() - isMaintenanceMode!: boolean; -} +import { ValidateString } from 'src/validation'; export class MaintenanceLoginDto { @ValidateString({ optional: true }) diff --git a/server/src/repositories/maintenance-worker.repository.ts b/server/src/repositories/maintenance-worker.repository.ts index b8b4b64cb9..a2b1bd9eb4 100644 --- a/server/src/repositories/maintenance-worker.repository.ts +++ b/server/src/repositories/maintenance-worker.repository.ts @@ -9,7 +9,7 @@ import { import { parse } from 'cookie'; import { IncomingHttpHeaders } from 'node:http'; import { Server, Socket } from 'socket.io'; -import { MaintenanceAuthDto, MaintenanceModeResponseDto } from 'src/dtos/maintenance.dto'; +import { MaintenanceAuthDto } from 'src/dtos/maintenance.dto'; import { ExitCode, ImmichCookie, SystemMetadataKey } from 'src/enum'; import { AppRestartEvent, ArgsOf } from 'src/repositories/event.repository'; import { LoggingRepository } from 'src/repositories/logging.repository'; @@ -113,7 +113,7 @@ export class MaintenanceWorkerRepository implements OnGatewayConnection, OnGatew websocketServer.on('AppRestart', () => this.exitApp()); } - restartApp(state: MaintenanceModeResponseDto) { + restartApp(state: AppRestartEvent) { this.clientBroadcast('AppRestartV1', state); this.serverSend('AppRestart', state); this.exitApp(); diff --git a/server/src/services/maintenance-worker.service.ts b/server/src/services/maintenance-worker.service.ts index ecdc4ae7f6..dc092255ae 100644 --- a/server/src/services/maintenance-worker.service.ts +++ b/server/src/services/maintenance-worker.service.ts @@ -58,7 +58,7 @@ export class MaintenanceWorkerService { return this.maintenanceRepository.authenticateToken(jwt); } - startMaintenance(): Promise { + startMaintenance(): void { throw new BadRequestException('Already in maintenance mode'); }