diff --git a/mobile/lib/infrastructure/repositories/sync_stream.repository.dart b/mobile/lib/infrastructure/repositories/sync_stream.repository.dart index 067f84017..54bc01cfa 100644 --- a/mobile/lib/infrastructure/repositories/sync_stream.repository.dart +++ b/mobile/lib/infrastructure/repositories/sync_stream.repository.dart @@ -20,8 +20,8 @@ import 'package:immich_mobile/infrastructure/entities/user.entity.drift.dart'; import 'package:immich_mobile/infrastructure/entities/user_metadata.entity.drift.dart'; import 'package:immich_mobile/infrastructure/repositories/db.repository.dart'; import 'package:logging/logging.dart'; -import 'package:openapi/api.dart' as api show AssetVisibility, AlbumUserRole; -import 'package:openapi/api.dart' hide AssetVisibility, AlbumUserRole; +import 'package:openapi/api.dart' as api show AssetVisibility, AlbumUserRole, UserMetadataKey; +import 'package:openapi/api.dart' hide AssetVisibility, AlbumUserRole, UserMetadataKey; class SyncStreamRepository extends DriftDatabaseRepository { final Logger _logger = Logger('DriftSyncStreamRepository'); @@ -647,11 +647,11 @@ extension on api.AssetVisibility { }; } -extension on String { +extension on api.UserMetadataKey { UserMetadataKey toUserMetadataKey() => switch (this) { - "onboarding" => UserMetadataKey.onboarding, - "preferences" => UserMetadataKey.preferences, - "license" => UserMetadataKey.license, + api.UserMetadataKey.onboarding => UserMetadataKey.onboarding, + api.UserMetadataKey.preferences => UserMetadataKey.preferences, + api.UserMetadataKey.license => UserMetadataKey.license, _ => throw Exception('Unknown UserMetadataKey value: $this'), }; } diff --git a/mobile/openapi/README.md b/mobile/openapi/README.md index 62c48bf29..3181b03a4 100644 Binary files a/mobile/openapi/README.md and b/mobile/openapi/README.md differ diff --git a/mobile/openapi/lib/api.dart b/mobile/openapi/lib/api.dart index 8b8acc004..8c1fa1a80 100644 Binary files a/mobile/openapi/lib/api.dart and b/mobile/openapi/lib/api.dart differ diff --git a/mobile/openapi/lib/api_client.dart b/mobile/openapi/lib/api_client.dart index d9cae66dd..bd306cb21 100644 Binary files a/mobile/openapi/lib/api_client.dart and b/mobile/openapi/lib/api_client.dart differ diff --git a/mobile/openapi/lib/api_helper.dart b/mobile/openapi/lib/api_helper.dart index 1618f4a67..098d32f4f 100644 Binary files a/mobile/openapi/lib/api_helper.dart and b/mobile/openapi/lib/api_helper.dart differ diff --git a/mobile/openapi/lib/model/sync_user_metadata_delete_v1.dart b/mobile/openapi/lib/model/sync_user_metadata_delete_v1.dart index e9dd73329..f39acc617 100644 Binary files a/mobile/openapi/lib/model/sync_user_metadata_delete_v1.dart and b/mobile/openapi/lib/model/sync_user_metadata_delete_v1.dart differ diff --git a/mobile/openapi/lib/model/sync_user_metadata_v1.dart b/mobile/openapi/lib/model/sync_user_metadata_v1.dart index 0b060dc17..cf39b6d96 100644 Binary files a/mobile/openapi/lib/model/sync_user_metadata_v1.dart and b/mobile/openapi/lib/model/sync_user_metadata_v1.dart differ diff --git a/mobile/openapi/lib/model/user_metadata_key.dart b/mobile/openapi/lib/model/user_metadata_key.dart new file mode 100644 index 000000000..845b5ae9b Binary files /dev/null and b/mobile/openapi/lib/model/user_metadata_key.dart differ diff --git a/open-api/immich-openapi-specs.json b/open-api/immich-openapi-specs.json index 53a91a401..35f84ec25 100644 --- a/open-api/immich-openapi-specs.json +++ b/open-api/immich-openapi-specs.json @@ -14403,7 +14403,11 @@ "SyncUserMetadataDeleteV1": { "properties": { "key": { - "type": "string" + "allOf": [ + { + "$ref": "#/components/schemas/UserMetadataKey" + } + ] }, "userId": { "type": "string" @@ -14418,7 +14422,11 @@ "SyncUserMetadataV1": { "properties": { "key": { - "type": "string" + "allOf": [ + { + "$ref": "#/components/schemas/UserMetadataKey" + } + ] }, "userId": { "type": "string" @@ -16132,6 +16140,14 @@ ], "type": "object" }, + "UserMetadataKey": { + "enum": [ + "preferences", + "license", + "onboarding" + ], + "type": "string" + }, "UserPreferencesResponseDto": { "properties": { "albums": { diff --git a/server/src/dtos/sync.dto.ts b/server/src/dtos/sync.dto.ts index 8614bd577..92aea8f5e 100644 --- a/server/src/dtos/sync.dto.ts +++ b/server/src/dtos/sync.dto.ts @@ -301,14 +301,16 @@ export class SyncAssetFaceDeleteV1 { @ExtraModel() export class SyncUserMetadataV1 { userId!: string; - key!: string; + @ValidateEnum({ enum: UserMetadataKey, name: 'UserMetadataKey' }) + key!: UserMetadataKey; value!: UserMetadata[UserMetadataKey]; } @ExtraModel() export class SyncUserMetadataDeleteV1 { userId!: string; - key!: string; + @ValidateEnum({ enum: UserMetadataKey, name: 'UserMetadataKey' }) + key!: UserMetadataKey; } @ExtraModel() diff --git a/server/src/schema/tables/user-metadata-audit.table.ts b/server/src/schema/tables/user-metadata-audit.table.ts index de7d21c87..63f503ab8 100644 --- a/server/src/schema/tables/user-metadata-audit.table.ts +++ b/server/src/schema/tables/user-metadata-audit.table.ts @@ -1,4 +1,5 @@ import { PrimaryGeneratedUuidV7Column } from 'src/decorators'; +import { UserMetadataKey } from 'src/enum'; import { Column, CreateDateColumn, Generated, Table, Timestamp } from 'src/sql-tools'; @Table('user_metadata_audit') @@ -10,7 +11,7 @@ export class UserMetadataAuditTable { userId!: string; @Column({ indexName: 'IDX_user_metadata_audit_key' }) - key!: string; + key!: UserMetadataKey; @CreateDateColumn({ default: () => 'clock_timestamp()', indexName: 'IDX_user_metadata_audit_deleted_at' }) deletedAt!: Generated;