11using Upsilon . Apps . Passkey . Core . Utils ;
2+ using Upsilon . Apps . Passkey . Interfaces . Enums ;
23
34namespace Upsilon . Apps . Passkey . Core . Models
45{
@@ -13,7 +14,6 @@ internal Database Database
1314 public Dictionary < string , List < Change > > Changes { get ; set ; } = [ ] ;
1415
1516 internal T UpdateValue < T > ( string itemId ,
16- string itemName ,
1717 string fieldName ,
1818 bool needsReview ,
1919 T oldValue ,
@@ -23,53 +23,45 @@ internal T UpdateValue<T>(string itemId,
2323 if ( Database . SerializationCenter . AreDifferent ( oldValue , newValue ) )
2424 {
2525 _addChange ( itemId ,
26- itemName ,
27- string . Empty ,
2826 fieldName ,
2927 oldValue . SerializeWith ( Database . SerializationCenter ) ,
3028 newValue . SerializeWith ( Database . SerializationCenter ) ,
3129 readableValue ,
3230 needsReview ,
33- Change . Type . Update ) ;
31+ LogEventType . ItemUpdated ) ;
3432 }
3533
3634 return newValue ;
3735 }
3836
3937 internal T AddValue < T > ( string itemId ,
40- string itemName ,
41- string containerName ,
38+ string readableValue ,
4239 bool needsReview ,
4340 T value ) where T : notnull
4441 {
45- _addChange ( itemId , itemName , containerName , string . Empty , value . SerializeWith ( Database . SerializationCenter ) , string . Empty , needsReview , Change . Type . Add ) ;
42+ _addChange ( itemId , string . Empty , value . SerializeWith ( Database . SerializationCenter ) , readableValue , needsReview , LogEventType . ItemAdded ) ;
4643
4744 return value ;
4845 }
4946
5047 internal T DeleteValue < T > ( string itemId ,
51- string itemName ,
52- string containerName ,
48+ string readableValue ,
5349 bool needsReview ,
5450 T value ) where T : notnull
5551 {
56- _addChange ( itemId , itemName , containerName , string . Empty , value . SerializeWith ( Database . SerializationCenter ) , string . Empty , needsReview , Change . Type . Delete ) ;
52+ _addChange ( itemId , string . Empty , value . SerializeWith ( Database . SerializationCenter ) , readableValue , needsReview , LogEventType . ItemDeleted ) ;
5753
5854 return value ;
5955 }
6056
6157 private void _addChange ( string itemId ,
62- string itemName ,
63- string containerName ,
6458 string fieldName ,
6559 string newValue ,
6660 string readableValue ,
6761 bool needsReview ,
68- Change . Type action )
62+ LogEventType action )
6963 {
7064 _addChange ( itemId ,
71- itemName ,
72- containerName ,
7365 fieldName ,
7466 null ,
7567 newValue ,
@@ -79,14 +71,12 @@ private void _addChange(string itemId,
7971 }
8072
8173 private void _addChange ( string itemId ,
82- string itemName ,
83- string containerName ,
8474 string fieldName ,
8575 string ? oldValue ,
8676 string newValue ,
8777 string readableValue ,
8878 bool needsReview ,
89- Change . Type action )
79+ LogEventType action )
9080 {
9181 string changeKey = $ "{ itemId } \t { fieldName } ";
9282 if ( ! Changes . ContainsKey ( changeKey ) )
@@ -106,26 +96,44 @@ private void _addChange(string itemId,
10696
10797 _mergeChanges ( changeKey , currentChange ) ;
10898
109- if ( Database . AutoSaveFileLocker == null )
99+ Database . FileLocker . Save ( this , Database . AutoSaveFileEntry , Database . Passkeys ) ;
100+
101+ if ( itemId == Database . User ? . ItemId )
110102 {
111- Database . AutoSaveFileLocker = new ( Database . CryptographyCenter , Database . SerializationCenter , Database . AutoSaveFile , FileMode . OpenOrCreate ) ;
103+ if ( Database . User is not null )
104+ {
105+ itemId = Database . User . ToString ( ) ;
106+ }
112107 }
108+ else if ( itemId . StartsWith ( 'S' ) )
109+ {
110+ Service ? s = Database . User ? . Services . FirstOrDefault ( x => x . ItemId == itemId ) ;
113111
114- Database . AutoSaveFileLocker . Save ( this , Database . Passkeys ) ;
115- string logMessage = action switch
112+ if ( s is not null )
113+ {
114+ itemId = s . ToString ( ) ;
115+ }
116+ }
117+ else if ( itemId . StartsWith ( 'A' ) )
116118 {
117- Change . Type . Add => $ "{ itemName } has been added to { containerName } ",
118- Change . Type . Delete => $ "{ itemName } has been removed from { containerName } ",
119- _ => $ "{ itemName } 's { fieldName . ToSentenceCase ( ) . ToLower ( ) } has been { ( string . IsNullOrWhiteSpace ( readableValue ) ? $ "updated" : $ "set to { readableValue } ") } ",
120- } ;
121- Database . Logs . AddLog ( logMessage , needsReview ) ;
119+ Account ? a = Database . User ? . Services . SelectMany ( x => x . Accounts ) . FirstOrDefault ( x => x . ItemId == itemId ) ;
120+
121+ if ( a is not null )
122+ {
123+ itemId = a . ToString ( ) ;
124+ }
125+ }
126+
127+ Database . Logs . AddLog ( data : [ itemId , fieldName , readableValue ] ,
128+ eventType : action ,
129+ needsReview ) ;
122130 }
123131
124132 private void _mergeChanges ( string changeKey , Change currentChange )
125133 {
126- Change ? lastUpdate = Changes [ changeKey ] . LastOrDefault ( x => x . ActionType == Change . Type . Update ) ;
134+ Change ? lastUpdate = Changes [ changeKey ] . LastOrDefault ( x => x . ActionType == LogEventType . ItemUpdated ) ;
127135
128- if ( currentChange . ActionType != Change . Type . Update
136+ if ( currentChange . ActionType != LogEventType . ItemUpdated
129137 || lastUpdate is null )
130138 {
131139 Changes [ changeKey ] . Add ( currentChange ) ;
@@ -147,7 +155,7 @@ private void _mergeChanges(string changeKey, Change currentChange)
147155
148156 internal void ApplyChanges ( bool deleteFile )
149157 {
150- List < Change > changes = Changes . Values . SelectMany ( x => x ) . OrderBy ( x => x . Index ) . ToList ( ) ;
158+ List < Change > changes = [ .. Changes . Values . SelectMany ( x => x ) . OrderBy ( x => x . Index ) ] ;
151159
152160 foreach ( Change change in changes )
153161 {
@@ -170,13 +178,10 @@ internal void Clear(bool deleteFile)
170178 {
171179 Changes . Clear ( ) ;
172180
173- Database . AutoSaveFileLocker ? . Dispose ( ) ;
174- Database . AutoSaveFileLocker = null ;
175-
176181 if ( deleteFile
177- && File . Exists ( Database . AutoSaveFile ) )
182+ && Database . FileLocker . Exists ( Database . AutoSaveFileEntry ) )
178183 {
179- File . Delete ( Database . AutoSaveFile ) ;
184+ Database . FileLocker . Delete ( Database . AutoSaveFileEntry ) ;
180185 }
181186 }
182187 }
0 commit comments