From 04de2c20d4483f2b9607ce22801f7115144f6876 Mon Sep 17 00:00:00 2001 From: Ilyas Hallak Date: Sun, 19 Oct 2025 19:01:54 +0200 Subject: [PATCH] refactor: Use @Observable and inject factory in AppViewModel - Replace ObservableObject with @Observable macro - Inject UseCaseFactory instead of individual use cases - Use factory.makeCheckServerReachabilityUseCase() on demand - Use factory.makeLogoutUseCase() for 401 handling --- readeck/UI/AppViewModel.swift | 34 ++++++++++++++-------------------- 1 file changed, 14 insertions(+), 20 deletions(-) diff --git a/readeck/UI/AppViewModel.swift b/readeck/UI/AppViewModel.swift index 182ef83..f16aa1e 100644 --- a/readeck/UI/AppViewModel.swift +++ b/readeck/UI/AppViewModel.swift @@ -8,18 +8,17 @@ import Foundation import SwiftUI -class AppViewModel: ObservableObject { +@MainActor +@Observable +class AppViewModel { private let settingsRepository = SettingsRepository() - private let logoutUseCase: LogoutUseCase - private let checkServerReachabilityUseCase: PCheckServerReachabilityUseCase + private let factory: UseCaseFactory - @Published var hasFinishedSetup: Bool = true - @Published var isServerReachable: Bool = false + var hasFinishedSetup: Bool = true + var isServerReachable: Bool = false - init(logoutUseCase: LogoutUseCase = LogoutUseCase(), - checkServerReachabilityUseCase: PCheckServerReachabilityUseCase = DefaultUseCaseFactory.shared.makeCheckServerReachabilityUseCase()) { - self.logoutUseCase = logoutUseCase - self.checkServerReachabilityUseCase = checkServerReachabilityUseCase + init(factory: UseCaseFactory = DefaultUseCaseFactory.shared) { + self.factory = factory setupNotificationObservers() Task { @@ -33,7 +32,7 @@ class AppViewModel: ObservableObject { object: nil, queue: .main ) { [weak self] _ in - Task { + Task { @MainActor in await self?.handleUnauthorizedResponse() } } @@ -43,19 +42,17 @@ class AppViewModel: ObservableObject { object: nil, queue: .main ) { [weak self] _ in - self?.loadSetupStatus() + Task { @MainActor in + self?.loadSetupStatus() + } } } - @MainActor private func handleUnauthorizedResponse() async { print("AppViewModel: Handling 401 Unauthorized - logging out user") do { - // Führe den Logout durch - try await logoutUseCase.execute() - - // Update UI state + try await factory.makeLogoutUseCase().execute() loadSetupStatus() print("AppViewModel: User successfully logged out due to 401 error") @@ -64,19 +61,16 @@ class AppViewModel: ObservableObject { } } - @MainActor private func loadSetupStatus() { hasFinishedSetup = settingsRepository.hasFinishedSetup } - @MainActor func onAppResume() async { await checkServerReachability() } - @MainActor private func checkServerReachability() async { - isServerReachable = await checkServerReachabilityUseCase.execute() + isServerReachable = await factory.makeCheckServerReachabilityUseCase().execute() } deinit {