@@ -17,6 +17,7 @@ final class AuthSessionRepositoryImpl: AuthSessionRepository {
1717 private let todoCategoryService : TodoCategoryService
1818 private let store : MemoryCacheStore
1919 private let provider : AuthSessionStateProvider
20+ private var cancellables = Set < AnyCancellable > ( )
2021
2122 init (
2223 authService: AuthService ,
@@ -28,30 +29,34 @@ final class AuthSessionRepositoryImpl: AuthSessionRepository {
2829 self . todoCategoryService = todoCategoryService
2930 self . store = store
3031 self . provider = provider
32+
33+ setupObservation ( )
3134 }
3235
3336 func observeSignedIn( ) -> AnyPublisher < Bool , Never > {
37+ provider. observeSignedIn ( )
38+ }
39+ }
40+
41+ private extension AuthSessionRepositoryImpl {
42+ func setupObservation( ) {
3443 authService. observeSignedIn ( )
3544 . removeDuplicates ( )
36- . map { [ self ] isSignedIn in
37- Future { promise in
38- Task {
39- if isSignedIn {
40- await self . cachePreferencesIfNeeded ( )
41- } else {
42- self . clearPreferencesCache ( )
43- }
44- self . provider. publish ( isSignedIn)
45- promise ( . success( isSignedIn) )
45+ . sink { [ weak self] isSignedIn in
46+ Task { [ weak self] in
47+ guard let self else { return }
48+
49+ if isSignedIn {
50+ await self . cachePreferencesIfNeeded ( )
51+ } else {
52+ self . clearPreferencesCache ( )
4653 }
54+ self . provider. publish ( isSignedIn)
4755 }
4856 }
49- . switchToLatest ( )
50- . eraseToAnyPublisher ( )
57+ . store ( in: & cancellables)
5158 }
52- }
5359
54- private extension AuthSessionRepositoryImpl {
5560 func cachePreferencesIfNeeded( ) async {
5661 if store. value ( forKey: Key . preferences) as [ TodoCategoryPreferenceResponse ] ? != nil {
5762 return
0 commit comments