Skip to content

Commit f080bcc

Browse files
authored
Merge pull request #90 from boostcampwm-2022/feature/EnrollNotify
Feature/enroll notify
2 parents a05a824 + fcc26c2 commit f080bcc

File tree

7 files changed

+57
-16
lines changed

7 files changed

+57
-16
lines changed

DailyQuest/DailyQuest.xcodeproj/project.pbxproj

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@
4646
34283103292E2D9B00AE811B /* ToggleCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34283102292E2D9B00AE811B /* ToggleCell.swift */; };
4747
34283105292E2E3F00AE811B /* ToggleField.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34283104292E2E3F00AE811B /* ToggleField.swift */; };
4848
3429084F29383D73001812B1 /* UserRepository.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3429084E29383D73001812B1 /* UserRepository.swift */; };
49+
3436FCFA293F2654003575C3 /* Notification+.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3436FCF9293F2654003575C3 /* Notification+.swift */; };
4950
3449AD5B2922164B00B87619 /* Quest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3449AD5A2922164B00B87619 /* Quest.swift */; };
5051
3449AD5D2922197000B87619 /* User.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3449AD5C2922197000B87619 /* User.swift */; };
5152
3449AD6029222B3900B87619 /* UserInfoCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3449AD5F29222B3900B87619 /* UserInfoCell.swift */; };
@@ -105,9 +106,9 @@
105106
34EE0C662935FD7D002BEC23 /* BrowseItemViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3499552629235D1E007AB99E /* BrowseItemViewModel.swift */; };
106107
34EE6EB72924C674005AF583 /* QuestView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34EE6EB62924C674005AF583 /* QuestView.swift */; };
107108
34EE6EB92924CAA1005AF583 /* QuestViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34EE6EB82924CAA1005AF583 /* QuestViewModel.swift */; };
109+
34FCD366293DE62700E0DC8A /* DefaultEnrollUseCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34FCD365293DE62700E0DC8A /* DefaultEnrollUseCase.swift */; };
108110
34FCD369293DEED600E0DC8A /* FriendViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34FCD368293DEED600E0DC8A /* FriendViewController.swift */; };
109111
34FCD36B293DF2F600E0DC8A /* FriendStatusView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34FCD36A293DF2F600E0DC8A /* FriendStatusView.swift */; };
110-
34FCD366293DE62700E0DC8A /* DefaultEnrollUseCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34FCD365293DE62700E0DC8A /* DefaultEnrollUseCase.swift */; };
111112
34FEFB992935EA6D00954A40 /* Kingfisher in Frameworks */ = {isa = PBXBuildFile; productRef = 34FEFB982935EA6D00954A40 /* Kingfisher */; };
112113
34FF6C5A292B86F8002AFD4D /* SnapKit-Dynamic in Frameworks */ = {isa = PBXBuildFile; productRef = 34FF6C46292B8014002AFD4D /* SnapKit-Dynamic */; };
113114
34FF6C5D292B8B27002AFD4D /* RxCocoa in Frameworks */ = {isa = PBXBuildFile; productRef = 34FF6C5C292B8B27002AFD4D /* RxCocoa */; };
@@ -253,6 +254,7 @@
253254
34283102292E2D9B00AE811B /* ToggleCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ToggleCell.swift; sourceTree = "<group>"; };
254255
34283104292E2E3F00AE811B /* ToggleField.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ToggleField.swift; sourceTree = "<group>"; };
255256
3429084E29383D73001812B1 /* UserRepository.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserRepository.swift; sourceTree = "<group>"; };
257+
3436FCF9293F2654003575C3 /* Notification+.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Notification+.swift"; sourceTree = "<group>"; };
256258
3449AD5A2922164B00B87619 /* Quest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Quest.swift; sourceTree = "<group>"; };
257259
3449AD5C2922197000B87619 /* User.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = User.swift; sourceTree = "<group>"; };
258260
3449AD5F29222B3900B87619 /* UserInfoCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserInfoCell.swift; sourceTree = "<group>"; };
@@ -307,9 +309,9 @@
307309
34EE0C632935FD6B002BEC23 /* BrowseViewModelTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BrowseViewModelTests.swift; sourceTree = "<group>"; };
308310
34EE6EB62924C674005AF583 /* QuestView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = QuestView.swift; sourceTree = "<group>"; };
309311
34EE6EB82924CAA1005AF583 /* QuestViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = QuestViewModel.swift; sourceTree = "<group>"; };
312+
34FCD365293DE62700E0DC8A /* DefaultEnrollUseCase.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DefaultEnrollUseCase.swift; sourceTree = "<group>"; };
310313
34FCD368293DEED600E0DC8A /* FriendViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FriendViewController.swift; sourceTree = "<group>"; };
311314
34FCD36A293DF2F600E0DC8A /* FriendStatusView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FriendStatusView.swift; sourceTree = "<group>"; };
312-
34FCD365293DE62700E0DC8A /* DefaultEnrollUseCase.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DefaultEnrollUseCase.swift; sourceTree = "<group>"; };
313315
9B1CFB3E292B585700CCE97A /* QuestDTO+Mapping.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "QuestDTO+Mapping.swift"; sourceTree = "<group>"; };
314316
9BD8CCF22935BC0D00E6EA2F /* DefaultBrowseRepository.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DefaultBrowseRepository.swift; sourceTree = "<group>"; };
315317
9BD8CCF42935C38300E6EA2F /* UserDTO+Mapping.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UserDTO+Mapping.swift"; sourceTree = "<group>"; };
@@ -619,6 +621,7 @@
619621
34874AA129250C43000570DF /* UIButton+.swift */,
620622
A5656458292BBDD40033E763 /* String+.swift */,
621623
A50F9A3829266FD8005C00FE /* Date+.swift */,
624+
3436FCF9293F2654003575C3 /* Notification+.swift */,
622625
);
623626
path = Utils;
624627
sourceTree = "<group>";
@@ -1314,6 +1317,7 @@
13141317
345687F42937329E00CA51E3 /* EnrollViewController.swift in Sources */,
13151318
A511229029384FAF00384B4B /* DefaultUserRepository.swift in Sources */,
13161319
342830FF292E2B2A00AE811B /* NavigateCell.swift in Sources */,
1320+
3436FCFA293F2654003575C3 /* Notification+.swift in Sources */,
13171321
A51F01D8292343A80031ECA2 /* RealmBrowseQuestsStorage.swift in Sources */,
13181322
A51F01DD2923468F0031ECA2 /* BrowseQuestEntity+Mapping.swift in Sources */,
13191323
345687F62937430200CA51E3 /* PlanDatePickerView.swift in Sources */,

DailyQuest/DailyQuest/Domain/UseCases/Home/DefaultEnrollUseCase.swift

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,15 @@ extension DefaultEnrollUseCase: EnrollUseCase {
2525
true
2626
}
2727
.catchAndReturn(false)
28+
.do(onSuccess: { _ in
29+
let today = quests
30+
.filter { quest in
31+
Calendar.current.isDateInToday(quest.date)
32+
}
33+
if !today.isEmpty {
34+
NotificationCenter.default.post(name: .updated, object: Date())
35+
}
36+
})
2837
.asObservable()
2938
}
3039
}

DailyQuest/DailyQuest/Presentation/Home/Flow/HomeCoordinator.swift

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@ import RxSwift
1212
protocol HomeCoordinator: Coordinator {
1313
func showProfileFlow()
1414
func showAddQuestFlow()
15-
func showAddFriendsFlow()
1615
}
1716

1817
final class DefaultHomeCoordinator: HomeCoordinator {
@@ -52,8 +51,4 @@ final class DefaultHomeCoordinator: HomeCoordinator {
5251
let enrollViewController = homeSceneDIContainer.makeEnrollViewController()
5352
navigationController.present(enrollViewController, animated: true)
5453
}
55-
56-
func showAddFriendsFlow() {
57-
58-
}
5954
}

DailyQuest/DailyQuest/Presentation/Home/ViewController/EnrollViewController.swift

Lines changed: 22 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -125,21 +125,19 @@ final class EnrollViewController: UIViewController {
125125
)
126126
)
127127

128-
bindSubmitButton(output: output)
129-
bindDayNamePickerView(output: output)
130-
131-
output.enrollResult.subscribe(onNext: { print($0) })
132-
.disposed(by: disposableBag)
128+
bindToSubmitButton(output: output)
129+
bindToDayNamePickerView(output: output)
130+
bindToDismiss(output: output)
133131
}
134132

135-
private func bindSubmitButton(output: EnrollViewModel.Output) {
133+
private func bindToSubmitButton(output: EnrollViewModel.Output) {
136134
output
137135
.buttonEnabled
138136
.drive(submitButton.rx.isEnabled)
139137
.disposed(by: disposableBag)
140138
}
141139

142-
private func bindDayNamePickerView(output: EnrollViewModel.Output) {
140+
private func bindToDayNamePickerView(output: EnrollViewModel.Output) {
143141
output
144142
.dayButtonStatus
145143
.bind(onNext: { [weak self] index, isSelected in
@@ -152,6 +150,23 @@ final class EnrollViewController: UIViewController {
152150
})
153151
.disposed(by: disposableBag)
154152
}
153+
154+
private func bindToDismiss(output: EnrollViewModel.Output) {
155+
output
156+
.enrollResult
157+
.filter({ $0 })
158+
.bind(onNext: { [weak self] _ in
159+
self?.dismiss(animated: true)
160+
})
161+
.disposed(by: disposableBag)
162+
}
163+
}
164+
165+
extension EnrollViewController {
166+
enum Event {
167+
case success
168+
case fail
169+
}
155170
}
156171

157172
extension EnrollViewController: UITextFieldDelegate {

DailyQuest/DailyQuest/Presentation/Home/ViewModel/EnrollViewModel.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ final class EnrollViewModel {
6868
)
6969
.map(createQuests(title:dates:quantity:))
7070
.flatMap(enrollUseCase.save(with:))
71-
71+
7272
return Output(buttonEnabled: buttonEnabled,
7373
enrollResult: enrollResult,
7474
dayButtonStatus: dayButtonStatus)

DailyQuest/DailyQuest/Presentation/Home/ViewModel/QuestViewModel.swift

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,8 +36,14 @@ final class QuestViewModel {
3636
.map { _ in Date() }
3737
.asObservable()
3838

39+
let notification = NotificationCenter
40+
.default
41+
.rx
42+
.notification(.updated)
43+
.compactMap({ $0.object as? Date })
44+
3945
let data = Observable
40-
.merge(updated, input.viewDidLoad)
46+
.merge(updated, input.viewDidLoad, notification)
4147
.flatMap(questUseCase.fetch(by:))
4248
.asDriver(onErrorJustReturn: [])
4349

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
//
2+
// Notification+.swift
3+
// DailyQuest
4+
//
5+
// Created by jinwoong Kim on 2022/12/06.
6+
//
7+
8+
import Foundation
9+
10+
extension Notification.Name {
11+
static let updated = Notification.Name("updated")
12+
}

0 commit comments

Comments
 (0)