ReadKeep/readeck/Domain/UseCase/LogoutUseCase.swift
Ilyas Hallak 930779169b feat: introduce protocol-based UseCase architecture and mock factory
- 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
2025-07-18 00:46:07 +02:00

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")
}
}