Skip to content

Commit de5b7a6

Browse files
committed
implement: NetwokUseCase 구현
1 parent 4b1a17f commit de5b7a6

File tree

10 files changed

+85
-23
lines changed

10 files changed

+85
-23
lines changed

Podfile

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,4 +13,19 @@ target 'RxSidedish' do
1313
pod 'RxDataSources'
1414
pod 'RxViewController'
1515
pod 'Alamofire'
16+
pod 'RxBlocking'
17+
end
18+
19+
20+
target 'RxSidedishTests' do
21+
use_frameworks!
22+
23+
pod 'RxSwift'
24+
pod 'RxCocoa'
25+
pod 'Action'
26+
pod 'NSObject+Rx'
27+
pod 'RxDataSources'
28+
pod 'RxViewController'
29+
pod 'Alamofire'
30+
pod 'RxBlocking'
1631
end

Podfile.lock

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,10 @@ PODS:
44
- RxSwift (~> 6.0)
55
- Alamofire (5.4.3)
66
- Differentiator (5.0.0)
7-
- "NSObject+Rx (5.2.1)":
8-
- RxSwift (~> 6.0)
7+
- "NSObject+Rx (5.2.2)":
8+
- RxSwift (~> 6.2)
9+
- RxBlocking (6.2.0):
10+
- RxSwift (= 6.2.0)
911
- RxCocoa (6.2.0):
1012
- RxRelay (= 6.2.0)
1113
- RxSwift (= 6.2.0)
@@ -24,6 +26,7 @@ DEPENDENCIES:
2426
- Action
2527
- Alamofire
2628
- "NSObject+Rx"
29+
- RxBlocking
2730
- RxCocoa
2831
- RxDataSources
2932
- RxSwift
@@ -35,6 +38,7 @@ SPEC REPOS:
3538
- Alamofire
3639
- Differentiator
3740
- "NSObject+Rx"
41+
- RxBlocking
3842
- RxCocoa
3943
- RxDataSources
4044
- RxRelay
@@ -45,13 +49,14 @@ SPEC CHECKSUMS:
4549
Action: 47f1825511907b4fcd79dd7a7db9526c20f78018
4650
Alamofire: e447a2774a40c996748296fa2c55112fdbbc42f9
4751
Differentiator: e8497ceab83c1b10ca233716d547b9af21b9344d
48-
"NSObject+Rx": 49ffbf55ad0bbc29a44547db63a9e33caf0c5d60
52+
"NSObject+Rx": 61cf1f7306a73dcef8b36649198af0813ec18dfd
53+
RxBlocking: 0b29f7d2079109a8de49c411381bed7c33ef1eeb
4954
RxCocoa: 4baf94bb35f2c0ab31bc0cb9f1900155f646ba42
5055
RxDataSources: aa47cc1ed6c500fa0dfecac5c979b723542d79cf
5156
RxRelay: e72dbfd157807478401ef1982e1c61c945c94b2f
5257
RxSwift: d356ab7bee873611322f134c5f9ef379fa183d8f
5358
RxViewController: 56486fa0afd629a1d6b5ba077f3b8cd9dc31b5d2
5459

55-
PODFILE CHECKSUM: 8bb17836f1718029e16369a36a6cad324b08fed9
60+
PODFILE CHECKSUM: e70a84f31488d179909b2e157f18fed7bebd5fe2
5661

5762
COCOAPODS: 1.10.1

RxSidedish.xcodeproj/project.pbxproj

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88

99
/* Begin PBXBuildFile section */
1010
220AADC426EB5716008DB9ED /* ViewDetailSidedishItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 220AADC326EB5716008DB9ED /* ViewDetailSidedishItem.swift */; };
11+
220AADC926EB8817008DB9ED /* NetworkUseCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 220AADC826EB8817008DB9ED /* NetworkUseCase.swift */; };
1112
220E095E26DD1A30003C72AE /* NetworkManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 220E095D26DD1A30003C72AE /* NetworkManager.swift */; };
1213
221E9B1726DDCEA200FCF81C /* SidedishItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 221E9B1626DDCEA200FCF81C /* SidedishItem.swift */; };
1314
221E9B2526DDD77A00FCF81C /* MainBody.swift in Sources */ = {isa = PBXBuildFile; fileRef = 221E9B2426DDD77A00FCF81C /* MainBody.swift */; };
@@ -61,6 +62,7 @@
6162

6263
/* Begin PBXFileReference section */
6364
220AADC326EB5716008DB9ED /* ViewDetailSidedishItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewDetailSidedishItem.swift; sourceTree = "<group>"; };
65+
220AADC826EB8817008DB9ED /* NetworkUseCase.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NetworkUseCase.swift; sourceTree = "<group>"; };
6466
220E095D26DD1A30003C72AE /* NetworkManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NetworkManager.swift; sourceTree = "<group>"; };
6567
221E9B1626DDCEA200FCF81C /* SidedishItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SidedishItem.swift; sourceTree = "<group>"; };
6668
221E9B2426DDD77A00FCF81C /* MainBody.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MainBody.swift; sourceTree = "<group>"; };
@@ -130,6 +132,14 @@
130132
/* End PBXFrameworksBuildPhase section */
131133

132134
/* Begin PBXGroup section */
135+
220AADC726EB8803008DB9ED /* UseCase */ = {
136+
isa = PBXGroup;
137+
children = (
138+
220AADC826EB8817008DB9ED /* NetworkUseCase.swift */,
139+
);
140+
path = UseCase;
141+
sourceTree = "<group>";
142+
};
133143
221E9B1526DDCD7300FCF81C /* Entity */ = {
134144
isa = PBXGroup;
135145
children = (
@@ -180,8 +190,8 @@
180190
children = (
181191
223F3F8C26DE0023005AFBB0 /* MainViewModel.swift */,
182192
223F3F8F26DE002B005AFBB0 /* DetailViewModel.swift */,
183-
222E078A26E0C1F000F53227 /* CommonViewModel.swift */,
184193
220AADC326EB5716008DB9ED /* ViewDetailSidedishItem.swift */,
194+
222E078A26E0C1F000F53227 /* CommonViewModel.swift */,
185195
);
186196
name = ViewModel;
187197
sourceTree = "<group>";
@@ -243,9 +253,10 @@
243253
229E7E1826DE8BD50091BE43 /* Service */,
244254
222E078E26E0C40900F53227 /* View */,
245255
226B8BC126E6627B00F79865 /* Delegate */,
246-
223F3F9626DE6FFE005AFBB0 /* ViewController */,
247256
223F3F8426DDFDEE005AFBB0 /* Scene */,
257+
223F3F9626DE6FFE005AFBB0 /* ViewController */,
248258
223F3F8B26DE0009005AFBB0 /* ViewModel */,
259+
220AADC726EB8803008DB9ED /* UseCase */,
249260
223F3F7C26DDF211005AFBB0 /* extension */,
250261
221E9B1526DDCD7300FCF81C /* Entity */,
251262
22BF2B2726DD18FF009A8B51 /* Network */,
@@ -501,6 +512,7 @@
501512
224BE9CF26E622ED00EC99C6 /* RoundImageView.swift in Sources */,
502513
22BF2B0C26DD13AF009A8B51 /* MainViewController.swift in Sources */,
503514
223F3F7626DDE60B005AFBB0 /* ServerAPI.swift in Sources */,
515+
220AADC926EB8817008DB9ED /* NetworkUseCase.swift in Sources */,
504516
223F3F8D26DE0023005AFBB0 /* MainViewModel.swift in Sources */,
505517
221E9B1726DDCEA200FCF81C /* SidedishItem.swift in Sources */,
506518
224BE9CB26E61A8400EC99C6 /* MainTableViewHeaderView.swift in Sources */,

RxSidedish/AppDelegate.swift

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,9 @@ class AppDelegate: UIResponder, UIApplicationDelegate {
1616

1717
let sceneCoordinator = SceneCoordinator(window: window!)
1818
let storage = SidedishStorage()
19-
let networkManager = NetworkManager()
20-
let mainViewModel = MainViewModel(title: "", sceneCoordinator: sceneCoordinator, storage: storage, networkManager: networkManager)
19+
let networkUseCase = NetworkUseCase()
20+
let mainViewModel = MainViewModel(title: "", sceneCoordinator: sceneCoordinator, storage: storage, networkUseCase: networkUseCase)
21+
2122
let mainScene = Scene.main(mainViewModel)
2223

2324
sceneCoordinator.transition(to: mainScene, using: .root, animated: false)

RxSidedish/CommonViewModel.swift

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,12 +13,12 @@ class CommonViewModel: NSObject {
1313
let title: Driver<String>
1414
let sceneCoordinator: SceneCoordinatorType
1515
let storage: SidedishStorageType
16-
let networkManager: Networkable
16+
let networkUseCase: NetworkUseCase
1717

18-
init(title: String, sceneCoordinator: SceneCoordinatorType, storage: SidedishStorageType, networkManager: Networkable) {
18+
init(title: String, sceneCoordinator: SceneCoordinatorType, storage: SidedishStorageType, networkUseCase: NetworkUseCase) {
1919
self.title = Observable.just(title).asDriver(onErrorJustReturn: "")
2020
self.sceneCoordinator = sceneCoordinator
2121
self.storage = storage
22-
self.networkManager = networkManager
22+
self.networkUseCase = networkUseCase
2323
}
2424
}

RxSidedish/DetailViewModel.swift

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ class DetailViewModel: CommonViewModel {
1818
var thumbnailImagesURL: Observable<String>
1919
var detailSectionImageURL: Observable<String>
2020

21-
init(title: String, sceneCoordinator: SceneCoordinatorType, storage: SidedishStorageType, networkManager: Networkable, detailHash: String) {
21+
init(title: String, sceneCoordinator: SceneCoordinatorType, storage: SidedishStorageType, networkUseCase: NetworkUseCase, detailHash: String) {
2222

2323
let fetching = PublishSubject<Void>()
2424

@@ -29,8 +29,8 @@ class DetailViewModel: CommonViewModel {
2929
fetching
3030
.asObservable()
3131
.debug()
32-
.flatMap{ networkManager.get(type: DetailBody.self, endpoint: .detail(detailHash)) }
33-
.map({ ViewDetailSidedishItem(title: title, item: $0.data) })
32+
.flatMap{ networkUseCase.getDetailSideDishItem(hash: detailHash) }
33+
.map({ ViewDetailSidedishItem(title: title, item: $0) })
3434
.subscribe(onNext: item.onNext)
3535
.disposed(by: disposeBag)
3636

@@ -44,6 +44,6 @@ class DetailViewModel: CommonViewModel {
4444
.map({ $0.detailSectionImagesURL })
4545
.flatMap({ Observable.from($0) })
4646

47-
super.init(title: title, sceneCoordinator: sceneCoordinator, storage: storage, networkManager: networkManager)
47+
super.init(title: title, sceneCoordinator: sceneCoordinator, storage: storage, networkUseCase: networkUseCase)
4848
}
4949
}

RxSidedish/MainViewModel.swift

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ class MainViewModel: CommonViewModel {
5151
lazy var detailAction: Action<SidedishItem, Void> = {
5252
return Action { item in
5353

54-
let detailViewModel = DetailViewModel(title: item.title, sceneCoordinator: self.sceneCoordinator, storage: self.storage, networkManager: self.networkManager, detailHash: item.detailHash)
54+
let detailViewModel = DetailViewModel(title: item.title, sceneCoordinator: self.sceneCoordinator, storage: self.storage, networkUseCase: self.networkUseCase, detailHash: item.detailHash)
5555

5656
let detailScene = Scene.detail(detailViewModel)
5757

@@ -60,11 +60,8 @@ class MainViewModel: CommonViewModel {
6060
}()
6161

6262
func fetchSidedishes() -> Observable<[MainSection]> {
63-
Observable.zip(
64-
ServerAPI.mainCategories.map {
65-
networkManager.get(type: MainBody.self, endpoint: $0)
66-
})
67-
.map({ $0.map{ $0.mainItems } })
63+
64+
networkUseCase.getSidedishItems()
6865
.flatMap(storage.allUpdateSidedish)
6966
.asObservable()
7067
}
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
//
2+
// NetworkUseCase.swift
3+
// RxSidedish
4+
//
5+
// Created by Issac on 2021/09/10.
6+
//
7+
8+
import Foundation
9+
import RxSwift
10+
11+
class NetworkUseCase {
12+
let networkManager: Networkable
13+
14+
init(networkManager: Networkable = NetworkManager()) {
15+
self.networkManager = networkManager
16+
}
17+
18+
func getSidedishItems() -> Observable<[[SidedishItem]]> {
19+
20+
return Observable.zip(
21+
ServerAPI.mainCategories.map {
22+
networkManager.get(type: MainBody.self, endpoint: $0)
23+
})
24+
.map({ $0.map{ $0.mainItems } })
25+
}
26+
27+
func getDetailSideDishItem(hash: String) -> Observable<DetailSidedishItem> {
28+
29+
return networkManager.get(type: DetailBody.self, endpoint: .detail(hash))
30+
.map({ $0.data })
31+
}
32+
}

RxSidedish/ViewController/MainViewController.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ class MainViewController: UIViewController, ViewModelBindableType {
4141
.bind(to: viewModel.detailAction.inputs)
4242
.disposed(by: rx.disposeBag)
4343

44-
//TODO: -
44+
//MARK: -
4545
viewModel.fetchSidedishes()
4646
.subscribe{ _ in }
4747
.disposed(by: rx.disposeBag)

RxSidedish/ViewDetailSidedishItem.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77

88
import Foundation
99

10-
struct ViewDetailSidedishItem {
10+
struct ViewDetailSidedishItem: Equatable {
1111
var title: String
1212
var thumbnailImagesURL: [String]
1313
let productDescription: String

0 commit comments

Comments
 (0)