@@ -21,32 +21,28 @@ final class DefaultUserRepository {
2121
2222extension DefaultUserRepository : UserRepository {
2323 func isLoggedIn( ) -> BehaviorRelay < String ? > {
24- return self . networkService. uid
24+ return networkService. uid
2525 }
2626
2727 func readUser( ) -> Observable < User > {
2828 return self . persistentStorage. fetchUserInfo ( )
29- . catch { _ in
30- return self . networkService . read ( type : UserDTO . self, userCase : . currentUser , access : . userInfo , filter : nil )
31- . map { $0 . toDomain ( ) }
29+ . catch { [ weak self ] _ in
30+ guard let self = self else { return Observable . just ( User ( ) ) }
31+ return self . fetchUserNetworkService ( )
3232 }
3333 }
3434
3535 func updateUser( by user: User ) -> Observable < User > {
36- return self . persistentStorage. updateUserInfo ( user: user)
36+ return persistentStorage. updateUserInfo ( user: user)
3737 . asObservable ( )
38- . concatMap { _ in
39- return self . networkService. update ( userCase: . currentUser, access: . userInfo, dto: user. toDTO ( ) )
40- . map { $0. toDomain ( ) }
41- . asObservable ( )
42- }
38+ . flatMap ( updateUserNetworkService ( user: ) )
4339 }
4440
4541 func fetchUser( by uuid: String ) -> Observable < User > {
46- return self . networkService. read ( type: UserDTO . self,
47- userCase: . anotherUser( uuid) ,
48- access: . userInfo,
49- filter: nil )
42+ return networkService. read ( type: UserDTO . self,
43+ userCase: . anotherUser( uuid) ,
44+ access: . userInfo,
45+ filter: nil )
5046 . map { $0. toDomain ( ) }
5147 }
5248}
@@ -62,3 +58,18 @@ extension DefaultUserRepository: ProtectedUserRepository {
6258 }
6359 }
6460}
61+
62+ private extension DefaultUserRepository {
63+ func fetchUserNetworkService( ) -> Observable < User > {
64+ networkService. read ( type: UserDTO . self, userCase: . currentUser, access: . userInfo, filter: nil )
65+ . map { $0. toDomain ( ) }
66+ }
67+
68+ func updateUserNetworkService( user: User ) -> Observable < User > {
69+ networkService. update ( userCase: . currentUser, access: . userInfo, dto: user. toDTO ( ) )
70+ . map { $0. toDomain ( ) }
71+ . asObservable ( )
72+ . catchAndReturn ( user)
73+ }
74+ }
75+
0 commit comments