Skip to content

Commit c316de1

Browse files
authored
Merge pull request #259 from Team-return/feature/(#258)-winter_season
🔗 :: (#258) 겨울인턴 개발
2 parents 3e407a1 + 02c61a6 commit c316de1

File tree

13 files changed

+408
-18
lines changed

13 files changed

+408
-18
lines changed

Projects/Core/Sources/Steps/HomeStep.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ public enum HomeStep: Step {
44
case homeIsRequired
55
case alarmIsRequired
66
case companyIsRequired
7+
case winterInternIsRequired
78
case easterEggIsRequired
89
case rejectReasonIsRequired(
910
recruitmentID: Int,

Projects/Data/Sources/DataSource/API/RecruitmentsAPI.swift

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import AppNetwork
44

55
enum RecruitmentsAPI {
66
case fetchRecruitmentDetail(id: Int)
7-
case fetchRecruitmentList(page: Int, jobCode: String?, techCode: [String]?, name: String?)
7+
case fetchRecruitmentList(page: Int, jobCode: String?, techCode: [String]?, name: String?, winterIntern: Bool?)
88
}
99

1010
extension RecruitmentsAPI: JobisAPI {
@@ -33,13 +33,13 @@ extension RecruitmentsAPI: JobisAPI {
3333

3434
var task: Moya.Task {
3535
switch self {
36-
case let .fetchRecruitmentList(page, jobCode, techCode, name):
36+
case let .fetchRecruitmentList(page, jobCode, techCode, name, winterIntern):
3737
return .requestParameters(parameters: [
3838
"page": page,
3939
"job_code": jobCode ?? "",
4040
"tech_code": techCode?.joined(separator: ",") ?? "",
4141
"name": name ?? "",
42-
"winter_intern": false
42+
"winter_intern": winterIntern ?? false
4343
], encoding: URLEncoding.queryString)
4444

4545
default:

Projects/Data/Sources/DataSource/Remote/RemoteRecruitmentsDataSource.swift

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import Domain
44
protocol RemoteRecruitmentsDataSource {
55
func fetchRecruitmentDetail(id: Int) -> Single<RecruitmentDetailEntity>
66
func fetchRecruitmentList(
7-
page: Int, jobCode: String?, techCode: [String]?, name: String?
7+
page: Int, jobCode: String?, techCode: [String]?, name: String?, winterIntern: Bool?
88
) -> Single<[RecruitmentEntity]>
99
}
1010

@@ -16,10 +16,20 @@ final class RemoteRecruitmentsDataSourceImpl: RemoteBaseDataSource<RecruitmentsA
1616
}
1717

1818
func fetchRecruitmentList(
19-
page: Int, jobCode: String?, techCode: [String]?, name: String?
19+
page: Int,
20+
jobCode: String?,
21+
techCode: [String]?,
22+
name: String?,
23+
winterIntern: Bool?
2024
) -> Single<[RecruitmentEntity]> {
21-
request(.fetchRecruitmentList(page: page, jobCode: jobCode, techCode: techCode, name: name))
22-
.map(RecruitmentListResponseDTO.self)
23-
.map { $0.toDomain() }
25+
request(.fetchRecruitmentList(
26+
page: page,
27+
jobCode: jobCode,
28+
techCode: techCode,
29+
name: name,
30+
winterIntern: winterIntern
31+
))
32+
.map(RecruitmentListResponseDTO.self)
33+
.map { $0.toDomain() }
2434
}
2535
}

Projects/Data/Sources/Repositories/RecruitmentsRepositoryImpl.swift

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,17 @@ struct RecruitmentsRepositoryImpl: RecruitmentsRepository {
1313
}
1414

1515
func fetchRecruitmentList(
16-
page: Int, jobCode: String?, techCode: [String]?, name: String?
16+
page: Int,
17+
jobCode: String?,
18+
techCode: [String]?,
19+
name: String?, winterIntern: Bool?
1720
) -> Single<[RecruitmentEntity]> {
18-
remoteRecruitmentsDataSource.fetchRecruitmentList(page: page, jobCode: jobCode, techCode: techCode, name: name)
21+
remoteRecruitmentsDataSource.fetchRecruitmentList(
22+
page: page,
23+
jobCode: jobCode,
24+
techCode: techCode,
25+
name: name,
26+
winterIntern: winterIntern
27+
)
1928
}
2029
}

Projects/Domain/Sources/Repositories/RecruitmentsRepository.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,6 @@ import RxSwift
33
public protocol RecruitmentsRepository {
44
func fetchRecruitmentDetail(id: Int) -> Single<RecruitmentDetailEntity>
55
func fetchRecruitmentList(
6-
page: Int, jobCode: String?, techCode: [String]?, name: String?
6+
page: Int, jobCode: String?, techCode: [String]?, name: String?, winterIntern: Bool?
77
) -> Single<[RecruitmentEntity]>
88
}

Projects/Domain/Sources/UseCases/Recruitments/FetchRecruitmentListUseCase.swift

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,18 @@ public struct FetchRecruitmentListUseCase {
88
private let recruitmentsRepository: RecruitmentsRepository
99

1010
public func execute(
11-
page: Int, jobCode: String? = nil, techCode: [String]? = nil, name: String? = nil
11+
page: Int,
12+
jobCode: String? = nil,
13+
techCode: [String]? = nil,
14+
name: String? = nil,
15+
winterIntern: Bool? = nil
1216
) -> Single<[RecruitmentEntity]> {
13-
recruitmentsRepository.fetchRecruitmentList(page: page, jobCode: jobCode, techCode: techCode, name: name)
17+
recruitmentsRepository.fetchRecruitmentList(
18+
page: page,
19+
jobCode: jobCode,
20+
techCode: techCode,
21+
name: name,
22+
winterIntern: winterIntern
23+
)
1424
}
1525
}

Projects/Flow/Sources/Home/HomeFlow.swift

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,9 @@ public final class HomeFlow: Flow {
2828
case .companyIsRequired:
2929
return navigateToCompany()
3030

31+
case .winterInternIsRequired:
32+
return navigateToWinterIntern()
33+
3134
case .easterEggIsRequired:
3235
return navigateToEasterEgg()
3336

@@ -108,6 +111,23 @@ private extension HomeFlow {
108111
))
109112
}
110113

114+
func navigateToWinterIntern() -> FlowContributors {
115+
let winterInternFlow = WinterInternFlow(container: container)
116+
Flows.use(winterInternFlow, when: .created) { root in
117+
self.rootViewController.pushViewController(
118+
root,
119+
animated: true
120+
)
121+
}
122+
123+
return .one(flowContributor: .contribute(
124+
withNextPresentable: winterInternFlow,
125+
withNextStepper: OneStepper(
126+
withSingleStep: RecruitmentStep.recruitmentIsRequired
127+
)
128+
))
129+
}
130+
111131
func navigateToRejectReason(
112132
_ recruitmentID: Int,
113133
_ applicationID: Int,
Lines changed: 104 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,104 @@
1+
import UIKit
2+
import Presentation
3+
import Swinject
4+
import RxFlow
5+
import Core
6+
7+
public final class WinterInternFlow: Flow {
8+
public let container: Container
9+
private let rootViewController: WinterInternViewController
10+
public var root: Presentable {
11+
return rootViewController
12+
}
13+
14+
public init(container: Container) {
15+
self.container = container
16+
self.rootViewController = container.resolve(WinterInternViewController.self)!
17+
}
18+
19+
public func navigate(to step: Step) -> FlowContributors {
20+
guard let step = step as? RecruitmentStep else { return .none }
21+
22+
switch step {
23+
case .recruitmentIsRequired:
24+
return navigateToRecruitment()
25+
26+
case let .recruitmentDetailIsRequired(id):
27+
return navigateToRecruitmentDetail(recruitmentID: id)
28+
29+
case .recruitmentFilterIsRequired:
30+
return navigateToRecruitmentFilter()
31+
32+
case .searchRecruitmentIsRequired:
33+
return navigateToSearchRecruitment()
34+
}
35+
}
36+
}
37+
38+
private extension WinterInternFlow {
39+
func navigateToRecruitment() -> FlowContributors {
40+
return .one(flowContributor: .contribute(
41+
withNextPresentable: rootViewController,
42+
withNextStepper: rootViewController.viewModel
43+
))
44+
}
45+
46+
func navigateToRecruitmentDetail(recruitmentID: Int) -> FlowContributors {
47+
let recruitmentDetailFlow = RecruitmentDetailFlow(container: container)
48+
49+
Flows.use(recruitmentDetailFlow, when: .created) { (root) in
50+
let view = root as? RecruitmentDetailViewController
51+
view?.viewModel.recruitmentID = recruitmentID
52+
view?.isPopViewController = { id, bookmark in
53+
let popView = self.rootViewController
54+
var oldData = popView.viewModel.recruitmentData.value
55+
oldData.enumerated().forEach {
56+
if $0.element.recruitID == id {
57+
oldData[$0.offset].bookmarked = bookmark
58+
}
59+
}
60+
popView.viewModel.recruitmentData.accept(oldData)
61+
popView.isTabNavigation = false
62+
}
63+
self.rootViewController.navigationController?.pushViewController(
64+
view!, animated: true
65+
)
66+
}
67+
68+
return .one(flowContributor: .contribute(
69+
withNextPresentable: recruitmentDetailFlow,
70+
withNextStepper: OneStepper(withSingleStep: RecruitmentDetailStep.recruitmentDetailIsRequired)
71+
))
72+
}
73+
74+
func navigateToSearchRecruitment() -> FlowContributors {
75+
let searchRecruitmentFlow = SearchRecruitmentFlow(container: container)
76+
77+
Flows.use(searchRecruitmentFlow, when: .created) { (root) in
78+
let view = root as? SearchRecruitmentViewController
79+
self.rootViewController.navigationController?.pushViewController(
80+
view!, animated: true
81+
)
82+
}
83+
84+
return .one(flowContributor: .contribute(
85+
withNextPresentable: searchRecruitmentFlow,
86+
withNextStepper: OneStepper(withSingleStep: SearchRecruitmentStep.searchRecruitmentIsRequired)
87+
))
88+
}
89+
90+
func navigateToRecruitmentFilter() -> FlowContributors {
91+
let recruitmentFilterFlow = RecruitmentFilterFlow(container: container)
92+
93+
Flows.use(recruitmentFilterFlow, when: .created) { (root) in
94+
self.rootViewController.navigationController?.pushViewController(
95+
root, animated: true
96+
)
97+
}
98+
99+
return .one(flowContributor: .contribute(
100+
withNextPresentable: recruitmentFilterFlow,
101+
withNextStepper: OneStepper(withSingleStep: RecruitmentFilterStep.recruitmentFilterIsRequired)
102+
))
103+
}
104+
}

Projects/Presentation/Sources/DI/PresentationAssembly.swift

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -327,6 +327,18 @@ public final class PresentationAssembly: Assembly {
327327
MajorBottomSheetViewModel()
328328
}
329329

330+
container.register(WinterInternViewController.self) { resolver in
331+
WinterInternViewController(
332+
resolver.resolve(WinterInternVieModel.self)!
333+
)
334+
}
335+
container.register(WinterInternVieModel.self) { resolver in
336+
WinterInternVieModel(
337+
fetchRecruitmentListUseCase: resolver.resolve(FetchRecruitmentListUseCase.self)!,
338+
bookmarkUseCase: resolver.resolve(BookmarkUseCase.self)!
339+
)
340+
}
341+
330342
container.register(EasterEggViewController.self) { resolver in
331343
EasterEggViewController()
332344
}

Projects/Presentation/Sources/Home/HomeViewController.swift

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,7 @@ public final class HomeViewController: BaseViewController<HomeViewModel> {
112112
navigateToAlarmButtonDidTap: navigateToAlarmButton.rx.tap.asSignal(),
113113
navigateToEasterEggDidTap: navigateToEasterEggDidTap,
114114
navigateToCompanyButtonDidTap: findCompanysCard.rx.tap.asSignal(),
115+
navigateToWinterInternButtonDidTap: findWinterRecruitmentsCard.rx.tap.asSignal(),
115116
rejectButtonDidTap: rejectButtonDidTap,
116117
reApplyButtonDidTap: reApplyButtonDidTap,
117118
applicationStatusTableViewDidTap: applicationStatusTableView.rx
@@ -196,11 +197,6 @@ public final class HomeViewController: BaseViewController<HomeViewModel> {
196197
.bind {
197198
self.showTabbar()
198199
}.disposed(by: disposeBag)
199-
200-
findWinterRecruitmentsCard.rx.tap.subscribe(onNext: {
201-
print("findWinterRecruitment!!")
202-
})
203-
.disposed(by: disposeBag)
204200
}
205201

206202
public override func configureNavigation() {

0 commit comments

Comments
 (0)