@@ -11,93 +11,132 @@ public final class NotificationSettingViewModel: BaseViewModel, Stepper {
1111 private let disposeBag = DisposeBag ( )
1212 private let subscribeNotificationUseCase : SubscribeNotificationUseCase
1313 private let subscribeAllNotificationUseCase : SubscribeAllNotificationUseCase
14- private let unsubscribeNotificationUseCase : UnsubscribeNotificationUseCase
15- private let unsubscribeAllNotificationUseCase : UnsubscribeAllNotificationUseCase
14+ private let fetchSubscribeStateUseCase : FetchSubscribeStateUseCase
1615
1716 init (
1817 subscribeNotificationUseCase: SubscribeNotificationUseCase ,
1918 subscribeAllNotificationUseCase: SubscribeAllNotificationUseCase ,
20- unsubscribeNotificationUseCase: UnsubscribeNotificationUseCase ,
21- unsubscribeAllNotificationUseCase: UnsubscribeAllNotificationUseCase
19+ fetchSubscribeStateUseCase: FetchSubscribeStateUseCase
2220 ) {
2321 self . subscribeNotificationUseCase = subscribeNotificationUseCase
2422 self . subscribeAllNotificationUseCase = subscribeAllNotificationUseCase
25- self . unsubscribeNotificationUseCase = unsubscribeNotificationUseCase
26- self . unsubscribeAllNotificationUseCase = unsubscribeAllNotificationUseCase
23+ self . fetchSubscribeStateUseCase = fetchSubscribeStateUseCase
2724 }
2825
2926 public struct Input {
30- let allSwitchButtonIsTrue : PublishRelay < Bool >
31- let noticeSwitchButtonIsTrue : PublishRelay < Bool >
32- let applicationSwitchButtonIsTrue : PublishRelay < Bool >
33- let recruitmentSwitchButtonIsTrue : PublishRelay < Bool >
27+ let viewAppear : PublishRelay < Void >
28+ let allSwitchButtonDidTap : ControlProperty < Bool >
29+ let noticeSwitchButtonDidTap : ControlProperty < Bool >
30+ let applicationSwitchButtonDidTap : ControlProperty < Bool >
31+ let recruitmentSwitchButtonDidTap : ControlProperty < Bool >
3432 }
3533
36- public struct Output { }
34+ public struct Output {
35+ let subscribeNoticeState : PublishRelay < SubscribeStateEntity >
36+ let subscribeApplicationState : PublishRelay < SubscribeStateEntity >
37+ let subscribeRecruitmentState : PublishRelay < SubscribeStateEntity >
38+ let allSubscribeState : PublishRelay < Bool >
39+ }
3740
3841 public func transform( _ input: Input ) -> Output {
39- input. allSwitchButtonIsTrue. asObservable ( )
42+ let subscribeStateList = PublishRelay < [ SubscribeStateEntity ] > ( )
43+ let subscribeNoticeState = PublishRelay < SubscribeStateEntity > ( )
44+ let subscribeApplicationState = PublishRelay < SubscribeStateEntity > ( )
45+ let subscribeRecruitmentState = PublishRelay < SubscribeStateEntity > ( )
46+
47+ let noticeState = BehaviorRelay < Bool > ( value: false )
48+ let applicationState = BehaviorRelay < Bool > ( value: false )
49+ let recruitmentState = BehaviorRelay < Bool > ( value: false )
50+ let allSubscribeState = PublishRelay < Bool > ( )
51+
52+ input. viewAppear. asObservable ( )
4053 . flatMap {
41- if $0 {
42- return self . subscribeAllNotificationUseCase. execute ( token: Messaging . messaging ( ) . fcmToken ?? " " )
43- } else {
44- return self . unsubscribeAllNotificationUseCase. execute ( token: Messaging . messaging ( ) . fcmToken ?? " " )
54+ self . fetchSubscribeStateUseCase. execute ( )
55+ }
56+ . bind ( to: subscribeStateList)
57+ . disposed ( by: disposeBag)
58+
59+ subscribeStateList. asObservable ( )
60+ . subscribe ( onNext: {
61+ for state in $0 {
62+ if state. topic == . notice {
63+ subscribeNoticeState. accept ( state)
64+ if state. isSubscribed {
65+ noticeState. accept ( true )
66+ } else {
67+ noticeState. accept ( false )
68+ }
69+ } else if state. topic == . application {
70+ subscribeApplicationState. accept ( state)
71+ if state. isSubscribed {
72+ applicationState. accept ( true )
73+ } else {
74+ applicationState. accept ( false )
75+ }
76+ } else if state. topic == . recruitment {
77+ subscribeRecruitmentState. accept ( state)
78+ if state. isSubscribed {
79+ recruitmentState. accept ( true )
80+ } else {
81+ recruitmentState. accept ( false )
82+ }
83+ }
84+
85+ if noticeState. value && applicationState. value && recruitmentState. value {
86+ allSubscribeState. accept ( true )
87+ } else {
88+ allSubscribeState. accept ( false )
89+ }
4590 }
91+ } )
92+ . disposed ( by: disposeBag)
93+
94+ input. allSwitchButtonDidTap. asObservable ( )
95+ . skip ( 1 )
96+ . flatMap { _ in
97+ self . subscribeAllNotificationUseCase. execute ( )
4698 }
4799 . subscribe ( )
48100 . disposed ( by: disposeBag)
49101
50- input. noticeSwitchButtonIsTrue. asObservable ( )
51- . flatMap {
52- if $0 {
53- return self . subscribeNotificationUseCase. execute (
54- token: Messaging . messaging ( ) . fcmToken ?? " " ,
55- notificationType: . notice
56- )
57- } else {
58- return self . unsubscribeNotificationUseCase. execute (
59- token: Messaging . messaging ( ) . fcmToken ?? " " ,
60- notificationType: . notice
61- )
62- }
102+ input. noticeSwitchButtonDidTap. asObservable ( )
103+ . skip ( 1 )
104+ . flatMap { _ in
105+ self . subscribeNotificationUseCase. execute (
106+ token: Messaging . messaging ( ) . fcmToken ?? " " ,
107+ notificationType: . notice
108+ )
63109 }
64110 . subscribe ( )
65111 . disposed ( by: disposeBag)
66112
67- input. applicationSwitchButtonIsTrue. asObservable ( )
68- . flatMap {
69- if $0 {
70- return self . subscribeNotificationUseCase. execute (
71- token: Messaging . messaging ( ) . fcmToken ?? " " ,
72- notificationType: . application
73- )
74- } else {
75- return self . unsubscribeNotificationUseCase. execute (
76- token: Messaging . messaging ( ) . fcmToken ?? " " ,
77- notificationType: . application
78- )
79- }
113+ input. applicationSwitchButtonDidTap. asObservable ( )
114+ . skip ( 1 )
115+ . flatMap { _ in
116+ self . subscribeNotificationUseCase. execute (
117+ token: Messaging . messaging ( ) . fcmToken ?? " " ,
118+ notificationType: . application
119+ )
80120 }
81121 . subscribe ( )
82122 . disposed ( by: disposeBag)
83123
84- input. recruitmentSwitchButtonIsTrue. asObservable ( )
85- . flatMap {
86- if $0 {
87- return self . subscribeNotificationUseCase. execute (
88- token: Messaging . messaging ( ) . fcmToken ?? " " ,
89- notificationType: . recruitment
90- )
91- } else {
92- return self . unsubscribeNotificationUseCase. execute (
93- token: Messaging . messaging ( ) . fcmToken ?? " " ,
94- notificationType: . recruitment
95- )
96- }
124+ input. recruitmentSwitchButtonDidTap. asObservable ( )
125+ . skip ( 1 )
126+ . flatMap { _ in
127+ self . subscribeNotificationUseCase. execute (
128+ token: Messaging . messaging ( ) . fcmToken ?? " " ,
129+ notificationType: . recruitment
130+ )
97131 }
98132 . subscribe ( )
99133 . disposed ( by: disposeBag)
100134
101- return Output ( )
135+ return Output (
136+ subscribeNoticeState: subscribeNoticeState,
137+ subscribeApplicationState: subscribeApplicationState,
138+ subscribeRecruitmentState: subscribeRecruitmentState,
139+ allSubscribeState: allSubscribeState
140+ )
102141 }
103142}
0 commit comments