From 466661997ff6bd5481c9c6917e442072cb85a155 Mon Sep 17 00:00:00 2001 From: HELLOHIDI Date: Fri, 5 Jul 2024 18:20:00 +0900 Subject: [PATCH] =?UTF-8?q?[Refactor]=20Detail=20Coordinator=20=EC=84=B8?= =?UTF-8?q?=ED=8C=85=20#20?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Sources/DetailFeatureViewBuildable.swift | 14 +++++++ .../Interface/Sources/DetailPresentable.swift | 16 +++++++- .../DefaultDetailCoordinator.swift | 36 ------------------ .../Sources/Coordinator/DetailBuilder.swift | 32 ++++++++++++++++ .../Coordinator/DetailCoordinator.swift | 38 +++++++++++++++++++ .../Protocol/DetailCoordinator.swift | 13 ------- .../Sources/ViewModel/DetailViewModel.swift | 3 +- 7 files changed, 100 insertions(+), 52 deletions(-) create mode 100644 Projects/Features/DetailFeature/Interface/Sources/DetailFeatureViewBuildable.swift delete mode 100644 Projects/Features/DetailFeature/Sources/Coordinator/DefaultDetailCoordinator.swift create mode 100644 Projects/Features/DetailFeature/Sources/Coordinator/DetailBuilder.swift create mode 100644 Projects/Features/DetailFeature/Sources/Coordinator/DetailCoordinator.swift delete mode 100644 Projects/Features/DetailFeature/Sources/Coordinator/Protocol/DetailCoordinator.swift diff --git a/Projects/Features/DetailFeature/Interface/Sources/DetailFeatureViewBuildable.swift b/Projects/Features/DetailFeature/Interface/Sources/DetailFeatureViewBuildable.swift new file mode 100644 index 0000000..65527f2 --- /dev/null +++ b/Projects/Features/DetailFeature/Interface/Sources/DetailFeatureViewBuildable.swift @@ -0,0 +1,14 @@ +// +// DetailFeatureViewBuildable.swift +// DetailFeatureInterface +// +// Created by 류희재 on 7/5/24. +// Copyright © 2024 Weather-iOS. All rights reserved. +// + +import Core + +public protocol DetailFeatureViewBuildable { + func makeDetail() -> DetailPresentable +} + diff --git a/Projects/Features/DetailFeature/Interface/Sources/DetailPresentable.swift b/Projects/Features/DetailFeature/Interface/Sources/DetailPresentable.swift index 7b7ebc1..c12783c 100644 --- a/Projects/Features/DetailFeature/Interface/Sources/DetailPresentable.swift +++ b/Projects/Features/DetailFeature/Interface/Sources/DetailPresentable.swift @@ -1,8 +1,20 @@ // // DetailPresentable.swift -// DetailFeatureManifests +// DetailFeatureInterface // -// Created by 류희재 on 6/28/24. +// Created by 류희재 on 7/5/24. +// Copyright © 2024 Weather-iOS. All rights reserved. // import Foundation + +import BaseFeatureDependency +import Core + +public protocol DetailViewControllable: ViewControllable { } +public protocol DetailCoordinatable {} + +public typealias DetailViewModelType = ViewModelType & DetailCoordinatable +public typealias DetailPresentable = (vc: DetailViewControllable, vm: any DetailViewModelType) + + diff --git a/Projects/Features/DetailFeature/Sources/Coordinator/DefaultDetailCoordinator.swift b/Projects/Features/DetailFeature/Sources/Coordinator/DefaultDetailCoordinator.swift deleted file mode 100644 index 8c1843c..0000000 --- a/Projects/Features/DetailFeature/Sources/Coordinator/DefaultDetailCoordinator.swift +++ /dev/null @@ -1,36 +0,0 @@ -// -// DetailCoordinator.swift -// DetailFeature -// -// Created by 류희재 on 2023/10/30. -// Copyright © 2023 hellohidi. All rights reserved. - - -import UIKit - -import BaseFeatureDependency -import Domain -import Networks -import Data - -public class DefaultDetailCoordinator: DetailCoordinator { - - public var childCoordinators: [Coordinator] = [] - public var navigationController: UINavigationController - - public init(navigationController: UINavigationController) { - self.navigationController = navigationController - } - - public func start(_ currentPage: Int) { - let viewController = DetailPageViewController( - currentPage: currentPage, detailCoordinator: self - ) - - self.navigationController.pushViewController(viewController, animated: true) - } - - public func popViewController() { - self.navigationController.popViewController(animated: true) - } -} diff --git a/Projects/Features/DetailFeature/Sources/Coordinator/DetailBuilder.swift b/Projects/Features/DetailFeature/Sources/Coordinator/DetailBuilder.swift new file mode 100644 index 0000000..b22c2bf --- /dev/null +++ b/Projects/Features/DetailFeature/Sources/Coordinator/DetailBuilder.swift @@ -0,0 +1,32 @@ +// +// DetailBuilder.swift +// DetailFeatureInterface +// +// Created by 류희재 on 7/5/24. +// Copyright © 2024 Weather-iOS. All rights reserved. +// + +import Core +import Domain + +import DetailFeatureInterface + +public +final class DetailBuilder { + public var repository: WeatherRepository + + public init(repository: WeatherRepository) { + self.repository = repository + } +} + +extension DetailBuilder: DetailFeatureViewBuildable { + public func makeMain() -> DetailPresentable { + let useCase = DefaultMainUseCase(repository: repository) + let vm = DetailViewModel(mainUseCase: useCase) + let vc = DetailViewController(viewModel: vm) + vc.viewModel = vm + return (vc, vm) + } +} + diff --git a/Projects/Features/DetailFeature/Sources/Coordinator/DetailCoordinator.swift b/Projects/Features/DetailFeature/Sources/Coordinator/DetailCoordinator.swift new file mode 100644 index 0000000..0ba06fa --- /dev/null +++ b/Projects/Features/DetailFeature/Sources/Coordinator/DetailCoordinator.swift @@ -0,0 +1,38 @@ +// +// DetailCoordinator.swift +// DetailFeatureInterface +// +// Created by 류희재 on 7/5/24. +// Copyright © 2024 Weather-iOS. All rights reserved. +// + +import BaseFeatureDependency +import Core + +public enum DetailCoordinatorDestination { + case detail +} +public protocol DetailCoordinatorOutput { + var requestCoordinating: ((DetailCoordinatorDestination) -> Void)? { get set } +} +public typealias DefaultDetailCoordinator = BaseCoordinator & DetailCoordinatorOutput + +public +final class DetailCoordinator: DefaultDetailCoordinator { + + public var requestCoordinating: ((DetailCoordinatorDestination) -> Void)? + + private let factory: DetailFeatureViewBuildable + private let router: Router + + public init(router: Router, factory: DetailFeatureViewBuildable) { + self.factory = factory + self.router = router + } + + public override func start() { + var main = factory.makeDetail() + + } +} + diff --git a/Projects/Features/DetailFeature/Sources/Coordinator/Protocol/DetailCoordinator.swift b/Projects/Features/DetailFeature/Sources/Coordinator/Protocol/DetailCoordinator.swift deleted file mode 100644 index e721330..0000000 --- a/Projects/Features/DetailFeature/Sources/Coordinator/Protocol/DetailCoordinator.swift +++ /dev/null @@ -1,13 +0,0 @@ -// -// DetailCoordinator.swift -// DetailFeature -// -// Created by 류희재 on 2023/10/31. -// Copyright © 2023 hellohidi. All rights reserved. -// - -import BaseFeatureDependency - -public protocol DetailCoordinator: Coordinator { - func popViewController() -} diff --git a/Projects/Features/DetailFeature/Sources/ViewModel/DetailViewModel.swift b/Projects/Features/DetailFeature/Sources/ViewModel/DetailViewModel.swift index 4766507..2d8c5c6 100644 --- a/Projects/Features/DetailFeature/Sources/ViewModel/DetailViewModel.swift +++ b/Projects/Features/DetailFeature/Sources/ViewModel/DetailViewModel.swift @@ -12,8 +12,9 @@ import Domain import RxSwift import RxCocoa +import BaseFeatureDependency -public final class DetailViewModel { +public final class DetailViewModel: DetailViewModelType { internal var disposeBag = DisposeBag() public let detailUseCase: DetailUseCase