From 5ed9166dc96f0191237ffa1bbd35f1ec7945e2a9 Mon Sep 17 00:00:00 2001 From: mmaybei Date: Thu, 18 Jul 2024 22:22:41 +0900 Subject: [PATCH 1/6] =?UTF-8?q?feat/#227=20=ED=99=88=20=ED=99=94=EB=A9=B4?= =?UTF-8?q?=20=EB=B0=8F=20=EB=82=B4=20=EB=AA=A8=EC=9E=84=20=ED=99=94?= =?UTF-8?q?=EB=A9=B4=20api=20=EC=97=B0=EA=B2=B0!?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Source/Core/MainTabBarController.swift | 4 +-- .../Home/ServiceType/HomeServiceType.swift | 26 +++++++++++---- .../Source/Home/ViewModel/HomeViewModel.swift | 33 ++++++++++++++++--- .../ServiceType/MeetingListServiceType.swift | 14 ++++---- .../ViewModel/MeetingListViewModel.swift | 9 ++++- 5 files changed, 65 insertions(+), 21 deletions(-) diff --git a/KkuMulKum/Source/Core/MainTabBarController.swift b/KkuMulKum/Source/Core/MainTabBarController.swift index 2f6876d9..f35f541e 100644 --- a/KkuMulKum/Source/Core/MainTabBarController.swift +++ b/KkuMulKum/Source/Core/MainTabBarController.swift @@ -25,7 +25,7 @@ final class MainTabBarController: UITabBarController { private func setTabBar() { let homeViewController: HomeViewController = HomeViewController( viewModel: HomeViewModel( - service: MockHomeService() + service: HomeService() )).then { $0.tabBarItem.title = "홈" $0.tabBarItem.image = .iconHome @@ -33,7 +33,7 @@ final class MainTabBarController: UITabBarController { let meetingListViewController = MeetingListViewController( viewModel: MeetingListViewModel( - service: MockMeetingListService() + service: MeetingService() )).then { $0.tabBarItem.title = "내 모임" $0.tabBarItem.image = .iconGroup diff --git a/KkuMulKum/Source/Home/ServiceType/HomeServiceType.swift b/KkuMulKum/Source/Home/ServiceType/HomeServiceType.swift index 7b6df25b..d7a4f77a 100644 --- a/KkuMulKum/Source/Home/ServiceType/HomeServiceType.swift +++ b/KkuMulKum/Source/Home/ServiceType/HomeServiceType.swift @@ -10,13 +10,27 @@ import Foundation import Moya protocol HomeServiceType { - func fetchLoginUser() -> ResponseBodyDTO - func fetchNearestPromise() -> ResponseBodyDTO - func fetchUpcomingPromise() -> ResponseBodyDTO + func fetchLoginUser() async throws -> ResponseBodyDTO? + func fetchNearestPromise() async throws -> ResponseBodyDTO? + func fetchUpcomingPromise() async throws -> ResponseBodyDTO? +} + +extension HomeService: HomeServiceType { + func fetchLoginUser() async throws -> ResponseBodyDTO? { + return try await request(with: .fetchLoginUser) + } + + func fetchNearestPromise() async throws -> ResponseBodyDTO? { + return try await request(with: .fetchNearestPromise) + } + + func fetchUpcomingPromise() async throws -> ResponseBodyDTO? { + return try await request(with: .fetchUpcomingPromise) + } } final class MockHomeService: HomeServiceType { - func fetchLoginUser() -> ResponseBodyDTO { + func fetchLoginUser() async throws -> ResponseBodyDTO? { let mockData = ResponseBodyDTO( success: true, data: LoginUserModel( @@ -33,7 +47,7 @@ final class MockHomeService: HomeServiceType { return mockData } - func fetchNearestPromise() -> ResponseBodyDTO { + func fetchNearestPromise() async throws -> ResponseBodyDTO? { let mockData = ResponseBodyDTO( success: true, data: NearestPromiseModel( @@ -51,7 +65,7 @@ final class MockHomeService: HomeServiceType { return mockData } - func fetchUpcomingPromise() -> ResponseBodyDTO { + func fetchUpcomingPromise() async throws -> ResponseBodyDTO? { let mockData = ResponseBodyDTO( success: true, data: UpcomingPromiseListModel( diff --git a/KkuMulKum/Source/Home/ViewModel/HomeViewModel.swift b/KkuMulKum/Source/Home/ViewModel/HomeViewModel.swift index de6a9329..5dd59ab1 100644 --- a/KkuMulKum/Source/Home/ViewModel/HomeViewModel.swift +++ b/KkuMulKum/Source/Home/ViewModel/HomeViewModel.swift @@ -85,16 +85,39 @@ final class HomeViewModel { } func requestLoginUser() { - loginUser.value = service.fetchLoginUser() - levelName.value = getLevelName(level: loginUser.value?.data?.level ?? 1) - levelCaption.value = getLevelCaption(level: loginUser.value?.data?.level ?? 1) + Task { + do { + loginUser.value = try await service.fetchLoginUser() + levelName.value = getLevelName(level: loginUser.value?.data?.level ?? 1) + levelCaption.value = getLevelCaption(level: loginUser.value?.data?.level ?? 1) + } catch { + print(">>> \(error.localizedDescription) : \(#function)") + } + } +// loginUser.value = service.fetchLoginUser() +// levelName.value = getLevelName(level: loginUser.value?.data?.level ?? 1) +// levelCaption.value = getLevelCaption(level: loginUser.value?.data?.level ?? 1) } func requestNearestPromise() { - nearestPromise.value = service.fetchNearestPromise() + Task { + do { + nearestPromise.value = try await service.fetchNearestPromise() + } catch { + print(">>> \(error.localizedDescription) : \(#function)") + } + } +// nearestPromise.value = service.fetchNearestPromise() } func requestUpcomingPromise() { - upcomingPromiseList.value = service.fetchUpcomingPromise() + Task { + do { + upcomingPromiseList.value = try await service.fetchUpcomingPromise() + } catch { + print(">>> \(error.localizedDescription) : \(#function)") + } + } +// upcomingPromiseList.value = service.fetchUpcomingPromise() } } diff --git a/KkuMulKum/Source/MeetingList/ServiceType/MeetingListServiceType.swift b/KkuMulKum/Source/MeetingList/ServiceType/MeetingListServiceType.swift index d60cfa1c..d104bf69 100644 --- a/KkuMulKum/Source/MeetingList/ServiceType/MeetingListServiceType.swift +++ b/KkuMulKum/Source/MeetingList/ServiceType/MeetingListServiceType.swift @@ -10,17 +10,17 @@ import Foundation import Moya protocol MeetingListServiceType { - func fetchMeetingList() -> ResponseBodyDTO + func fetchMeetingList() async throws -> ResponseBodyDTO? } -//extension MeetingService: MeetingListServiceType { -// func fetchMeetingList() -> ResponseBodyDTO { -// <#code#> -// } -//} +extension MeetingService: MeetingListServiceType { + func fetchMeetingList() async throws -> ResponseBodyDTO? { + return try await request(with: .fetchMeetingList) + } +} final class MockMeetingListService: MeetingListServiceType { - func fetchMeetingList() -> ResponseBodyDTO { + func fetchMeetingList() async throws -> ResponseBodyDTO? { let mockData = ResponseBodyDTO( success: true, data: MeetingListModel( diff --git a/KkuMulKum/Source/MeetingList/ViewModel/MeetingListViewModel.swift b/KkuMulKum/Source/MeetingList/ViewModel/MeetingListViewModel.swift index 17a92ba9..23bbd282 100644 --- a/KkuMulKum/Source/MeetingList/ViewModel/MeetingListViewModel.swift +++ b/KkuMulKum/Source/MeetingList/ViewModel/MeetingListViewModel.swift @@ -19,6 +19,13 @@ final class MeetingListViewModel { } func requestMeetingList() { - meetingList.value = service.fetchMeetingList() + Task { + do { + meetingList.value = try await service.fetchMeetingList() + } catch { + print(">>> \(error.localizedDescription) : \(#function)") + } + } +// meetingList.value = service.fetchMeetingList() } } From 69c4e687ddf1f0254be20f0fa844fcba43e8fbdf Mon Sep 17 00:00:00 2001 From: mmaybei Date: Thu, 18 Jul 2024 22:44:16 +0900 Subject: [PATCH 2/6] =?UTF-8?q?feat/#227=20=ED=99=88=20=ED=99=94=EB=A9=B4?= =?UTF-8?q?=20=EC=97=A0=ED=8B=B0=EB=B7=B0=20=EB=B6=84=EA=B8=B0=20=EC=B2=98?= =?UTF-8?q?=EB=A6=AC=20=EC=99=84!?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ViewController/HomeViewController.swift | 59 ++++++++++++------- 1 file changed, 37 insertions(+), 22 deletions(-) diff --git a/KkuMulKum/Source/Home/ViewController/HomeViewController.swift b/KkuMulKum/Source/Home/ViewController/HomeViewController.swift index 66b4e0b6..80e4fce4 100644 --- a/KkuMulKum/Source/Home/ViewController/HomeViewController.swift +++ b/KkuMulKum/Source/Home/ViewController/HomeViewController.swift @@ -259,27 +259,34 @@ private extension HomeViewController { func updateNearestPromise() { viewModel.nearestPromise.bind { [weak self] _ in DispatchQueue.main.async { - let data = self?.viewModel.nearestPromise.value - self?.rootView.todayPromiseView.meetingNameLabel.setText( - data?.data?.meetingName ?? "", - style: .caption02, - color: .green3 - ) - self?.rootView.todayPromiseView.nameLabel.setText( - data?.data?.name ?? "", - style: .body03, - color: .gray8 - ) - self?.rootView.todayPromiseView.placeNameLabel.setText( - data?.data?.placeName ?? "", - style: .body06, - color: .gray7 - ) - self?.rootView.todayPromiseView.timeLabel.setText( - data?.data?.time ?? "", - style: .body06, - color: .gray7 - ) + guard let self = self else { return } + let data = self.viewModel.nearestPromise.value + + if data?.data == nil { + self.rootView.todayPromiseView.isHidden = true + self.rootView.todayEmptyView.isHidden = false + } else { + self.rootView.todayPromiseView.meetingNameLabel.setText( + data?.data?.meetingName ?? "", + style: .caption02, + color: .green3 + ) + self.rootView.todayPromiseView.nameLabel.setText( + data?.data?.name ?? "", + style: .body03, + color: .gray8 + ) + self.rootView.todayPromiseView.placeNameLabel.setText( + data?.data?.placeName ?? "", + style: .body06, + color: .gray7 + ) + self.rootView.todayPromiseView.timeLabel.setText( + data?.data?.time ?? "", + style: .body06, + color: .gray7 + ) + } } } } @@ -287,7 +294,15 @@ private extension HomeViewController { func updateUpcomingPromise() { viewModel.upcomingPromiseList.bind { [weak self] _ in DispatchQueue.main.async { - self?.rootView.upcomingPromiseView.reloadData() + guard let self = self else { return } + let data = self.viewModel.nearestPromise.value + + if data?.data == nil { + self.rootView.upcomingPromiseView.isHidden = true + self.rootView.upcomingEmptyView.isHidden = false + } else { + self.rootView.upcomingPromiseView.reloadData() + } } } } From fb425547a7c69178e0c22b1d33dc07c5864fece6 Mon Sep 17 00:00:00 2001 From: mmaybei Date: Thu, 18 Jul 2024 23:48:52 +0900 Subject: [PATCH 3/6] =?UTF-8?q?feat/#227=20=EB=82=B4=20=EB=AA=A8=EC=9E=84?= =?UTF-8?q?=20=EB=A6=AC=EC=8A=A4=ED=8A=B8=20=ED=99=94=EB=A9=B4=20=EC=97=A0?= =?UTF-8?q?=ED=8B=B0=EB=B7=B0=20=EB=B6=84=EA=B8=B0=20=EC=B2=98=EB=A6=AC=20?= =?UTF-8?q?=EC=99=84!?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Image/img_empty.imageset/Contents.json | 23 ++++++++++++++++ .../Image/img_empty.imageset/empty.png | Bin 0 -> 2003 bytes .../Image/img_empty.imageset/empty@2x.png | Bin 0 -> 4249 bytes .../Image/img_empty.imageset/empty@3x.png | Bin 0 -> 6471 bytes .../MeetingList/View/MeetingListView.swift | 25 +++++++++++++++++- .../MeetingListViewController.swift | 15 ++++++++--- 6 files changed, 59 insertions(+), 4 deletions(-) create mode 100644 KkuMulKum/Resource/Assets.xcassets/Image/img_empty.imageset/Contents.json create mode 100644 KkuMulKum/Resource/Assets.xcassets/Image/img_empty.imageset/empty.png create mode 100644 KkuMulKum/Resource/Assets.xcassets/Image/img_empty.imageset/empty@2x.png create mode 100644 KkuMulKum/Resource/Assets.xcassets/Image/img_empty.imageset/empty@3x.png diff --git a/KkuMulKum/Resource/Assets.xcassets/Image/img_empty.imageset/Contents.json b/KkuMulKum/Resource/Assets.xcassets/Image/img_empty.imageset/Contents.json new file mode 100644 index 00000000..319c98e2 --- /dev/null +++ b/KkuMulKum/Resource/Assets.xcassets/Image/img_empty.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "empty.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "empty@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "empty@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/KkuMulKum/Resource/Assets.xcassets/Image/img_empty.imageset/empty.png b/KkuMulKum/Resource/Assets.xcassets/Image/img_empty.imageset/empty.png new file mode 100644 index 0000000000000000000000000000000000000000..ebc5618f52a6e9eb4b30b3c129ac47a9aac20fdd GIT binary patch literal 2003 zcmV;^2Q2uBP)N7Dq`$%ocjAz`M55}4a&*N%1Xc=cQ{=a3I9J!)5j{O zP^1@}UbkAUkQ`}{BVWIM?H)ODa$?aY)`NjiUqpM0zIaoB(h5~Gkt88$#8L`XQ;{SgDa2}O zGS^ik5O8`f+UA&)P@Lfr)mJ15{K7}c9V1mwRJjl2ku1n6IAT$|ySqK|BzY<~VvF+D zq=k*DwHjL#TT_)C%G|Inf8jG0s@ZJbCr=92Wf7lI)f2bE74qn4NsGEp9uwE+@bAvf zPQX0_R2JOxKwrLmiMB6XxIh;#UOd$Nu0Ws2q8g1xKqc|x#}E4S=@Tv%B^2n_uV06j zKM&BSNhPzszMk6m`}gld%b%Chg*tKKL~7r$W5*6He_kS?_V)HdDv6UPPeyG9+CZes zmoL+qGiMGhe;%NZbPw7z>@o1D>By?LOdb=2y^Xl=p^d zHp`r%=K!sJFY$l)S6!~60~(H=22>qFP7k@fFS0T=gj;~|JbdE0=7#A6&fn#aKWVo6 z*$3Pu(?5OswA+k3EnzlaizIOt%c<%K)9upi zgE4@|E+<%96n`=L$)8Y#;Jfw1^XJc7mB~t|3NI*vSAWCCb+D~^ Wo75JHC3Wb0W zRP7}oZLTqy&azG115~+y3T9(tgWkP+7j0j?dX-L{I;G4Ph9Q0Y_>nGMx%Q$Qu~_U&7G|Necn{q5T~x_$e0D$mcKKk3!0SJ5`|LQDu&0s)>?S*(FB zgR$y~7%Zjm`Sa&^8-irzG36@=qt~vrsKiLHHG6w|QI+D`uKHqgb9D6R(P;bJxpQ&B zb=3}ek|gtOZf?@{_O|vqNc^Bq4xp_%E9SDMzf*VC&dyHTWoa73!Kx;mNI(|u`0?Yk zxVT7f-n@zS-@JKKnV)?ex^?ST+(yZ2hlN7;gP5)ZksxfNVgK;Kzr9NuU(pnD1TKN~ zI^(sqwde=hfb}c*i|1i$Ys-4|6c!J;EFj_<@sh1rS!R=MI=KW`D`$(Y$`pMai0T4c z-!*oYsM z)gGXLXviJ!MkC-{oA1DH$tjf5qLeLa-o@DR$Dtj8tB?dDp#d+Vio&Y!UAWHpU3Svz zpzNys`EET1@Ry#%Vr-Fu92B||tx`?lniQ(`H(fH<8E;W(l*95S&m4;!XJII+NLCR8 zNp--~>V{N5w39r%Pzl(j`K~*r6^i{6?MYRIT@LM<>hc|)ir|H^#0zDKRw#Z9`Ge|5 zpgUl)sJi)3AkZDq1y!zdRE?HufT6ICy9%K!yHcn+2QSr?T`3edqk6q}4`sclJ7`=cDMn~uSydl^fJhx(a0p=R z;S?u!D&A(HJu->}Tq2V7C?kH!i~(WbD?PEv?6g8zObtS8xLKd8FyQpSC5UO>@RD5` zPTyH literal 0 HcmV?d00001 diff --git a/KkuMulKum/Resource/Assets.xcassets/Image/img_empty.imageset/empty@2x.png b/KkuMulKum/Resource/Assets.xcassets/Image/img_empty.imageset/empty@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..c698147219eee3dc2257aeb2c52fabcd867ef5a3 GIT binary patch literal 4249 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 literal 0 HcmV?d00001 diff --git a/KkuMulKum/Resource/Assets.xcassets/Image/img_empty.imageset/empty@3x.png b/KkuMulKum/Resource/Assets.xcassets/Image/img_empty.imageset/empty@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..6719945e95ff916396a12958fcd5f175d02dcea4 GIT binary patch literal 6471 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 rd4-H*8D)7{;d5sTU-xs)aMx!d)-?Rjt Date: Fri, 19 Jul 2024 00:30:16 +0900 Subject: [PATCH 4/6] =?UTF-8?q?fix/#227=20=ED=99=88=20=EB=A0=88=EC=9D=B4?= =?UTF-8?q?=EC=95=84=EC=9B=83=20=EA=B9=A8=EC=A7=84=20=EB=B6=80=EB=B6=84=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- KkuMulKum/Source/Home/View/HomeView.swift | 2 +- .../Source/Home/ViewController/HomeViewController.swift | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/KkuMulKum/Source/Home/View/HomeView.swift b/KkuMulKum/Source/Home/View/HomeView.swift index 38db8bfa..3430fd19 100644 --- a/KkuMulKum/Source/Home/View/HomeView.swift +++ b/KkuMulKum/Source/Home/View/HomeView.swift @@ -186,7 +186,7 @@ final class HomeView: BaseView { promiseView.snp.makeConstraints { $0.leading.trailing.equalToSuperview() - $0.height.equalTo(646) + $0.height.equalTo(Screen.height(630)) $0.top.equalToSuperview().offset(396) $0.bottom.equalTo(contentView) } diff --git a/KkuMulKum/Source/Home/ViewController/HomeViewController.swift b/KkuMulKum/Source/Home/ViewController/HomeViewController.swift index 80e4fce4..63a64195 100644 --- a/KkuMulKum/Source/Home/ViewController/HomeViewController.swift +++ b/KkuMulKum/Source/Home/ViewController/HomeViewController.swift @@ -45,7 +45,7 @@ class HomeViewController: BaseViewController { override func viewDidLoad() { super.viewDidLoad() - view.backgroundColor = .white + view.backgroundColor = .maincolor register() updateUI() @@ -172,9 +172,9 @@ extension HomeViewController: UICollectionViewDataSource { extension HomeViewController: UIScrollViewDelegate { func scrollViewDidScroll(_ scrollView: UIScrollView) { - if rootView.scrollView.contentOffset.y < 0 { - rootView.scrollView.contentOffset.y = 0 - } +// if rootView.scrollView.contentOffset.y < 0 { +// rootView.scrollView.contentOffset.y = 0 +// } let maxOffsetY = rootView.scrollView.contentSize.height - rootView.scrollView.bounds.height if rootView.scrollView.contentOffset.y > maxOffsetY { From 4abdc5700906a23b45c31bbeee819817a43d1172 Mon Sep 17 00:00:00 2001 From: mmaybei Date: Fri, 19 Jul 2024 00:34:03 +0900 Subject: [PATCH 5/6] =?UTF-8?q?chore/#227=20=ED=95=84=EC=9A=94=EC=97=86?= =?UTF-8?q?=EB=8A=94=20=EC=A3=BC=EC=84=9D=20=EC=82=AD=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- KkuMulKum/Source/Home/ViewController/HomeViewController.swift | 4 ---- 1 file changed, 4 deletions(-) diff --git a/KkuMulKum/Source/Home/ViewController/HomeViewController.swift b/KkuMulKum/Source/Home/ViewController/HomeViewController.swift index 63a64195..9af90d1b 100644 --- a/KkuMulKum/Source/Home/ViewController/HomeViewController.swift +++ b/KkuMulKum/Source/Home/ViewController/HomeViewController.swift @@ -172,10 +172,6 @@ extension HomeViewController: UICollectionViewDataSource { extension HomeViewController: UIScrollViewDelegate { func scrollViewDidScroll(_ scrollView: UIScrollView) { -// if rootView.scrollView.contentOffset.y < 0 { -// rootView.scrollView.contentOffset.y = 0 -// } - let maxOffsetY = rootView.scrollView.contentSize.height - rootView.scrollView.bounds.height if rootView.scrollView.contentOffset.y > maxOffsetY { rootView.scrollView.contentOffset.y = maxOffsetY From d7f4906759ffdf58eaf8d2b86ce40ad9c00465a7 Mon Sep 17 00:00:00 2001 From: mmaybei Date: Fri, 19 Jul 2024 00:58:50 +0900 Subject: [PATCH 6/6] =?UTF-8?q?chore/#227=20=ED=95=84=EC=9A=94=EC=97=86?= =?UTF-8?q?=EB=8A=94=20=EC=A3=BC=EC=84=9D=20=EC=82=AD=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- KkuMulKum/Source/Home/ViewModel/HomeViewModel.swift | 5 ----- 1 file changed, 5 deletions(-) diff --git a/KkuMulKum/Source/Home/ViewModel/HomeViewModel.swift b/KkuMulKum/Source/Home/ViewModel/HomeViewModel.swift index 5dd59ab1..aa791aba 100644 --- a/KkuMulKum/Source/Home/ViewModel/HomeViewModel.swift +++ b/KkuMulKum/Source/Home/ViewModel/HomeViewModel.swift @@ -94,9 +94,6 @@ final class HomeViewModel { print(">>> \(error.localizedDescription) : \(#function)") } } -// loginUser.value = service.fetchLoginUser() -// levelName.value = getLevelName(level: loginUser.value?.data?.level ?? 1) -// levelCaption.value = getLevelCaption(level: loginUser.value?.data?.level ?? 1) } func requestNearestPromise() { @@ -107,7 +104,6 @@ final class HomeViewModel { print(">>> \(error.localizedDescription) : \(#function)") } } -// nearestPromise.value = service.fetchNearestPromise() } func requestUpcomingPromise() { @@ -118,6 +114,5 @@ final class HomeViewModel { print(">>> \(error.localizedDescription) : \(#function)") } } -// upcomingPromiseList.value = service.fetchUpcomingPromise() } }