Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
145 changes: 23 additions & 122 deletions FLINT/FLINT/Dependency/DIContainer.swift
Original file line number Diff line number Diff line change
Expand Up @@ -15,51 +15,63 @@ import Data
import Domain
import Presentation

typealias AppFactory = ViewControllerFactory & OnboardingViewModelFactory & ExploreViewModelFactory & CreateCollectionFactory & AddContentSelectViewModelFactory & ProfileFactory & HomeFactory & CollectionDetailFactory & LoginViewModelFactory
typealias DependencyFactory = ViewControllerFactory &

LoginViewModelFactory &
OnboardingViewModelFactory &

HomeViewModelFactory &
ExploreViewModelFactory &
ProfileViewModelFactory &

CreateCollectionViewModelFactory &
AddContentSelectViewModelFactory &
CollectionFolderListViewModelFactory &
CollectionDetailViewModelFactory

final class DIContainer: AppFactory {
final class DIContainer: DependencyFactory {

// MARK: - Root Dependency

// private lazy var tokenStorage: TokenStorage = DefaultTokenStorage()
private lazy var tokenStorage: TokenStorage = TestTokenStorage()
// lazy var tokenStorage: TokenStorage = DefaultTokenStorage()
lazy var tokenStorage: TokenStorage = TestTokenStorage()

private lazy var authInterceptor: AuthInterceptor = AuthInterceptor(tokenStorage: tokenStorage)
private lazy var networkLoggerPlugin: NetworkLoggerPlugin = NetworkLoggerPlugin()

private lazy var userAPIProvider = MoyaProvider<UserAPI>(
lazy var userAPIProvider = MoyaProvider<UserAPI>(
session: Session(interceptor: authInterceptor),
plugins: [
networkLoggerPlugin
]
)
private lazy var collectionAPIProvider = MoyaProvider<CollectionAPI>(
lazy var collectionAPIProvider = MoyaProvider<CollectionAPI>(
session: Session(interceptor: authInterceptor),
plugins: [
networkLoggerPlugin
]
)
private lazy var searchAPIProvider = MoyaProvider<SearchAPI>(
lazy var searchAPIProvider = MoyaProvider<SearchAPI>(
session: Session(interceptor: authInterceptor),
plugins: [
networkLoggerPlugin
]
)
private lazy var bookmarkAPIProvider = MoyaProvider<BookmarkAPI>(
lazy var bookmarkAPIProvider = MoyaProvider<BookmarkAPI>(
session: Session(interceptor: authInterceptor),
plugins: [
networkLoggerPlugin
]
)

private lazy var authAPIProvider = MoyaProvider<AuthAPI>(
lazy var authAPIProvider = MoyaProvider<AuthAPI>(
session: Session(interceptor: authInterceptor),
plugins: [
networkLoggerPlugin
]
)

private lazy var homeAPIProvider = MoyaProvider<HomeAPI>(
lazy var homeAPIProvider = MoyaProvider<HomeAPI>(
session: Session(interceptor: authInterceptor),
plugins: [
networkLoggerPlugin
Expand All @@ -69,117 +81,6 @@ final class DIContainer: AppFactory {
// MARK: - Init

init() {
tokenStorage.clearAll()
}

// MARK: - ViewControllerFactory

func makeSplashViewController() -> SplashViewController {
return SplashViewController(viewControllerFactory: self)
}

func makeLoginViewController() -> LoginViewController {
return LoginViewController(loginViewModel: makeLoginViewModel(), viewControllerFactory: self)
}

func makeTabBarViewController() -> TabBarViewController {
return TabBarViewController(viewControllerFactory: self)
}

func makeNicknameViewController() -> NicknameViewController {
return NicknameViewController(onboardingViewModel: makeOnboardingViewModel(), viewControllerFactory: self)
}

func makeAddContentSelectViewController() -> AddContentSelectViewController {
let vm = makeAddContentSelectViewModel()
return AddContentSelectViewController(viewModel: vm, viewControllerFactory: self)
}

func makeCreateCollectionViewController() -> CreateCollectionViewController {
let vm = makeCreateCollectionViewModel()
return CreateCollectionViewController(viewModel: vm, viewControllerFactory: self)
}

func makeHomeViewController() -> HomeViewController {
let vm = makeHomeViewModel()
return HomeViewController(viewModel: vm, viewControllerFactory: self)
}

func makeFilmSelectViewController(onboardingViewModel: OnboardingViewModel) -> FilmSelectViewController {
return FilmSelectViewController(onboardingViewModel: onboardingViewModel, viewControllerFactory: self)
}

func makeOttSelectViewController(onboardingViewModel: OnboardingViewModel) -> OttSelectViewController {
return OttSelectViewController(onboardingViewModel: onboardingViewModel, viewControllerFactory: self)
}

func makeOnboardingDoneViewController(onboardingViewModel: OnboardingViewModel) -> OnboardingDoneViewController {
return OnboardingDoneViewController(onboardingViewModel: onboardingViewModel, viewControllerFactory: self)
}

func makeExploreViewController() -> ViewController.ExploreViewController {
return ExploreViewController(exploreViewModel: makeExploreViewModel(), viewControllerFactory: self)
}


func makeProfileViewController() -> ProfileViewController {
makeProfileViewController(target: .me)
}

func makeProfileViewController(
target: ProfileViewModel.Target = .me
) -> ProfileViewController {
return ProfileViewController(
profileViewModel: makeProfileViewModel(target: target),
viewControllerFactory: self
)
}


// func makeCollectionDetailViewController(collectionId: Int64) -> CollectionDetailViewController {
// let vm = makeCollectionDetailViewModel(collectionId: collectionId)
// return CollectionDetailViewController(viewModel: vm)
// }
func makeCollectionDetailViewController(collectionId: Int64) -> CollectionDetailViewController {
let vm = makeCollectionDetailViewModel(collectionId: collectionId)
return CollectionDetailViewController(viewModel: vm, viewControllerFactory: self)
}


func makeCollectionFolderListViewController() -> CollectionFolderListViewController {
let vm = CollectionFolderListViewModel(fetchWatchingCollectionsUseCase: makeFetchWatchingCollectionsUseCase())
return CollectionFolderListViewController(viewModel: vm, viewControllerFactory: self)
}



// MARK: - Root Dependency Injection

func makeTokenStorage() -> TokenStorage {
return tokenStorage
}

func makeUserAPIProvider() -> MoyaProvider<UserAPI> {
return userAPIProvider
}

func makeSearchAPIProvider() -> MoyaProvider<SearchAPI> {
return searchAPIProvider
}

func makeCollectionAPIProvider() -> MoyaProvider<CollectionAPI> {
return collectionAPIProvider
}

func makeBookmarkAPIProvider() -> MoyaProvider<BookmarkAPI> {
return bookmarkAPIProvider
}

func makeAuthAPIProvider() -> MoyaProvider<AuthAPI> {
return authAPIProvider
}

func makeHomeAPIProvider() -> MoyaProvider<HomeAPI> {
return homeAPIProvider
// tokenStorage.clearAll()
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -12,5 +12,13 @@ import Moya
import Data

protocol AuthAPIFactory {
var authAPIProvider: MoyaProvider<AuthAPI> { get set }

func makeAuthAPIProvider() -> MoyaProvider<AuthAPI>
}

extension AuthAPIFactory {
func makeAuthAPIProvider() -> MoyaProvider<AuthAPI> {
return authAPIProvider
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
//
// BookmarkAPIProviderFactory.swift
// FLINT
//
// Created by 김호성 on 2026.01.31.
//

import Foundation
import Moya

import Data

protocol BookmarkAPIProviderFactory {
var bookmarkAPIProvider: MoyaProvider<BookmarkAPI> { get set }

func makeBookmarkAPIProvider() -> MoyaProvider<BookmarkAPI>
}

extension BookmarkAPIProviderFactory {
func makeBookmarkAPIProvider() -> MoyaProvider<BookmarkAPI> {
return bookmarkAPIProvider
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -12,5 +12,13 @@ import Moya
import Data

protocol CollectionAPIFactory {
var collectionAPIProvider: MoyaProvider<CollectionAPI> { get set }

func makeCollectionAPIProvider() -> MoyaProvider<CollectionAPI>
}

extension CollectionAPIFactory {
func makeCollectionAPIProvider() -> MoyaProvider<CollectionAPI> {
return collectionAPIProvider
}
}
24 changes: 24 additions & 0 deletions FLINT/FLINT/Dependency/Factory/APIProvider/HomeAPIFactory.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
//
// HomeAPIFactory.swift
// FLINT
//
// Created by 김호성 on 2026.01.31.
//

import Foundation

import Moya

import Data

protocol HomeAPIFactory {
var homeAPIProvider: MoyaProvider<HomeAPI> { get set }

func makeHomeAPIProvider() -> MoyaProvider<HomeAPI>
}

extension HomeAPIFactory {
func makeHomeAPIProvider() -> MoyaProvider<HomeAPI> {
return homeAPIProvider
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -12,5 +12,13 @@ import Moya
import Data

protocol SearchAPIFactory {
var searchAPIProvider: MoyaProvider<SearchAPI> { get set }

func makeSearchAPIProvider() -> MoyaProvider<SearchAPI>
}

extension SearchAPIFactory {
func makeSearchAPIProvider() -> MoyaProvider<SearchAPI> {
return searchAPIProvider
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -12,5 +12,13 @@ import Moya
import Data

protocol UserAPIFactory {
var userAPIProvider: MoyaProvider<UserAPI> { get set }

func makeUserAPIProvider() -> MoyaProvider<UserAPI>
}

extension UserAPIFactory {
func makeUserAPIProvider() -> MoyaProvider<UserAPI> {
return userAPIProvider
}
}
41 changes: 0 additions & 41 deletions FLINT/FLINT/Dependency/Factory/CreateCollectionFactory.swift

This file was deleted.

Loading