ReadKeep/readeck/Domain/UseCase/OfflineBookmarkSyncUseCase.swift
Ilyas Hallak ffb41347af refactor: Implement state machine architecture for offline sync
- Replace multiple boolean properties with single OfflineBookmarkSyncState enum
- Add Use Case pattern for OfflineSyncManager with dependency injection
- Simplify LocalBookmarksSyncView using state-driven UI with external bindings
- Convert OfflineBookmarksViewModel to use @Observable instead of ObservableObject
- Move credentials from Core Data to Keychain for better persistence
- Implement comprehensive database migration for App Group containers
- Add structured logging throughout sync operations and API calls

Architecture improvements follow MVVM principles with clean separation of concerns.
2025-08-18 22:58:42 +02:00

30 lines
830 B
Swift

import Foundation
import Combine
protocol POfflineBookmarkSyncUseCase {
var isSyncing: AnyPublisher<Bool, Never> { get }
var syncStatus: AnyPublisher<String?, Never> { get }
func getOfflineBookmarksCount() -> Int
func syncOfflineBookmarks() async
}
class OfflineBookmarkSyncUseCase: POfflineBookmarkSyncUseCase {
private let syncManager = OfflineSyncManager.shared
var isSyncing: AnyPublisher<Bool, Never> {
syncManager.$isSyncing.eraseToAnyPublisher()
}
var syncStatus: AnyPublisher<String?, Never> {
syncManager.$syncStatus.eraseToAnyPublisher()
}
func getOfflineBookmarksCount() -> Int {
return syncManager.getOfflineBookmarksCount()
}
func syncOfflineBookmarks() async {
await syncManager.syncOfflineBookmarks()
}
}