@@ -20,6 +20,7 @@ final class HomeViewModel: ViewModel {
2020 case fetchDailyRoutine
2121 case refreshDailyRoutine
2222 case updateRoutineCompletion( updatedRoutine: Routine )
23+ case fetchVersion
2324 }
2425
2526 struct Output {
@@ -31,6 +32,7 @@ final class HomeViewModel: ViewModel {
3132 let routinesPublisher : AnyPublisher < [ Routine ] , Never >
3233 let updateRoutineCompletionResultPublisher : AnyPublisher < Bool , Never >
3334 let allCompletedRoutineDatePublisher : AnyPublisher < [ Date ] , Never >
35+ let updateVersionPublisher : AnyPublisher < URL ? , Never >
3436 }
3537
3638 private( set) var output : Output
@@ -45,6 +47,7 @@ final class HomeViewModel: ViewModel {
4547 private let selectedRoutineSubject = CurrentValueSubject < Routine ? , Never > ( nil )
4648 private let updateRoutineCompletionResultSubject = PassthroughSubject < Bool , Never > ( )
4749 private let allCompletedRoutineDateSubject = CurrentValueSubject < [ Date ] , Never > ( [ ] )
50+ private let updateVersionSubject = PassthroughSubject < URL ? , Never > ( )
4851
4952 private let calendar = Calendar . current
5053 private let today = Date ( )
@@ -54,14 +57,18 @@ final class HomeViewModel: ViewModel {
5457 private let routineUseCase : RoutineUseCaseProtocol
5558 private let userDataUseCase : UserDataUseCaseProtocol
5659 private let emotionUseCase : EmotionUseCaseProtocol
60+ private let appConfigRepository : AppConfigRepositoryProtocol
61+
5762 init (
5863 routineUseCase: RoutineUseCaseProtocol ,
5964 userDataUseCase: UserDataUseCaseProtocol ,
60- emotionUseCase: EmotionUseCaseProtocol
65+ emotionUseCase: EmotionUseCaseProtocol ,
66+ appConfigRepository: AppConfigRepositoryProtocol
6167 ) {
6268 self . routineUseCase = routineUseCase
6369 self . userDataUseCase = userDataUseCase
6470 self . emotionUseCase = emotionUseCase
71+ self . appConfigRepository = appConfigRepository
6572 self . output = Output (
6673 nicknamePublisher: nicknameSubject. eraseToAnyPublisher ( ) ,
6774 emotionPublisher: emotionSubject. eraseToAnyPublisher ( ) ,
@@ -70,7 +77,8 @@ final class HomeViewModel: ViewModel {
7077 fetchRoutineResultPublisher: fetchRoutineResultSubject. eraseToAnyPublisher ( ) ,
7178 routinesPublisher: routinesSubject. eraseToAnyPublisher ( ) ,
7279 updateRoutineCompletionResultPublisher: updateRoutineCompletionResultSubject. eraseToAnyPublisher ( ) ,
73- allCompletedRoutineDatePublisher: allCompletedRoutineDateSubject. eraseToAnyPublisher ( ) )
80+ allCompletedRoutineDatePublisher: allCompletedRoutineDateSubject. eraseToAnyPublisher ( ) ,
81+ updateVersionPublisher: updateVersionSubject. eraseToAnyPublisher ( ) )
7482 }
7583
7684 func action( input: Input ) {
@@ -102,6 +110,9 @@ final class HomeViewModel: ViewModel {
102110
103111 case . refreshDailyRoutine:
104112 refreshSelectedDateRoutines ( )
113+
114+ case . fetchVersion:
115+ checkVersion ( )
105116 }
106117 }
107118
@@ -262,4 +273,26 @@ final class HomeViewModel: ViewModel {
262273 }
263274 }
264275 }
276+
277+ private func checkVersion( ) {
278+ let currentVersion = Bundle . main. infoDictionary ? [ " CFBundleShortVersionString " ] as? String
279+ let major = currentVersion? . split ( separator: " . " ) . first
280+
281+ Task {
282+ do {
283+ let appStoreAppVersion = try await appConfigRepository. fetchAppVersion ( )
284+ let appStoreMajor = appStoreAppVersion? . split ( separator: " . " ) . first
285+
286+ if major != appStoreMajor {
287+ let url = URL ( string: " itms-apps://itunes.apple.com/app/id6749437799 " )
288+ updateVersionSubject. send ( url)
289+ } else {
290+ updateVersionSubject. send ( nil )
291+ }
292+
293+ } catch {
294+
295+ }
296+ }
297+ }
265298}
0 commit comments