1
+ using Core . Extensions ;
2
+ using Core . Models . UserPreferences ;
3
+ using Infrastructure . Persistence . Mongo . Entities . Preferences ;
4
+ using MongoDB . Bson ;
5
+
6
+ namespace Core . Mappers ;
7
+
8
+ public static class UserPreferencesChannelMapper
9
+ {
10
+ public static ChannelDescriptorBaseDto ToDto ( ChannelDescriptorBase e )
11
+ {
12
+ return new ChannelDescriptorBaseDto
13
+ {
14
+ Enabled = e . Enabled ,
15
+ Description = e . Description ,
16
+ Metadata = e . Metadata
17
+ } ;
18
+ }
19
+
20
+ public static ChannelDescriptorBase ToEntity ( ChannelDescriptorBaseDto dto )
21
+ {
22
+ return new ChannelDescriptorBase
23
+ {
24
+ Enabled = dto . Enabled ,
25
+ Description = dto . Description ,
26
+ Metadata = dto . Metadata
27
+ } ;
28
+ }
29
+ }
30
+
31
+ public static class UserPreferencesMapper
32
+ {
33
+ internal static UserPreferencesDto ToDto ( UserPreferences e )
34
+ {
35
+ return new UserPreferencesDto
36
+ {
37
+ Id = e . Id . ToString ( ) ,
38
+ UserId = e . UserId ,
39
+ Channels = e . Channels . ToDictionary ( x => x . Key , d => UserPreferencesChannelMapper . ToDto ( d . Value ) )
40
+ } ;
41
+ }
42
+
43
+ public static UserPreferences UpdateEntity ( UserPreferences e , UserPreferencesDto dto )
44
+ {
45
+ var channels = e . Channels ;
46
+ foreach ( var ch in dto . Channels )
47
+ {
48
+ var metadataKeys = ch . Value . Metadata ? . Keys . ToArray ( ) ! ;
49
+ foreach ( var mk in metadataKeys )
50
+ {
51
+ var normalized = mk . ToPascalCase ( ) ;
52
+
53
+ if ( ! mk . Equals ( normalized ) )
54
+ {
55
+ ch . Value . Metadata ! [ normalized ] = ch . Value . Metadata [ mk ] ;
56
+ ch . Value . Metadata . Remove ( mk ) ;
57
+ }
58
+ }
59
+
60
+ var normalizedKey = ch . Key . ToPascalCase ( ) ;
61
+ if ( channels . TryGetValue ( normalizedKey , out var channel ) )
62
+ {
63
+ channel . Enabled = ch . Value . Enabled ;
64
+ channel . Description = ch . Value . Description ;
65
+ channel . Metadata = ch . Value . Metadata ;
66
+ }
67
+ else
68
+ {
69
+ channels . Add ( normalizedKey , new ChannelDescriptorBase
70
+ {
71
+ Enabled = ch . Value . Enabled ,
72
+ Description = ch . Value . Description ,
73
+ Metadata = ch . Value . Metadata
74
+ } ) ;
75
+ }
76
+ }
77
+
78
+ return e with { LastUpdated = DateTimeOffset . UtcNow , Channels = channels } ;
79
+ }
80
+
81
+ public static UserPreferences ToEntity ( UserPreferencesDto dto )
82
+ {
83
+ var id = string . IsNullOrEmpty ( dto . Id )
84
+ ? ObjectId . GenerateNewId ( )
85
+ : ObjectId . Parse ( dto . Id ) ;
86
+
87
+ return new UserPreferences
88
+ {
89
+ Id = id ,
90
+ UserId = dto . UserId ,
91
+ Channels = dto . Channels . ToDictionary ( x => x . Key , d => UserPreferencesChannelMapper . ToEntity ( d . Value ) ) ,
92
+ LastUpdated = DateTimeOffset . UtcNow
93
+ } ;
94
+ }
95
+ }
0 commit comments