- 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
101 lines
3.8 KiB
Swift
101 lines
3.8 KiB
Swift
import Foundation
|
|
|
|
protocol UseCaseFactory {
|
|
func makeLoginUseCase() -> PLoginUseCase
|
|
func makeGetBookmarksUseCase() -> PGetBookmarksUseCase
|
|
func makeGetBookmarkUseCase() -> PGetBookmarkUseCase
|
|
func makeGetBookmarkArticleUseCase() -> PGetBookmarkArticleUseCase
|
|
func makeSaveSettingsUseCase() -> PSaveSettingsUseCase
|
|
func makeLoadSettingsUseCase() -> PLoadSettingsUseCase
|
|
func makeUpdateBookmarkUseCase() -> PUpdateBookmarkUseCase
|
|
func makeDeleteBookmarkUseCase() -> PDeleteBookmarkUseCase
|
|
func makeCreateBookmarkUseCase() -> PCreateBookmarkUseCase
|
|
func makeLogoutUseCase() -> PLogoutUseCase
|
|
func makeSearchBookmarksUseCase() -> PSearchBookmarksUseCase
|
|
func makeSaveServerSettingsUseCase() -> PSaveServerSettingsUseCase
|
|
func makeAddLabelsToBookmarkUseCase() -> PAddLabelsToBookmarkUseCase
|
|
func makeRemoveLabelsFromBookmarkUseCase() -> PRemoveLabelsFromBookmarkUseCase
|
|
func makeGetLabelsUseCase() -> PGetLabelsUseCase
|
|
func makeAddTextToSpeechQueueUseCase() -> PAddTextToSpeechQueueUseCase
|
|
}
|
|
|
|
|
|
|
|
class DefaultUseCaseFactory: UseCaseFactory {
|
|
private let tokenProvider = CoreDataTokenProvider()
|
|
private lazy var api: PAPI = API(tokenProvider: tokenProvider)
|
|
private lazy var authRepository: PAuthRepository = AuthRepository(api: api, settingsRepository: settingsRepository)
|
|
private lazy var bookmarksRepository: PBookmarksRepository = BookmarksRepository(api: api)
|
|
private let settingsRepository: PSettingsRepository = SettingsRepository()
|
|
|
|
static let shared = DefaultUseCaseFactory()
|
|
|
|
private init() {}
|
|
|
|
func makeLoginUseCase() -> PLoginUseCase {
|
|
LoginUseCase(repository: authRepository)
|
|
}
|
|
|
|
func makeGetBookmarksUseCase() -> PGetBookmarksUseCase {
|
|
GetBookmarksUseCase(repository: bookmarksRepository)
|
|
}
|
|
|
|
func makeGetBookmarkUseCase() -> PGetBookmarkUseCase {
|
|
GetBookmarkUseCase(repository: bookmarksRepository)
|
|
}
|
|
|
|
func makeGetBookmarkArticleUseCase() -> PGetBookmarkArticleUseCase {
|
|
GetBookmarkArticleUseCase(repository: bookmarksRepository)
|
|
}
|
|
|
|
func makeSaveSettingsUseCase() -> PSaveSettingsUseCase {
|
|
SaveSettingsUseCase(settingsRepository: settingsRepository)
|
|
}
|
|
|
|
func makeLoadSettingsUseCase() -> PLoadSettingsUseCase {
|
|
LoadSettingsUseCase(authRepository: authRepository)
|
|
}
|
|
|
|
func makeUpdateBookmarkUseCase() -> PUpdateBookmarkUseCase {
|
|
return UpdateBookmarkUseCase(repository: bookmarksRepository)
|
|
}
|
|
|
|
func makeLogoutUseCase() -> PLogoutUseCase {
|
|
return LogoutUseCase()
|
|
}
|
|
|
|
func makeDeleteBookmarkUseCase() -> PDeleteBookmarkUseCase {
|
|
return DeleteBookmarkUseCase(repository: bookmarksRepository)
|
|
}
|
|
|
|
func makeCreateBookmarkUseCase() -> PCreateBookmarkUseCase {
|
|
return CreateBookmarkUseCase(repository: bookmarksRepository)
|
|
}
|
|
|
|
func makeSearchBookmarksUseCase() -> PSearchBookmarksUseCase {
|
|
return SearchBookmarksUseCase(repository: bookmarksRepository)
|
|
}
|
|
|
|
func makeSaveServerSettingsUseCase() -> PSaveServerSettingsUseCase {
|
|
return SaveServerSettingsUseCase(repository: SettingsRepository())
|
|
}
|
|
|
|
func makeAddLabelsToBookmarkUseCase() -> PAddLabelsToBookmarkUseCase {
|
|
return AddLabelsToBookmarkUseCase(repository: bookmarksRepository)
|
|
}
|
|
|
|
func makeRemoveLabelsFromBookmarkUseCase() -> PRemoveLabelsFromBookmarkUseCase {
|
|
return RemoveLabelsFromBookmarkUseCase(repository: bookmarksRepository)
|
|
}
|
|
|
|
func makeGetLabelsUseCase() -> PGetLabelsUseCase {
|
|
let api = API(tokenProvider: CoreDataTokenProvider())
|
|
let labelsRepository = LabelsRepository(api: api)
|
|
return GetLabelsUseCase(labelsRepository: labelsRepository)
|
|
}
|
|
|
|
func makeAddTextToSpeechQueueUseCase() -> PAddTextToSpeechQueueUseCase {
|
|
return AddTextToSpeechQueueUseCase()
|
|
}
|
|
}
|