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:
parent
fde1140f24
commit
04de2c20d4
@ -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
|
||||||
|
Task { @MainActor in
|
||||||
self?.loadSetupStatus()
|
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 {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user