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
This commit is contained in:
Ilyas Hallak 2025-10-19 19:01:54 +02:00
parent fde1140f24
commit 04de2c20d4

View File

@ -8,18 +8,17 @@
import Foundation import Foundation
import SwiftUI import SwiftUI
class AppViewModel: ObservableObject { @MainActor
@Observable
class AppViewModel {
private let settingsRepository = SettingsRepository() private let settingsRepository = SettingsRepository()
private let logoutUseCase: LogoutUseCase private let factory: UseCaseFactory
private let checkServerReachabilityUseCase: PCheckServerReachabilityUseCase
@Published var hasFinishedSetup: Bool = true var hasFinishedSetup: Bool = true
@Published var isServerReachable: Bool = false var isServerReachable: Bool = false
init(logoutUseCase: LogoutUseCase = LogoutUseCase(), init(factory: UseCaseFactory = DefaultUseCaseFactory.shared) {
checkServerReachabilityUseCase: PCheckServerReachabilityUseCase = DefaultUseCaseFactory.shared.makeCheckServerReachabilityUseCase()) { self.factory = factory
self.logoutUseCase = logoutUseCase
self.checkServerReachabilityUseCase = checkServerReachabilityUseCase
setupNotificationObservers() setupNotificationObservers()
Task { Task {
@ -33,7 +32,7 @@ class AppViewModel: ObservableObject {
object: nil, object: nil,
queue: .main queue: .main
) { [weak self] _ in ) { [weak self] _ in
Task { Task { @MainActor in
await self?.handleUnauthorizedResponse() await self?.handleUnauthorizedResponse()
} }
} }
@ -43,19 +42,17 @@ class AppViewModel: ObservableObject {
object: nil, object: nil,
queue: .main queue: .main
) { [weak self] _ in ) { [weak self] _ in
self?.loadSetupStatus() Task { @MainActor in
self?.loadSetupStatus()
}
} }
} }
@MainActor
private func handleUnauthorizedResponse() async { private func handleUnauthorizedResponse() async {
print("AppViewModel: Handling 401 Unauthorized - logging out user") print("AppViewModel: Handling 401 Unauthorized - logging out user")
do { do {
// Führe den Logout durch try await factory.makeLogoutUseCase().execute()
try await logoutUseCase.execute()
// Update UI state
loadSetupStatus() loadSetupStatus()
print("AppViewModel: User successfully logged out due to 401 error") print("AppViewModel: User successfully logged out due to 401 error")
@ -64,19 +61,16 @@ class AppViewModel: ObservableObject {
} }
} }
@MainActor
private func loadSetupStatus() { private func loadSetupStatus() {
hasFinishedSetup = settingsRepository.hasFinishedSetup hasFinishedSetup = settingsRepository.hasFinishedSetup
} }
@MainActor
func onAppResume() async { func onAppResume() async {
await checkServerReachability() await checkServerReachability()
} }
@MainActor
private func checkServerReachability() async { private func checkServerReachability() async {
isServerReachable = await checkServerReachabilityUseCase.execute() isServerReachable = await factory.makeCheckServerReachabilityUseCase().execute()
} }
deinit { deinit {