fix(server): use UserMetadataKey enum instead of string (#20209)

* fix(server): use UserMetadataKey enum instead of string

* fix: mobile
This commit is contained in:
Daimolean 2025-07-25 23:04:28 +08:00 committed by GitHub
parent ed5759fe07
commit 25e2d37490
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
11 changed files with 30 additions and 11 deletions

View file

@ -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'),
};
}

BIN
mobile/openapi/README.md generated

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View file

@ -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": {

View file

@ -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()

View file

@ -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<Timestamp>;