Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Refactor] #241 - 성취뷰 MVVM + Combine #242

Merged
merged 25 commits into from
Mar 23, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
25 commits
Select commit Hold shift + click to select a range
451f9aa
[Fix] #241 - Calendar UI 로직 수정
jeongdung-eo Mar 11, 2024
504ae92
[Move] #241 - View 폴더 추가
jeongdung-eo Mar 11, 2024
243ec66
[Merge] 'develop' into feat/#241
jeongdung-eo Mar 11, 2024
d619b7a
[Fix] #241 - 중복 response 수정
jeongdung-eo Mar 12, 2024
7ee592a
[Merge] #241 - 'feat/#229' into 'feat/#241'
jeongdung-eo Mar 12, 2024
5d8a614
[Feat] #241 - network 로직 추가 구현
jeongdung-eo Mar 12, 2024
b019368
[Feat] #241 - viewmodel Protocol 구현
jeongdung-eo Mar 12, 2024
9b00090
[Feat] #241 - 성취뷰 디테일 Manager 구현
jeongdung-eo Mar 12, 2024
a0e1745
[Feat] #241 - 성취뷰 디테일 ViewModel 구현
jeongdung-eo Mar 12, 2024
f7484c1
[Feat] #241 - 성취뷰 MVVM 적용
jeongdung-eo Mar 12, 2024
0b3bc34
[Feat] #241 - 성취뷰 관련 network 로직 구현
jeongdung-eo Mar 12, 2024
8baf42f
[Feat] #241 - 성취뷰 ViewModel 구현
jeongdung-eo Mar 12, 2024
03b525d
[Feat] #241 - 성취뷰 MVVM 적용
jeongdung-eo Mar 12, 2024
5142471
[Fix] #241 - UI 로직 수정
jeongdung-eo Mar 12, 2024
cc045cb
[Fix] #241 = 성취뷰 UI 로직 수정
jeongdung-eo Mar 12, 2024
34fd5f1
[Fix] #241 - 성취 디테일 UI 로직 수정
jeongdung-eo Mar 13, 2024
11e3b67
[Fix] #241 - 성취뷰 로직 수정
jeongdung-eo Mar 13, 2024
8fa0aa8
[Merge] #241 - conflict 해결 및 머지
jeongdung-eo Mar 13, 2024
28579a7
[Fix] #241 - snapshot로직 변경
jeongdung-eo Mar 13, 2024
504acba
[Fix] #241 - 메서드 분리
jeongdung-eo Mar 13, 2024
598f1af
[Fix] #241 - Manager 로직 수정
jeongdung-eo Mar 14, 2024
f9368ae
[Merge] #241 - conflict 해결 및 머지
jeongdung-eo Mar 14, 2024
b088969
[Merge] 'develop' into feat/#241
jeongdung-eo Mar 23, 2024
f10072a
[Fix] #241 - Factory 파일 분리
jeongdung-eo Mar 23, 2024
69e59bb
[Fix] #241 - 린트 오류 수정
jeongdung-eo Mar 23, 2024
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
203 changes: 167 additions & 36 deletions iOS-NOTTODO/iOS-NOTTODO.xcodeproj/project.pbxproj

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ final class AchieveCoordinatorImpl: AchieveCoordinator {
navigationController.setViewControllers([viewController], animated: false)
}

func showAchieveDetailViewController(selectedDate: Date) {
func showAchieveDetailViewController(selectedDate: String) {
let viewController = viewControllerFactory.makeAchieveDetailViewController(coordinator: self, date: selectedDate)
viewController.modalTransitionStyle = .crossDissolve
viewController.modalPresentationStyle = .overFullScreen
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
//
// AchieveViewControllerFactory.swift
// iOS-NOTTODO
//
// Created by JEONGEUN KIM on 3/23/24.
//

import Foundation

extension ViewControllerFactoryImpl {

func makeAchieveViewModel(coordinator: AchieveCoordinator) -> any AchievementViewModel {
let missionAPI = DefaultMissionService()
let manager = AchieveManagerImpl(missionAPI: missionAPI)
let viewModel = AchievementViewModelImpl(coordinator: coordinator, manager: manager)
return viewModel
}

func makeAchieveViewController(coordinator: AchieveCoordinator) -> AchievementViewController {
let viewModel = self.makeAchieveViewModel(coordinator: coordinator)
let viewController = AchievementViewController(viewModel: viewModel)
return viewController
}

func makeAchieveDetailViewModel(coordinator: AchieveCoordinator) -> any DetailAchievementViewModel & DetailAchievementViewModelPresentable {
let missionAPI = DefaultMissionService()
let manager = AchieveManagerImpl(missionAPI: missionAPI)
let viewModel = DetailAchievementViewModelImpl(coordinator: coordinator, manager: manager)
return viewModel
}

func makeAchieveDetailViewController(coordinator: AchieveCoordinator, date: String) -> DetailAchievementViewController {
let viewModel = self.makeAchieveDetailViewModel(coordinator: coordinator)
viewModel.selectedDate(date)
let viewController = DetailAchievementViewController(viewModel: viewModel)
return viewController
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
//
// AuthViewControllerFactory.swift
// iOS-NOTTODO
//
// Created by JEONGEUN KIM on 3/23/24.
//

import Foundation

extension ViewControllerFactoryImpl {
func makeAuthViewController(coordinator: AuthCoordinator) -> AuthViewController {
let viewController = AuthViewController(coordinator: coordinator)
return viewController
}

func makeNotificationDialogViewController(coordinator: AuthCoordinator, completion: @escaping () -> Void) -> NotificationDialogViewController {
let viewController = NotificationDialogViewController()
viewController.buttonHandler = {
completion()
}
return viewController
}
}

// Onboarding
extension ViewControllerFactoryImpl {
func makeValueOnboardingViewController(coordinator: AuthCoordinator) -> ValueOnboardingViewController {
let viewController = ValueOnboardingViewController(coordinator: coordinator)
return viewController
}
func makeLogoOnboardingViewController(coordinator: AuthCoordinator) -> LogoOnboardingViewController {
let viewController = LogoOnboardingViewController(coordinator: coordinator)
return viewController
}
func makeSecondOnboardingViewController(coordinator: AuthCoordinator) -> SecondOnboardingViewController {
let viewController = SecondOnboardingViewController(coordinator: coordinator)
return viewController
}
func makeThirdOnboardingViewController(coordinator: AuthCoordinator) -> ThirdOnboardingViewController {
let viewController = ThirdOnboardingViewController(coordinator: coordinator)
return viewController
}
func makeFourthOnboardingViewController(coordinator: AuthCoordinator) -> FourthOnboardingViewController {
let viewController = FourthOnboardingViewController(coordinator: coordinator)
return viewController
}
func makeFifthOnboardingViewController(coordinator: AuthCoordinator) -> FifthOnboardingViewController {
let viewController = FifthOnboardingViewController(coordinator: coordinator)
return viewController
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,91 @@
//
// HomeViewControllerFactory.swift
// iOS-NOTTODO
//
// Created by JEONGEUN KIM on 3/23/24.
//

import Foundation

// Home
extension ViewControllerFactoryImpl {
func makePopupViewController(coordinator: HomeCoordinator, completion: @escaping () -> Void) -> CommonNotificationViewController {
let viewController = CommonNotificationViewController(coordinator: coordinator)
viewController.tapCloseButton = {
completion()
}
return viewController
}

func makeHomeViewController(coordinator: HomeCoordinator) -> HomeViewController {
let viewController = HomeViewController(coordinator: coordinator)
return viewController
}
}

// HomeDetail
extension ViewControllerFactoryImpl {
func makeDeleteViewController(coordinator: HomeCoordinator, completion: @escaping () -> Void) -> HomeDeleteViewController {
let viewController = HomeDeleteViewController(coordinator: coordinator)
viewController.deleteClosure = {
completion()
}
return viewController
}

func makeMissionDetailViewController(coordinator: HomeCoordinator, id: Int, deleteClosure: @escaping () -> Void, moveDateClosure: @escaping (String) -> Void) -> MissionDetailViewController {
let viewController = MissionDetailViewController(coordinator: coordinator)
viewController.userId = id
viewController.deleteClosure = {
deleteClosure()
}
viewController.moveDateClosure = { date in
moveDateClosure(date)
}
return viewController
}

func makeModifyViewController(coordinator: HomeCoordinator, id: Int = 0, type: MissionType) -> AddMissionViewController {
let viewController = AddMissionViewController(coordinator: coordinator)
viewController.setViewType(type)
viewController.setMissionId(id)
return viewController
}

func makeSelectDateViewController(coordinator: HomeCoordinator, data: MissionDetailResponseDTO, id: Int, moveDateClosure: @escaping (String) -> Void) -> DetailCalendarViewController {
let viewController = DetailCalendarViewController(coordinator: coordinator)
viewController.detailModel = data
viewController.userId = id
viewController.movedateClosure = { date in
moveDateClosure(date)
}
return viewController
}
}

// Add Mission
extension ViewControllerFactoryImpl {

func makeRecommendViewController(coordinator: HomeCoordinator, date: String) -> RecommendViewController {
let viewController = RecommendViewController(coordinator: coordinator)
viewController.setSelectDate(date)
return viewController
}

func makeRecommendDetailViewController(coordinator: HomeCoordinator, data: RecommendActionData) -> RecommendActionViewController {
let viewController = RecommendActionViewController(coordinator: coordinator)
viewController.actionHeaderData = data
return viewController
}

func makeAddViewController(coordinator: HomeCoordinator, data: AddMissionData, type: MissionType) -> AddMissionViewController {
let viewController = AddMissionViewController(coordinator: coordinator)
viewController.setViewType(type)
viewController.setNottodoLabel(data.nottodo ?? "")
viewController.setSituationLabel(data.situation ?? "")
viewController.setActionLabel(data.action ?? "")
viewController.setDate(data.date)

return viewController
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
//
// MyPageViewControllerFactory.swift
// iOS-NOTTODO
//
// Created by JEONGEUN KIM on 3/23/24.
//

import Foundation

extension ViewControllerFactoryImpl {
func makeMyInfoViewController(coordinator: MypageCoordinator) -> MyInfoViewController {
let viewController = MyInfoViewController(coordinator: coordinator)
return viewController
}

func makeMyInfoAccountViewController(coordinator: MypageCoordinator) -> MyInfoAccountViewController {
let viewController = MyInfoAccountViewController(coordinator: coordinator)
return viewController
}

func makeWithdrawViewController(coordinator: MypageCoordinator) -> NottodoModalViewController {
let viewController = NottodoModalViewController(coordinator: coordinator)
return viewController
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
//
// AchieveFlowControllerFactory.swift
// iOS-NOTTODO
//
// Created by JEONGEUN KIM on 3/23/24.
//

import Foundation

protocol AchieveFlowControllerFactory {
func makeAchieveViewController(coordinator: AchieveCoordinator) -> AchievementViewController
func makeAchieveDetailViewController(coordinator: AchieveCoordinator, date: String) -> DetailAchievementViewController
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
//
// AuthFlowControllerFactory.swift
// iOS-NOTTODO
//
// Created by JEONGEUN KIM on 3/23/24.
//

import Foundation
protocol AuthFlowControllerFactory {
func makeValueOnboardingViewController(coordinator: AuthCoordinator) -> ValueOnboardingViewController
func makeLogoOnboardingViewController(coordinator: AuthCoordinator) -> LogoOnboardingViewController
func makeSecondOnboardingViewController(coordinator: AuthCoordinator) -> SecondOnboardingViewController
func makeThirdOnboardingViewController(coordinator: AuthCoordinator) -> ThirdOnboardingViewController
func makeFourthOnboardingViewController(coordinator: AuthCoordinator) -> FourthOnboardingViewController
func makeFifthOnboardingViewController(coordinator: AuthCoordinator) -> FifthOnboardingViewController
func makeAuthViewController(coordinator: AuthCoordinator) -> AuthViewController
func makeNotificationDialogViewController(coordinator: AuthCoordinator, completion: @escaping () -> Void) -> NotificationDialogViewController
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
//
// HomeFlowControllerFactory.swift
// iOS-NOTTODO
//
// Created by JEONGEUN KIM on 3/23/24.
//

import Foundation

protocol HomeFlowControllerFactory {
func makePopupViewController(coordinator: HomeCoordinator, completion: @escaping () -> Void) -> CommonNotificationViewController
func makeHomeViewController(coordinator: HomeCoordinator) -> HomeViewController
func makeRecommendViewController(coordinator: HomeCoordinator, date: String) -> RecommendViewController
func makeRecommendDetailViewController(coordinator: HomeCoordinator, data: RecommendActionData) -> RecommendActionViewController
func makeAddViewController(coordinator: HomeCoordinator, data: AddMissionData, type: MissionType) -> AddMissionViewController
func makeDeleteViewController(coordinator: HomeCoordinator, completion: @escaping () -> Void) -> HomeDeleteViewController
func makeMissionDetailViewController(coordinator: HomeCoordinator, id: Int, deleteClosure: @escaping () -> Void, moveDateClosure: @escaping (String) -> Void) -> MissionDetailViewController
func makeModifyViewController(coordinator: HomeCoordinator, id: Int, type: MissionType) -> AddMissionViewController
func makeSelectDateViewController(coordinator: HomeCoordinator, data: MissionDetailResponseDTO, id: Int, moveDateClosure: @escaping (String) -> Void) -> DetailCalendarViewController
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
//
// MyPageFlowControllerFactory.swift
// iOS-NOTTODO
//
// Created by JEONGEUN KIM on 3/23/24.
//

import Foundation

protocol MyPageFlowControllerFactory {
func makeMyInfoViewController(coordinator: MypageCoordinator) -> MyInfoViewController
func makeMyInfoAccountViewController(coordinator: MypageCoordinator) -> MyInfoAccountViewController
func makeWithdrawViewController(coordinator: MypageCoordinator) -> NottodoModalViewController
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
//
// TabBarFlowControllerFactory.swift
// iOS-NOTTODO
//
// Created by JEONGEUN KIM on 3/23/24.
//

import UIKit

protocol TabBarControllerFactory {
func makeTabBarController(_ navigationController: UINavigationController) -> (UITabBarController, [UINavigationController])
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
//
// UpdateFlowcontrollerFactory.swift
// iOS-NOTTODO
//
// Created by JEONGEUN KIM on 3/23/24.
//

import Foundation

protocol UpdateFlowcontrollerFactory {
func makeUpdateCheckViewController(coordinator: UpdateCoordinator) -> UpdateCheckViewController
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
//
// TabBarViewControllerFactory.swift
// iOS-NOTTODO
//
// Created by JEONGEUN KIM on 3/23/24.
//

import UIKit

extension ViewControllerFactoryImpl {
func makeTabBarController(_: UINavigationController) -> (UITabBarController, [UINavigationController]) {
let tabBarController = TabBarController()
let navigationControllers = tabBarController.setTabBarItems().map(makeNavigationController)

return (tabBarController, navigationControllers)
}

func makeNavigationController(_ tabBarItem: UITabBarItem) -> UINavigationController {
let navigationController = UINavigationController()
navigationController.tabBarItem = tabBarItem
navigationController.setNavigationBarHidden(true, animated: false)
return navigationController
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
//
// UpdateViewControllerFactory.swift
// iOS-NOTTODO
//
// Created by JEONGEUN KIM on 3/23/24.
//

import Foundation

extension ViewControllerFactoryImpl {
func makeUpdateCheckViewController(coordinator: UpdateCoordinator) -> UpdateCheckViewController {
let viewController = UpdateCheckViewController(coordinator: coordinator)
return viewController
}
}
Loading