diff --git a/mobile/openapi/doc/APIKeyResponseDto.md b/mobile/openapi/doc/APIKeyResponseDto.md index f085aa025..78ccbc19c 100644 Binary files a/mobile/openapi/doc/APIKeyResponseDto.md and b/mobile/openapi/doc/APIKeyResponseDto.md differ diff --git a/mobile/openapi/lib/model/add_assets_dto.dart b/mobile/openapi/lib/model/add_assets_dto.dart index bebbaeb08..42908bc82 100644 Binary files a/mobile/openapi/lib/model/add_assets_dto.dart and b/mobile/openapi/lib/model/add_assets_dto.dart differ diff --git a/mobile/openapi/lib/model/add_assets_response_dto.dart b/mobile/openapi/lib/model/add_assets_response_dto.dart index 3f68d7528..c8723382c 100644 Binary files a/mobile/openapi/lib/model/add_assets_response_dto.dart and b/mobile/openapi/lib/model/add_assets_response_dto.dart differ diff --git a/mobile/openapi/lib/model/add_users_dto.dart b/mobile/openapi/lib/model/add_users_dto.dart index 6e0b5a88f..2c565a217 100644 Binary files a/mobile/openapi/lib/model/add_users_dto.dart and b/mobile/openapi/lib/model/add_users_dto.dart differ diff --git a/mobile/openapi/lib/model/admin_signup_response_dto.dart b/mobile/openapi/lib/model/admin_signup_response_dto.dart index 875744969..8e1898707 100644 Binary files a/mobile/openapi/lib/model/admin_signup_response_dto.dart and b/mobile/openapi/lib/model/admin_signup_response_dto.dart differ diff --git a/mobile/openapi/lib/model/album_count_response_dto.dart b/mobile/openapi/lib/model/album_count_response_dto.dart index 30fe19fb5..512c11234 100644 Binary files a/mobile/openapi/lib/model/album_count_response_dto.dart and b/mobile/openapi/lib/model/album_count_response_dto.dart differ diff --git a/mobile/openapi/lib/model/album_response_dto.dart b/mobile/openapi/lib/model/album_response_dto.dart index ac170523d..282344a16 100644 Binary files a/mobile/openapi/lib/model/album_response_dto.dart and b/mobile/openapi/lib/model/album_response_dto.dart differ diff --git a/mobile/openapi/lib/model/all_job_status_response_dto.dart b/mobile/openapi/lib/model/all_job_status_response_dto.dart index 88865d799..9bf95e370 100644 Binary files a/mobile/openapi/lib/model/all_job_status_response_dto.dart and b/mobile/openapi/lib/model/all_job_status_response_dto.dart differ diff --git a/mobile/openapi/lib/model/api_key_create_dto.dart b/mobile/openapi/lib/model/api_key_create_dto.dart index 0cd0480b9..84b259030 100644 Binary files a/mobile/openapi/lib/model/api_key_create_dto.dart and b/mobile/openapi/lib/model/api_key_create_dto.dart differ diff --git a/mobile/openapi/lib/model/api_key_create_response_dto.dart b/mobile/openapi/lib/model/api_key_create_response_dto.dart index 5947f7ff0..77b5e3df3 100644 Binary files a/mobile/openapi/lib/model/api_key_create_response_dto.dart and b/mobile/openapi/lib/model/api_key_create_response_dto.dart differ diff --git a/mobile/openapi/lib/model/api_key_response_dto.dart b/mobile/openapi/lib/model/api_key_response_dto.dart index 6b1d93dbe..3930829e2 100644 Binary files a/mobile/openapi/lib/model/api_key_response_dto.dart and b/mobile/openapi/lib/model/api_key_response_dto.dart differ diff --git a/mobile/openapi/lib/model/api_key_update_dto.dart b/mobile/openapi/lib/model/api_key_update_dto.dart index 9116f84aa..47847df78 100644 Binary files a/mobile/openapi/lib/model/api_key_update_dto.dart and b/mobile/openapi/lib/model/api_key_update_dto.dart differ diff --git a/mobile/openapi/lib/model/asset_count_by_time_bucket.dart b/mobile/openapi/lib/model/asset_count_by_time_bucket.dart index 410afbaae..be1b22f8c 100644 Binary files a/mobile/openapi/lib/model/asset_count_by_time_bucket.dart and b/mobile/openapi/lib/model/asset_count_by_time_bucket.dart differ diff --git a/mobile/openapi/lib/model/asset_count_by_time_bucket_response_dto.dart b/mobile/openapi/lib/model/asset_count_by_time_bucket_response_dto.dart index 0b1f1d262..834a60194 100644 Binary files a/mobile/openapi/lib/model/asset_count_by_time_bucket_response_dto.dart and b/mobile/openapi/lib/model/asset_count_by_time_bucket_response_dto.dart differ diff --git a/mobile/openapi/lib/model/asset_count_by_user_id_response_dto.dart b/mobile/openapi/lib/model/asset_count_by_user_id_response_dto.dart index e1dddf121..7b1f0e487 100644 Binary files a/mobile/openapi/lib/model/asset_count_by_user_id_response_dto.dart and b/mobile/openapi/lib/model/asset_count_by_user_id_response_dto.dart differ diff --git a/mobile/openapi/lib/model/asset_file_upload_response_dto.dart b/mobile/openapi/lib/model/asset_file_upload_response_dto.dart index 40583b6ce..d7802e89e 100644 Binary files a/mobile/openapi/lib/model/asset_file_upload_response_dto.dart and b/mobile/openapi/lib/model/asset_file_upload_response_dto.dart differ diff --git a/mobile/openapi/lib/model/asset_response_dto.dart b/mobile/openapi/lib/model/asset_response_dto.dart index ae15193a3..2f516e2bd 100644 Binary files a/mobile/openapi/lib/model/asset_response_dto.dart and b/mobile/openapi/lib/model/asset_response_dto.dart differ diff --git a/mobile/openapi/lib/model/change_password_dto.dart b/mobile/openapi/lib/model/change_password_dto.dart index dc8bb31e2..ebb6651b7 100644 Binary files a/mobile/openapi/lib/model/change_password_dto.dart and b/mobile/openapi/lib/model/change_password_dto.dart differ diff --git a/mobile/openapi/lib/model/check_duplicate_asset_dto.dart b/mobile/openapi/lib/model/check_duplicate_asset_dto.dart index 8644381cb..65a4a6ebd 100644 Binary files a/mobile/openapi/lib/model/check_duplicate_asset_dto.dart and b/mobile/openapi/lib/model/check_duplicate_asset_dto.dart differ diff --git a/mobile/openapi/lib/model/check_duplicate_asset_response_dto.dart b/mobile/openapi/lib/model/check_duplicate_asset_response_dto.dart index 5ef8f585e..e106a899b 100644 Binary files a/mobile/openapi/lib/model/check_duplicate_asset_response_dto.dart and b/mobile/openapi/lib/model/check_duplicate_asset_response_dto.dart differ diff --git a/mobile/openapi/lib/model/check_existing_assets_dto.dart b/mobile/openapi/lib/model/check_existing_assets_dto.dart index e26936531..2cc69c40b 100644 Binary files a/mobile/openapi/lib/model/check_existing_assets_dto.dart and b/mobile/openapi/lib/model/check_existing_assets_dto.dart differ diff --git a/mobile/openapi/lib/model/check_existing_assets_response_dto.dart b/mobile/openapi/lib/model/check_existing_assets_response_dto.dart index 538482fc1..0d46eb725 100644 Binary files a/mobile/openapi/lib/model/check_existing_assets_response_dto.dart and b/mobile/openapi/lib/model/check_existing_assets_response_dto.dart differ diff --git a/mobile/openapi/lib/model/create_album_dto.dart b/mobile/openapi/lib/model/create_album_dto.dart index 202a474be..3a6e08ea4 100644 Binary files a/mobile/openapi/lib/model/create_album_dto.dart and b/mobile/openapi/lib/model/create_album_dto.dart differ diff --git a/mobile/openapi/lib/model/create_album_share_link_dto.dart b/mobile/openapi/lib/model/create_album_share_link_dto.dart index e021ecde6..3144f9aa1 100644 Binary files a/mobile/openapi/lib/model/create_album_share_link_dto.dart and b/mobile/openapi/lib/model/create_album_share_link_dto.dart differ diff --git a/mobile/openapi/lib/model/create_profile_image_response_dto.dart b/mobile/openapi/lib/model/create_profile_image_response_dto.dart index fc7321cbb..dfdcba8a4 100644 Binary files a/mobile/openapi/lib/model/create_profile_image_response_dto.dart and b/mobile/openapi/lib/model/create_profile_image_response_dto.dart differ diff --git a/mobile/openapi/lib/model/create_tag_dto.dart b/mobile/openapi/lib/model/create_tag_dto.dart index 0d9a79255..60701f4cb 100644 Binary files a/mobile/openapi/lib/model/create_tag_dto.dart and b/mobile/openapi/lib/model/create_tag_dto.dart differ diff --git a/mobile/openapi/lib/model/create_user_dto.dart b/mobile/openapi/lib/model/create_user_dto.dart index b8977d46d..bb7bb7c17 100644 Binary files a/mobile/openapi/lib/model/create_user_dto.dart and b/mobile/openapi/lib/model/create_user_dto.dart differ diff --git a/mobile/openapi/lib/model/curated_locations_response_dto.dart b/mobile/openapi/lib/model/curated_locations_response_dto.dart index 5117aa990..75cd05c0a 100644 Binary files a/mobile/openapi/lib/model/curated_locations_response_dto.dart and b/mobile/openapi/lib/model/curated_locations_response_dto.dart differ diff --git a/mobile/openapi/lib/model/curated_objects_response_dto.dart b/mobile/openapi/lib/model/curated_objects_response_dto.dart index 00662c5f1..d7e6617bf 100644 Binary files a/mobile/openapi/lib/model/curated_objects_response_dto.dart and b/mobile/openapi/lib/model/curated_objects_response_dto.dart differ diff --git a/mobile/openapi/lib/model/delete_asset_dto.dart b/mobile/openapi/lib/model/delete_asset_dto.dart index 4830dd40c..a7c613a43 100644 Binary files a/mobile/openapi/lib/model/delete_asset_dto.dart and b/mobile/openapi/lib/model/delete_asset_dto.dart differ diff --git a/mobile/openapi/lib/model/delete_asset_response_dto.dart b/mobile/openapi/lib/model/delete_asset_response_dto.dart index b71336aca..d3e3a38f3 100644 Binary files a/mobile/openapi/lib/model/delete_asset_response_dto.dart and b/mobile/openapi/lib/model/delete_asset_response_dto.dart differ diff --git a/mobile/openapi/lib/model/device_info_response_dto.dart b/mobile/openapi/lib/model/device_info_response_dto.dart index ad831c469..4d26fa392 100644 Binary files a/mobile/openapi/lib/model/device_info_response_dto.dart and b/mobile/openapi/lib/model/device_info_response_dto.dart differ diff --git a/mobile/openapi/lib/model/download_files_dto.dart b/mobile/openapi/lib/model/download_files_dto.dart index bef626560..14e2f4dd7 100644 Binary files a/mobile/openapi/lib/model/download_files_dto.dart and b/mobile/openapi/lib/model/download_files_dto.dart differ diff --git a/mobile/openapi/lib/model/edit_shared_link_dto.dart b/mobile/openapi/lib/model/edit_shared_link_dto.dart index 458ce2f75..8d8b98844 100644 Binary files a/mobile/openapi/lib/model/edit_shared_link_dto.dart and b/mobile/openapi/lib/model/edit_shared_link_dto.dart differ diff --git a/mobile/openapi/lib/model/exif_response_dto.dart b/mobile/openapi/lib/model/exif_response_dto.dart index b81f0e347..8423aa56a 100644 Binary files a/mobile/openapi/lib/model/exif_response_dto.dart and b/mobile/openapi/lib/model/exif_response_dto.dart differ diff --git a/mobile/openapi/lib/model/get_asset_by_time_bucket_dto.dart b/mobile/openapi/lib/model/get_asset_by_time_bucket_dto.dart index c00518a1f..d48315364 100644 Binary files a/mobile/openapi/lib/model/get_asset_by_time_bucket_dto.dart and b/mobile/openapi/lib/model/get_asset_by_time_bucket_dto.dart differ diff --git a/mobile/openapi/lib/model/get_asset_count_by_time_bucket_dto.dart b/mobile/openapi/lib/model/get_asset_count_by_time_bucket_dto.dart index 4a75a8caa..342d2b59c 100644 Binary files a/mobile/openapi/lib/model/get_asset_count_by_time_bucket_dto.dart and b/mobile/openapi/lib/model/get_asset_count_by_time_bucket_dto.dart differ diff --git a/mobile/openapi/lib/model/job_command_dto.dart b/mobile/openapi/lib/model/job_command_dto.dart index 808eb50d7..e3e5d41da 100644 Binary files a/mobile/openapi/lib/model/job_command_dto.dart and b/mobile/openapi/lib/model/job_command_dto.dart differ diff --git a/mobile/openapi/lib/model/job_counts.dart b/mobile/openapi/lib/model/job_counts.dart index dadb72f32..795821a19 100644 Binary files a/mobile/openapi/lib/model/job_counts.dart and b/mobile/openapi/lib/model/job_counts.dart differ diff --git a/mobile/openapi/lib/model/job_status_response_dto.dart b/mobile/openapi/lib/model/job_status_response_dto.dart index d3854b8f3..2e6edb293 100644 Binary files a/mobile/openapi/lib/model/job_status_response_dto.dart and b/mobile/openapi/lib/model/job_status_response_dto.dart differ diff --git a/mobile/openapi/lib/model/login_credential_dto.dart b/mobile/openapi/lib/model/login_credential_dto.dart index b8a23be59..103eedd4b 100644 Binary files a/mobile/openapi/lib/model/login_credential_dto.dart and b/mobile/openapi/lib/model/login_credential_dto.dart differ diff --git a/mobile/openapi/lib/model/login_response_dto.dart b/mobile/openapi/lib/model/login_response_dto.dart index 4eec0475a..9f3fa60f7 100644 Binary files a/mobile/openapi/lib/model/login_response_dto.dart and b/mobile/openapi/lib/model/login_response_dto.dart differ diff --git a/mobile/openapi/lib/model/logout_response_dto.dart b/mobile/openapi/lib/model/logout_response_dto.dart index 52120aaab..9a86bb6cc 100644 Binary files a/mobile/openapi/lib/model/logout_response_dto.dart and b/mobile/openapi/lib/model/logout_response_dto.dart differ diff --git a/mobile/openapi/lib/model/o_auth_callback_dto.dart b/mobile/openapi/lib/model/o_auth_callback_dto.dart index 3479f5b17..63f9cd315 100644 Binary files a/mobile/openapi/lib/model/o_auth_callback_dto.dart and b/mobile/openapi/lib/model/o_auth_callback_dto.dart differ diff --git a/mobile/openapi/lib/model/o_auth_config_dto.dart b/mobile/openapi/lib/model/o_auth_config_dto.dart index 23173b46b..f33488b03 100644 Binary files a/mobile/openapi/lib/model/o_auth_config_dto.dart and b/mobile/openapi/lib/model/o_auth_config_dto.dart differ diff --git a/mobile/openapi/lib/model/o_auth_config_response_dto.dart b/mobile/openapi/lib/model/o_auth_config_response_dto.dart index db6c9c9e9..03025a07c 100644 Binary files a/mobile/openapi/lib/model/o_auth_config_response_dto.dart and b/mobile/openapi/lib/model/o_auth_config_response_dto.dart differ diff --git a/mobile/openapi/lib/model/remove_assets_dto.dart b/mobile/openapi/lib/model/remove_assets_dto.dart index 1457bac38..7dd1e9f9f 100644 Binary files a/mobile/openapi/lib/model/remove_assets_dto.dart and b/mobile/openapi/lib/model/remove_assets_dto.dart differ diff --git a/mobile/openapi/lib/model/search_asset_dto.dart b/mobile/openapi/lib/model/search_asset_dto.dart index d90682750..7bc1341dd 100644 Binary files a/mobile/openapi/lib/model/search_asset_dto.dart and b/mobile/openapi/lib/model/search_asset_dto.dart differ diff --git a/mobile/openapi/lib/model/server_info_response_dto.dart b/mobile/openapi/lib/model/server_info_response_dto.dart index 0bc23439c..5f359cde0 100644 Binary files a/mobile/openapi/lib/model/server_info_response_dto.dart and b/mobile/openapi/lib/model/server_info_response_dto.dart differ diff --git a/mobile/openapi/lib/model/server_ping_response.dart b/mobile/openapi/lib/model/server_ping_response.dart index 56af4fa5b..2385b27b8 100644 Binary files a/mobile/openapi/lib/model/server_ping_response.dart and b/mobile/openapi/lib/model/server_ping_response.dart differ diff --git a/mobile/openapi/lib/model/server_stats_response_dto.dart b/mobile/openapi/lib/model/server_stats_response_dto.dart index 5417439b4..7dbc1db42 100644 Binary files a/mobile/openapi/lib/model/server_stats_response_dto.dart and b/mobile/openapi/lib/model/server_stats_response_dto.dart differ diff --git a/mobile/openapi/lib/model/server_version_reponse_dto.dart b/mobile/openapi/lib/model/server_version_reponse_dto.dart index 72caaf194..aec917e27 100644 Binary files a/mobile/openapi/lib/model/server_version_reponse_dto.dart and b/mobile/openapi/lib/model/server_version_reponse_dto.dart differ diff --git a/mobile/openapi/lib/model/shared_link_response_dto.dart b/mobile/openapi/lib/model/shared_link_response_dto.dart index aad8972d2..9adf91f7a 100644 Binary files a/mobile/openapi/lib/model/shared_link_response_dto.dart and b/mobile/openapi/lib/model/shared_link_response_dto.dart differ diff --git a/mobile/openapi/lib/model/sign_up_dto.dart b/mobile/openapi/lib/model/sign_up_dto.dart index dc027a3ce..5aaa7ac31 100644 Binary files a/mobile/openapi/lib/model/sign_up_dto.dart and b/mobile/openapi/lib/model/sign_up_dto.dart differ diff --git a/mobile/openapi/lib/model/smart_info_response_dto.dart b/mobile/openapi/lib/model/smart_info_response_dto.dart index e291cf13e..d24c836d5 100644 Binary files a/mobile/openapi/lib/model/smart_info_response_dto.dart and b/mobile/openapi/lib/model/smart_info_response_dto.dart differ diff --git a/mobile/openapi/lib/model/system_config_dto.dart b/mobile/openapi/lib/model/system_config_dto.dart index a4e976051..fb35e7350 100644 Binary files a/mobile/openapi/lib/model/system_config_dto.dart and b/mobile/openapi/lib/model/system_config_dto.dart differ diff --git a/mobile/openapi/lib/model/system_config_f_fmpeg_dto.dart b/mobile/openapi/lib/model/system_config_f_fmpeg_dto.dart index 73692bdce..064bdd36c 100644 Binary files a/mobile/openapi/lib/model/system_config_f_fmpeg_dto.dart and b/mobile/openapi/lib/model/system_config_f_fmpeg_dto.dart differ diff --git a/mobile/openapi/lib/model/system_config_o_auth_dto.dart b/mobile/openapi/lib/model/system_config_o_auth_dto.dart index d0fb195cc..19a87df10 100644 Binary files a/mobile/openapi/lib/model/system_config_o_auth_dto.dart and b/mobile/openapi/lib/model/system_config_o_auth_dto.dart differ diff --git a/mobile/openapi/lib/model/system_config_password_login_dto.dart b/mobile/openapi/lib/model/system_config_password_login_dto.dart index f5562800a..5a0eba93a 100644 Binary files a/mobile/openapi/lib/model/system_config_password_login_dto.dart and b/mobile/openapi/lib/model/system_config_password_login_dto.dart differ diff --git a/mobile/openapi/lib/model/system_config_storage_template_dto.dart b/mobile/openapi/lib/model/system_config_storage_template_dto.dart index 482641484..c5fd4f912 100644 Binary files a/mobile/openapi/lib/model/system_config_storage_template_dto.dart and b/mobile/openapi/lib/model/system_config_storage_template_dto.dart differ diff --git a/mobile/openapi/lib/model/system_config_template_storage_option_dto.dart b/mobile/openapi/lib/model/system_config_template_storage_option_dto.dart index a0a799bd0..721e79869 100644 Binary files a/mobile/openapi/lib/model/system_config_template_storage_option_dto.dart and b/mobile/openapi/lib/model/system_config_template_storage_option_dto.dart differ diff --git a/mobile/openapi/lib/model/tag_response_dto.dart b/mobile/openapi/lib/model/tag_response_dto.dart index 69626a2fc..352b0e5aa 100644 Binary files a/mobile/openapi/lib/model/tag_response_dto.dart and b/mobile/openapi/lib/model/tag_response_dto.dart differ diff --git a/mobile/openapi/lib/model/update_album_dto.dart b/mobile/openapi/lib/model/update_album_dto.dart index 7f2ab6810..17c181997 100644 Binary files a/mobile/openapi/lib/model/update_album_dto.dart and b/mobile/openapi/lib/model/update_album_dto.dart differ diff --git a/mobile/openapi/lib/model/update_asset_dto.dart b/mobile/openapi/lib/model/update_asset_dto.dart index cb7fd1c88..dad7b2c3e 100644 Binary files a/mobile/openapi/lib/model/update_asset_dto.dart and b/mobile/openapi/lib/model/update_asset_dto.dart differ diff --git a/mobile/openapi/lib/model/update_tag_dto.dart b/mobile/openapi/lib/model/update_tag_dto.dart index a651405ec..20696fe1b 100644 Binary files a/mobile/openapi/lib/model/update_tag_dto.dart and b/mobile/openapi/lib/model/update_tag_dto.dart differ diff --git a/mobile/openapi/lib/model/update_user_dto.dart b/mobile/openapi/lib/model/update_user_dto.dart index bfb19c734..edc529810 100644 Binary files a/mobile/openapi/lib/model/update_user_dto.dart and b/mobile/openapi/lib/model/update_user_dto.dart differ diff --git a/mobile/openapi/lib/model/upsert_device_info_dto.dart b/mobile/openapi/lib/model/upsert_device_info_dto.dart index 7d642d28c..d9fc14a61 100644 Binary files a/mobile/openapi/lib/model/upsert_device_info_dto.dart and b/mobile/openapi/lib/model/upsert_device_info_dto.dart differ diff --git a/mobile/openapi/lib/model/usage_by_user_dto.dart b/mobile/openapi/lib/model/usage_by_user_dto.dart index 6657b946e..e18ac81de 100644 Binary files a/mobile/openapi/lib/model/usage_by_user_dto.dart and b/mobile/openapi/lib/model/usage_by_user_dto.dart differ diff --git a/mobile/openapi/lib/model/user_count_response_dto.dart b/mobile/openapi/lib/model/user_count_response_dto.dart index ba11a4c36..81b0f488a 100644 Binary files a/mobile/openapi/lib/model/user_count_response_dto.dart and b/mobile/openapi/lib/model/user_count_response_dto.dart differ diff --git a/mobile/openapi/lib/model/user_response_dto.dart b/mobile/openapi/lib/model/user_response_dto.dart index f00efadf2..a9e80c593 100644 Binary files a/mobile/openapi/lib/model/user_response_dto.dart and b/mobile/openapi/lib/model/user_response_dto.dart differ diff --git a/mobile/openapi/lib/model/validate_access_token_response_dto.dart b/mobile/openapi/lib/model/validate_access_token_response_dto.dart index b3f9f9735..a32f2d914 100644 Binary files a/mobile/openapi/lib/model/validate_access_token_response_dto.dart and b/mobile/openapi/lib/model/validate_access_token_response_dto.dart differ diff --git a/mobile/openapi/test/api_key_response_dto_test.dart b/mobile/openapi/test/api_key_response_dto_test.dart index 6862afa7a..a9c7b7e85 100644 Binary files a/mobile/openapi/test/api_key_response_dto_test.dart and b/mobile/openapi/test/api_key_response_dto_test.dart differ diff --git a/server/apps/immich/src/api-v1/api-key/repsonse-dto/api-key-response.dto.ts b/server/apps/immich/src/api-v1/api-key/repsonse-dto/api-key-response.dto.ts index bc1b6b312..31a43df1b 100644 --- a/server/apps/immich/src/api-v1/api-key/repsonse-dto/api-key-response.dto.ts +++ b/server/apps/immich/src/api-v1/api-key/repsonse-dto/api-key-response.dto.ts @@ -1,6 +1,8 @@ import { APIKeyEntity } from '@app/database'; +import { ApiProperty } from '@nestjs/swagger'; export class APIKeyResponseDto { + @ApiProperty({ type: 'integer' }) id!: number; name!: string; createdAt!: string; diff --git a/server/apps/immich/src/api-v1/user/user.core.ts b/server/apps/immich/src/api-v1/user/user.core.ts index df5804184..a263b3b27 100644 --- a/server/apps/immich/src/api-v1/user/user.core.ts +++ b/server/apps/immich/src/api-v1/user/user.core.ts @@ -35,25 +35,12 @@ export class UserCore { } } - const user = await this.userRepository.get(id); - if (!user) { - throw new NotFoundException('User not found'); - } - try { if (dto.password) { dto.password = await hash(dto.password, SALT_ROUNDS); } - user.password = dto.password ?? user.password; - user.email = dto.email ?? user.email; - user.firstName = dto.firstName ?? user.firstName; - user.lastName = dto.lastName ?? user.lastName; - user.isAdmin = dto.isAdmin ?? user.isAdmin; - user.shouldChangePassword = dto.shouldChangePassword ?? user.shouldChangePassword; - user.profileImagePath = dto.profileImagePath ?? user.profileImagePath; - - return this.userRepository.update(id, user); + return this.userRepository.update(id, dto); } catch (e) { Logger.error(e, 'Failed to update user info'); throw new InternalServerErrorException('Failed to update user info'); diff --git a/server/bin/generate-open-api.sh b/server/bin/generate-open-api.sh new file mode 100755 index 000000000..bc693269e --- /dev/null +++ b/server/bin/generate-open-api.sh @@ -0,0 +1,24 @@ +#!/bin/bash + +function mobile { + rm -rf ../mobile/openapi + cd ./openapi-generator/templates/serialization/native + wget -O native_class.mustache https://raw.githubusercontent.com/OpenAPITools/openapi-generator/master/modules/openapi-generator/src/main/resources/dart2/serialization/native/native_class.mustache + patch -u native_class.mustache dart_constructor}} +{{#vars}} + {{#description}} + /// {{{.}}} + {{/description}} + {{^isEnum}} + {{#minimum}} + {{#description}} + /// + {{/description}} + /// Minimum value: {{{.}}} + {{/minimum}} + {{#maximum}} + {{#description}} + {{^minimum}} + /// + {{/minimum}} + {{/description}} + /// Maximum value: {{{.}}} + {{/maximum}} + {{^isNullable}} + {{^required}} + {{^defaultValue}} + /// + /// Please note: This property should have been non-nullable! Since the specification file + /// does not include a default value (using the "default:" property), however, the generated + /// source code must fall back to having a nullable type. + /// Consider adding a "default:" property in the specification file to hide this note. + /// + {{/defaultValue}} + {{/required}} + {{/isNullable}} + {{/isEnum}} + {{{datatypeWithEnum}}}{{#isNullable}}?{{/isNullable}}{{^isNullable}}{{^required}}{{^defaultValue}}?{{/defaultValue}}{{/required}}{{/isNullable}} {{{name}}}; + +{{/vars}} + @override + bool operator ==(Object other) => identical(this, other) || other is {{{classname}}} && + {{#vars}} + other.{{{name}}} == {{{name}}}{{^-last}} &&{{/-last}}{{#-last}};{{/-last}} + {{/vars}} + + @override + int get hashCode => + // ignore: unnecessary_parenthesis + {{#vars}} + ({{#isNullable}}{{{name}}} == null ? 0 : {{/isNullable}}{{^isNullable}}{{^required}}{{^defaultValue}}{{{name}}} == null ? 0 : {{/defaultValue}}{{/required}}{{/isNullable}}{{{name}}}{{#isNullable}}!{{/isNullable}}{{^isNullable}}{{^required}}{{^defaultValue}}!{{/defaultValue}}{{/required}}{{/isNullable}}.hashCode){{^-last}} +{{/-last}}{{#-last}};{{/-last}} + {{/vars}} + + @override + String toString() => '{{{classname}}}[{{#vars}}{{{name}}}=${{{name}}}{{^-last}}, {{/-last}}{{/vars}}]'; + + Map toJson() { + final json = {}; + {{#vars}} + {{#isNullable}} + if (this.{{{name}}} != null) { + {{/isNullable}} + {{^isNullable}} + {{^required}} + {{^defaultValue}} + if (this.{{{name}}} != null) { + {{/defaultValue}} + {{/required}} + {{/isNullable}} + {{#isDateTime}} + {{#pattern}} + json[r'{{{baseName}}}'] = _dateEpochMarker == '{{{pattern}}}' + ? this.{{{name}}}{{#isNullable}}!{{/isNullable}}{{^isNullable}}{{^required}}{{^defaultValue}}!{{/defaultValue}}{{/required}}{{/isNullable}}.millisecondsSinceEpoch + : this.{{{name}}}{{#isNullable}}!{{/isNullable}}{{^isNullable}}{{^required}}{{^defaultValue}}!{{/defaultValue}}{{/required}}{{/isNullable}}.toUtc().toIso8601String(); + {{/pattern}} + {{^pattern}} + json[r'{{{baseName}}}'] = this.{{{name}}}{{#isNullable}}!{{/isNullable}}{{^isNullable}}{{^required}}{{^defaultValue}}!{{/defaultValue}}{{/required}}{{/isNullable}}.toUtc().toIso8601String(); + {{/pattern}} + {{/isDateTime}} + {{#isDate}} + {{#pattern}} + json[r'{{{baseName}}}'] = _dateEpochMarker == '{{{pattern}}}' + ? this.{{{name}}}{{#isNullable}}!{{/isNullable}}{{^isNullable}}{{^required}}{{^defaultValue}}!{{/defaultValue}}{{/required}}{{/isNullable}}.millisecondsSinceEpoch + : _dateFormatter.format(this.{{{name}}}{{#isNullable}}!{{/isNullable}}{{^isNullable}}{{^required}}{{^defaultValue}}!{{/defaultValue}}{{/required}}{{/isNullable}}.toUtc()); + {{/pattern}} + {{^pattern}} + json[r'{{{baseName}}}'] = _dateFormatter.format(this.{{{name}}}{{#isNullable}}!{{/isNullable}}{{^isNullable}}{{^required}}{{^defaultValue}}!{{/defaultValue}}{{/required}}{{/isNullable}}.toUtc()); + {{/pattern}} + {{/isDate}} + {{^isDateTime}} + {{^isDate}} + json[r'{{{baseName}}}'] = this.{{{name}}}; + {{/isDate}} + {{/isDateTime}} + {{#isNullable}} + } else { + // json[r'{{{baseName}}}'] = null; + } + {{/isNullable}} + {{^isNullable}} + {{^required}} + {{^defaultValue}} + } else { + // json[r'{{{baseName}}}'] = null; + } + {{/defaultValue}} + {{/required}} + {{/isNullable}} + {{/vars}} + return json; + } + + /// Returns a new [{{{classname}}}] instance and imports its values from + /// [value] if it's a [Map], null otherwise. + // ignore: prefer_constructors_over_static_methods + static {{{classname}}}? fromJson(dynamic value) { + if (value is Map) { + final json = value.cast(); + + // Ensure that the map contains the required keys. + // Note 1: the values aren't checked for validity beyond being non-null. + // Note 2: this code is stripped in release mode! + assert(() { + requiredKeys.forEach((key) { + assert(json.containsKey(key), 'Required key "{{{classname}}}[$key]" is missing from JSON.'); + assert(json[key] != null, 'Required key "{{{classname}}}[$key]" has a null value in JSON.'); + }); + return true; + }()); + + return {{{classname}}}( + {{#vars}} + {{#isDateTime}} + {{{name}}}: mapDateTime(json, r'{{{baseName}}}', '{{{pattern}}}'){{#required}}{{^isNullable}}!{{/isNullable}}{{/required}}{{^required}}{{#defaultValue}} ?? {{{.}}}{{/defaultValue}}{{/required}}, + {{/isDateTime}} + {{#isDate}} + {{{name}}}: mapDateTime(json, r'{{{baseName}}}', '{{{pattern}}}'){{#required}}{{^isNullable}}!{{/isNullable}}{{/required}}{{^required}}{{#defaultValue}} ?? {{{.}}}{{/defaultValue}}{{/required}}, + {{/isDate}} + {{^isDateTime}} + {{^isDate}} + {{#complexType}} + {{#isArray}} + {{#items.isArray}} + {{{name}}}: json[r'{{{baseName}}}'] is List + ? (json[r'{{{baseName}}}'] as List).map((e) => + {{#items.complexType}} + {{items.complexType}}.listFromJson(json[r'{{{baseName}}}']){{#required}}{{^isNullable}}!{{/isNullable}}{{/required}}{{^required}}{{#defaultValue}} ?? {{{.}}}{{/defaultValue}}{{/required}} + {{/items.complexType}} + {{^items.complexType}} + e == null ? {{#items.isNullable}}null{{/items.isNullable}}{{^items.isNullable}}const <{{items.items.dataType}}>[]{{/items.isNullable}} : (e as List).cast<{{items.items.dataType}}>() + {{/items.complexType}} + ).toList() + : {{#isNullable}}null{{/isNullable}}{{^isNullable}}const []{{/isNullable}}, + {{/items.isArray}} + {{^items.isArray}} + {{{name}}}: {{{complexType}}}.listFromJson(json[r'{{{baseName}}}']){{#required}}{{^isNullable}}!{{/isNullable}}{{/required}}{{^required}}{{#defaultValue}} ?? {{{.}}}{{/defaultValue}}{{/required}}, + {{/items.isArray}} + {{/isArray}} + {{^isArray}} + {{#isMap}} + {{#items.isArray}} + {{{name}}}: json[r'{{{baseName}}}'] == null + ? {{#defaultValue}}{{{.}}}{{/defaultValue}}{{^defaultValue}}null{{/defaultValue}} + {{#items.complexType}} + : {{items.complexType}}.mapListFromJson(json[r'{{{baseName}}}']), + {{/items.complexType}} + {{^items.complexType}} + : mapCastOfType(json, r'{{{baseName}}}'), + {{/items.complexType}} + {{/items.isArray}} + {{^items.isArray}} + {{#items.isMap}} + {{#items.complexType}} + {{{name}}}: {{items.complexType}}.mapFromJson(json[r'{{{baseName}}}']){{#required}}{{^isNullable}}!{{/isNullable}}{{/required}}{{^required}}{{#defaultValue}} ?? {{{.}}}{{/defaultValue}}{{/required}}, + {{/items.complexType}} + {{^items.complexType}} + {{{name}}}: mapCastOfType(json, r'{{{baseName}}}'){{#required}}{{^isNullable}}!{{/isNullable}}{{/required}}{{^required}}{{#defaultValue}} ?? {{{.}}}{{/defaultValue}}{{/required}}, + {{/items.complexType}} + {{/items.isMap}} + {{^items.isMap}} + {{#items.complexType}} + {{{name}}}: {{{items.complexType}}}.mapFromJson(json[r'{{{baseName}}}'{{#required}}{{^isNullable}}!{{/isNullable}}{{/required}}{{^required}}{{#defaultValue}}]) ?? {{{.}}}{{/defaultValue}}{{/required}}, + {{/items.complexType}} + {{^items.complexType}} + {{{name}}}: mapCastOfType(json, r'{{{baseName}}}'){{#required}}{{^isNullable}}!{{/isNullable}}{{/required}}{{^required}}{{#defaultValue}} ?? {{{.}}}{{/defaultValue}}{{/required}}, + {{/items.complexType}} + {{/items.isMap}} + {{/items.isArray}} + {{/isMap}} + {{^isMap}} + {{#isBinary}} + {{{name}}}: null, // No support for decoding binary content from JSON + {{/isBinary}} + {{^isBinary}} + {{{name}}}: {{{complexType}}}.fromJson(json[r'{{{baseName}}}']){{#required}}{{^isNullable}}!{{/isNullable}}{{/required}}{{^required}}{{#defaultValue}} ?? {{{.}}}{{/defaultValue}}{{/required}}, + {{/isBinary}} + {{/isMap}} + {{/isArray}} + {{/complexType}} + {{^complexType}} + {{#isArray}} + {{#isEnum}} + {{{name}}}: {{{items.datatypeWithEnum}}}.listFromJson(json[r'{{{baseName}}}']){{#required}}{{^isNullable}}!{{/isNullable}}{{/required}}{{^required}}{{#defaultValue}} ?? {{{.}}}{{/defaultValue}}{{/required}}, + {{/isEnum}} + {{^isEnum}} + {{{name}}}: json[r'{{{baseName}}}'] is {{#uniqueItems}}Set{{/uniqueItems}}{{^uniqueItems}}List{{/uniqueItems}} + ? (json[r'{{{baseName}}}'] as {{#uniqueItems}}Set{{/uniqueItems}}{{^uniqueItems}}List{{/uniqueItems}}).cast<{{{items.datatype}}}>() + : {{#defaultValue}}{{{.}}}{{/defaultValue}}{{^defaultValue}}null{{/defaultValue}}, + {{/isEnum}} + {{/isArray}} + {{^isArray}} + {{#isMap}} + {{{name}}}: mapCastOfType(json, r'{{{baseName}}}'){{#required}}{{^isNullable}}!{{/isNullable}}{{/required}}{{^required}}{{#defaultValue}} ?? {{{.}}}{{/defaultValue}}{{/required}}, + {{/isMap}} + {{^isMap}} + {{#isNumber}} + {{{name}}}: json[r'{{{baseName}}}'] == null + ? {{#defaultValue}}{{{.}}}{{/defaultValue}}{{^defaultValue}}null{{/defaultValue}} + : {{{datatypeWithEnum}}}.parse(json[r'{{{baseName}}}'].toString()), + {{/isNumber}} + {{^isNumber}} + {{^isEnum}} + {{{name}}}: mapValueOfType<{{{datatypeWithEnum}}}>(json, r'{{{baseName}}}'){{#required}}{{^isNullable}}!{{/isNullable}}{{/required}}{{^required}}{{#defaultValue}} ?? {{{.}}}{{/defaultValue}}{{/required}}, + {{/isEnum}} + {{#isEnum}} + {{{name}}}: {{{enumName}}}.fromJson(json[r'{{{baseName}}}']){{#required}}{{^isNullable}}!{{/isNullable}}{{/required}}{{^required}}{{#defaultValue}} ?? {{{.}}}{{/defaultValue}}{{/required}}, + {{/isEnum}} + {{/isNumber}} + {{/isMap}} + {{/isArray}} + {{/complexType}} + {{/isDate}} + {{/isDateTime}} + {{/vars}} + ); + } + return null; + } + + static List<{{{classname}}}>? listFromJson(dynamic json, {bool growable = false,}) { + final result = <{{{classname}}}>[]; + if (json is List && json.isNotEmpty) { + for (final row in json) { + final value = {{{classname}}}.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 = {{{classname}}}.fromJson(entry.value); + if (value != null) { + map[entry.key] = value; + } + } + } + return map; + } + + // maps a json object with a list of {{{classname}}}-objects as value to a dart map + static Map> mapListFromJson(dynamic json, {bool growable = false,}) { + final map = >{}; + if (json is Map && json.isNotEmpty) { + json = json.cast(); // ignore: parameter_assignments + for (final entry in json.entries) { + final value = {{{classname}}}.listFromJson(entry.value, growable: growable,); + if (value != null) { + map[entry.key] = value; + } + } + } + return map; + } + + /// The list of required keys that must be present in a JSON. + static const requiredKeys = { +{{#vars}} + {{#required}} + '{{{baseName}}}', + {{/required}} +{{/vars}} + }; +} +{{#vars}} + {{^isModel}} + {{#isEnum}} + {{^isContainer}} + +{{>serialization/native/native_enum_inline}} + {{/isContainer}} + {{#isContainer}} + {{#mostInnerItems}} + +{{>serialization/native/native_enum_inline}} + {{/mostInnerItems}} + {{/isContainer}} + {{/isEnum}} + {{/isModel}} +{{/vars}} diff --git a/server/openapi-generator/templates/serialization/native/native_class.mustache.patch b/server/openapi-generator/templates/serialization/native/native_class.mustache.patch new file mode 100644 index 000000000..11ecf0271 --- /dev/null +++ b/server/openapi-generator/templates/serialization/native/native_class.mustache.patch @@ -0,0 +1,19 @@ +--- native_class.mustache 2023-01-04 09:58:25.683944036 -0500 ++++ native_class1.mustache 2023-01-04 09:59:43.856353945 -0500 +@@ -91,14 +91,14 @@ + {{/isDateTime}} + {{#isNullable}} + } else { +- json[r'{{{baseName}}}'] = null; ++ // json[r'{{{baseName}}}'] = null; + } + {{/isNullable}} + {{^isNullable}} + {{^required}} + {{^defaultValue}} + } else { +- json[r'{{{baseName}}}'] = null; ++ // json[r'{{{baseName}}}'] = null; + } + {{/defaultValue}} + {{/required}} diff --git a/server/package.json b/server/package.json index 1229f23c5..9a0efc48a 100644 --- a/server/package.json +++ b/server/package.json @@ -27,9 +27,9 @@ "test:debug": "node --inspect-brk -r tsconfig-paths/register -r ts-node/register node_modules/.bin/jest --runInBand", "test:e2e": "jest --config ./apps/immich/test/jest-e2e.json", "typeorm": "node --require ts-node/register ./node_modules/typeorm/cli.js", - "api:typescript": "rm -rf ../web/src/api/open-api && npx openapi-generator-cli generate -g typescript-axios -i ./immich-openapi-specs.json -o ../web/src/api/open-api", - "api:dart": "rm -rf ../mobile/openapi && npx openapi-generator-cli generate -g dart -i ./immich-openapi-specs.json -o ../mobile/openapi", - "api:generate": "npm run api:typescript && npm run api:dart" + "api:typescript": "bash ./bin/generate-open-api.sh web", + "api:dart": "bash ./bin/generate-open-api.sh mobile", + "api:generate": "bash ./bin/generate-open-api.sh" }, "dependencies": { "@nestjs/bull": "^0.5.5",