- 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.
37 lines
1.0 KiB
Swift
37 lines
1.0 KiB
Swift
import Foundation
|
|
|
|
protocol PSaveSettingsUseCase {
|
|
func execute(selectedFontFamily: FontFamily, selectedFontSize: FontSize) async throws
|
|
func execute(enableTTS: Bool) async throws
|
|
func execute(theme: Theme) async throws
|
|
}
|
|
|
|
class SaveSettingsUseCase: PSaveSettingsUseCase {
|
|
private let settingsRepository: PSettingsRepository
|
|
|
|
init(settingsRepository: PSettingsRepository) {
|
|
self.settingsRepository = settingsRepository
|
|
}
|
|
|
|
func execute(selectedFontFamily: FontFamily, selectedFontSize: FontSize) async throws {
|
|
try await settingsRepository.saveSettings(
|
|
.init(
|
|
fontFamily: selectedFontFamily,
|
|
fontSize: selectedFontSize
|
|
)
|
|
)
|
|
}
|
|
|
|
func execute(enableTTS: Bool) async throws {
|
|
try await settingsRepository.saveSettings(
|
|
.init(enableTTS: enableTTS)
|
|
)
|
|
}
|
|
|
|
func execute(theme: Theme) async throws {
|
|
try await settingsRepository.saveSettings(
|
|
.init(theme: theme)
|
|
)
|
|
}
|
|
}
|