- Add protocols for all UseCases and implement them in their respective classes - Add DefaultUseCaseFactory and MockUseCaseFactory for dependency injection - Implement all mock UseCases with dummy data - Start migration of view models and views to protocol-based UseCase injection (not all migrated yet) - Refactor previews and some initializers for easier testing - Move SectionHeader to Components, update server settings UI text - Add sample article.html for mock content
47 lines
1.2 KiB
Swift
47 lines
1.2 KiB
Swift
//
|
|
// LogoutUseCase.swift
|
|
// readeck
|
|
//
|
|
// Created by Ilyas Hallak on 29.06.25.
|
|
//
|
|
|
|
import Foundation
|
|
|
|
protocol PLogoutUseCase {
|
|
func execute() async throws
|
|
}
|
|
|
|
class LogoutUseCase: PLogoutUseCase {
|
|
private let settingsRepository: SettingsRepository
|
|
private let tokenManager: TokenManager
|
|
|
|
init(
|
|
settingsRepository: SettingsRepository = SettingsRepository(),
|
|
tokenManager: TokenManager = TokenManager.shared
|
|
) {
|
|
self.settingsRepository = settingsRepository
|
|
self.tokenManager = tokenManager
|
|
}
|
|
|
|
func execute() async throws {
|
|
// Clear the token
|
|
try await tokenManager.clearToken()
|
|
|
|
// Reset hasFinishedSetup to false
|
|
try await settingsRepository.saveHasFinishedSetup(false)
|
|
|
|
// Clear user session data
|
|
try await settingsRepository.saveToken("")
|
|
try await settingsRepository.saveUsername("")
|
|
try await settingsRepository.savePassword("")
|
|
|
|
KeychainHelper.shared.saveToken("")
|
|
KeychainHelper.shared.saveEndpoint("")
|
|
|
|
// Note: We keep the endpoint for potential re-login
|
|
// but clear the authentication data
|
|
|
|
print("LogoutUseCase: User logged out successfully")
|
|
}
|
|
}
|