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

Feature/enroll notify #90

Merged
merged 7 commits into from
Dec 7, 2022
8 changes: 6 additions & 2 deletions DailyQuest/DailyQuest.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,7 @@
34283103292E2D9B00AE811B /* ToggleCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34283102292E2D9B00AE811B /* ToggleCell.swift */; };
34283105292E2E3F00AE811B /* ToggleField.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34283104292E2E3F00AE811B /* ToggleField.swift */; };
3429084F29383D73001812B1 /* UserRepository.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3429084E29383D73001812B1 /* UserRepository.swift */; };
3436FCFA293F2654003575C3 /* Notification+.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3436FCF9293F2654003575C3 /* Notification+.swift */; };
3449AD5B2922164B00B87619 /* Quest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3449AD5A2922164B00B87619 /* Quest.swift */; };
3449AD5D2922197000B87619 /* User.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3449AD5C2922197000B87619 /* User.swift */; };
3449AD6029222B3900B87619 /* UserInfoCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3449AD5F29222B3900B87619 /* UserInfoCell.swift */; };
Expand Down Expand Up @@ -105,9 +106,9 @@
34EE0C662935FD7D002BEC23 /* BrowseItemViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3499552629235D1E007AB99E /* BrowseItemViewModel.swift */; };
34EE6EB72924C674005AF583 /* QuestView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34EE6EB62924C674005AF583 /* QuestView.swift */; };
34EE6EB92924CAA1005AF583 /* QuestViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34EE6EB82924CAA1005AF583 /* QuestViewModel.swift */; };
34FCD366293DE62700E0DC8A /* DefaultEnrollUseCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34FCD365293DE62700E0DC8A /* DefaultEnrollUseCase.swift */; };
34FCD369293DEED600E0DC8A /* FriendViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34FCD368293DEED600E0DC8A /* FriendViewController.swift */; };
34FCD36B293DF2F600E0DC8A /* FriendStatusView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34FCD36A293DF2F600E0DC8A /* FriendStatusView.swift */; };
34FCD366293DE62700E0DC8A /* DefaultEnrollUseCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34FCD365293DE62700E0DC8A /* DefaultEnrollUseCase.swift */; };
34FEFB992935EA6D00954A40 /* Kingfisher in Frameworks */ = {isa = PBXBuildFile; productRef = 34FEFB982935EA6D00954A40 /* Kingfisher */; };
34FF6C5A292B86F8002AFD4D /* SnapKit-Dynamic in Frameworks */ = {isa = PBXBuildFile; productRef = 34FF6C46292B8014002AFD4D /* SnapKit-Dynamic */; };
34FF6C5D292B8B27002AFD4D /* RxCocoa in Frameworks */ = {isa = PBXBuildFile; productRef = 34FF6C5C292B8B27002AFD4D /* RxCocoa */; };
Expand Down Expand Up @@ -253,6 +254,7 @@
34283102292E2D9B00AE811B /* ToggleCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ToggleCell.swift; sourceTree = "<group>"; };
34283104292E2E3F00AE811B /* ToggleField.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ToggleField.swift; sourceTree = "<group>"; };
3429084E29383D73001812B1 /* UserRepository.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserRepository.swift; sourceTree = "<group>"; };
3436FCF9293F2654003575C3 /* Notification+.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Notification+.swift"; sourceTree = "<group>"; };
3449AD5A2922164B00B87619 /* Quest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Quest.swift; sourceTree = "<group>"; };
3449AD5C2922197000B87619 /* User.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = User.swift; sourceTree = "<group>"; };
3449AD5F29222B3900B87619 /* UserInfoCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserInfoCell.swift; sourceTree = "<group>"; };
Expand Down Expand Up @@ -307,9 +309,9 @@
34EE0C632935FD6B002BEC23 /* BrowseViewModelTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BrowseViewModelTests.swift; sourceTree = "<group>"; };
34EE6EB62924C674005AF583 /* QuestView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = QuestView.swift; sourceTree = "<group>"; };
34EE6EB82924CAA1005AF583 /* QuestViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = QuestViewModel.swift; sourceTree = "<group>"; };
34FCD365293DE62700E0DC8A /* DefaultEnrollUseCase.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DefaultEnrollUseCase.swift; sourceTree = "<group>"; };
34FCD368293DEED600E0DC8A /* FriendViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FriendViewController.swift; sourceTree = "<group>"; };
34FCD36A293DF2F600E0DC8A /* FriendStatusView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FriendStatusView.swift; sourceTree = "<group>"; };
34FCD365293DE62700E0DC8A /* DefaultEnrollUseCase.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DefaultEnrollUseCase.swift; sourceTree = "<group>"; };
9B1CFB3E292B585700CCE97A /* QuestDTO+Mapping.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "QuestDTO+Mapping.swift"; sourceTree = "<group>"; };
9BD8CCF22935BC0D00E6EA2F /* DefaultBrowseRepository.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DefaultBrowseRepository.swift; sourceTree = "<group>"; };
9BD8CCF42935C38300E6EA2F /* UserDTO+Mapping.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UserDTO+Mapping.swift"; sourceTree = "<group>"; };
Expand Down Expand Up @@ -619,6 +621,7 @@
34874AA129250C43000570DF /* UIButton+.swift */,
A5656458292BBDD40033E763 /* String+.swift */,
A50F9A3829266FD8005C00FE /* Date+.swift */,
3436FCF9293F2654003575C3 /* Notification+.swift */,
);
path = Utils;
sourceTree = "<group>";
Expand Down Expand Up @@ -1314,6 +1317,7 @@
345687F42937329E00CA51E3 /* EnrollViewController.swift in Sources */,
A511229029384FAF00384B4B /* DefaultUserRepository.swift in Sources */,
342830FF292E2B2A00AE811B /* NavigateCell.swift in Sources */,
3436FCFA293F2654003575C3 /* Notification+.swift in Sources */,
A51F01D8292343A80031ECA2 /* RealmBrowseQuestsStorage.swift in Sources */,
A51F01DD2923468F0031ECA2 /* BrowseQuestEntity+Mapping.swift in Sources */,
345687F62937430200CA51E3 /* PlanDatePickerView.swift in Sources */,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,15 @@ extension DefaultEnrollUseCase: EnrollUseCase {
true
}
.catchAndReturn(false)
.do(onSuccess: { _ in
let today = quests
.filter { quest in
Calendar.current.isDateInToday(quest.date)
}
if !today.isEmpty {
NotificationCenter.default.post(name: .updated, object: Date())
}
})
.asObservable()
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,6 @@ import RxSwift
protocol HomeCoordinator: Coordinator {
func showProfileFlow()
func showAddQuestFlow()
func showAddFriendsFlow()
}

final class DefaultHomeCoordinator: HomeCoordinator {
Expand Down Expand Up @@ -52,8 +51,4 @@ final class DefaultHomeCoordinator: HomeCoordinator {
let enrollViewController = homeSceneDIContainer.makeEnrollViewController()
navigationController.present(enrollViewController, animated: true)
}

func showAddFriendsFlow() {

}
}
Original file line number Diff line number Diff line change
Expand Up @@ -125,21 +125,19 @@ final class EnrollViewController: UIViewController {
)
)

bindSubmitButton(output: output)
bindDayNamePickerView(output: output)

output.enrollResult.subscribe(onNext: { print($0) })
.disposed(by: disposableBag)
bindToSubmitButton(output: output)
bindToDayNamePickerView(output: output)
bindToDismiss(output: output)
}

private func bindSubmitButton(output: EnrollViewModel.Output) {
private func bindToSubmitButton(output: EnrollViewModel.Output) {
output
.buttonEnabled
.drive(submitButton.rx.isEnabled)
.disposed(by: disposableBag)
}

private func bindDayNamePickerView(output: EnrollViewModel.Output) {
private func bindToDayNamePickerView(output: EnrollViewModel.Output) {
output
.dayButtonStatus
.bind(onNext: { [weak self] index, isSelected in
Expand All @@ -152,6 +150,23 @@ final class EnrollViewController: UIViewController {
})
.disposed(by: disposableBag)
}

private func bindToDismiss(output: EnrollViewModel.Output) {
output
.enrollResult
.filter({ $0 })
.bind(onNext: { [weak self] _ in
self?.dismiss(animated: true)
})
.disposed(by: disposableBag)
}
}

extension EnrollViewController {
enum Event {
case success
case fail
}
}

extension EnrollViewController: UITextFieldDelegate {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,7 @@ final class EnrollViewModel {
)
.map(createQuests(title:dates:quantity:))
.flatMap(enrollUseCase.save(with:))

return Output(buttonEnabled: buttonEnabled,
enrollResult: enrollResult,
dayButtonStatus: dayButtonStatus)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,8 +36,14 @@ final class QuestViewModel {
.map { _ in Date() }
.asObservable()

let notification = NotificationCenter
.default
.rx
.notification(.updated)
.compactMap({ $0.object as? Date })

let data = Observable
.merge(updated, input.viewDidLoad)
.merge(updated, input.viewDidLoad, notification)
.flatMap(questUseCase.fetch(by:))
.asDriver(onErrorJustReturn: [])

Expand Down
12 changes: 12 additions & 0 deletions DailyQuest/DailyQuest/Utils/Notification+.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
//
// Notification+.swift
// DailyQuest
//
// Created by jinwoong Kim on 2022/12/06.
//

import Foundation

extension Notification.Name {
static let updated = Notification.Name("updated")
}