@@ -18,7 +18,7 @@ final class HomeViewModel: ViewModel {
1818 case selectRoutine( routine: MainRoutine ? )
1919 case deleteDailyRoutine
2020 case deleteAllRoutine
21- case updateRoutineCompletion( routines : [ Routine ] )
21+ case updateRoutineCompletion( updatedRoutine : Routine )
2222 case refreshSelectedDateRoutine
2323 case selectRoutineSortType( routineSortType: RoutineSortType ? )
2424 }
@@ -95,8 +95,8 @@ final class HomeViewModel: ViewModel {
9595 case . deleteAllRoutine:
9696 deleteAllRoutine ( )
9797
98- case . updateRoutineCompletion( let routines ) :
99- updateRoutineCompletion ( routines : routines )
98+ case . updateRoutineCompletion( let updatedRoutine ) :
99+ updateRoutineCompletion ( updatedRoutine : updatedRoutine )
100100
101101 case . refreshSelectedDateRoutine:
102102 fetchRoutines ( for: selectedDateSubject. value)
@@ -227,53 +227,51 @@ final class HomeViewModel: ViewModel {
227227 }
228228
229229 // 루틴의 완료 여부를 업데이트 합니다.
230- private func updateRoutineCompletion( routines : [ Routine ] ) {
230+ private func updateRoutineCompletion( updatedRoutine : Routine ) {
231231 let performedDate = selectedDateSubject. value. convertToString ( dateType: . yearMonthDate)
232232 var routineCompletionEntities : [ RoutineCompletionEntity ] = [ ]
233233
234- for routine in routines {
235- let isDone = !routine. isDone
236- let routineCompletionEntity = RoutineCompletionEntity (
237- performedDate: performedDate,
238- routineId: routine. id,
239- completeYn: isDone,
240- historySeq: routine. historySeq,
241- routineType: routine. routineType)
242- routineCompletionEntities. append ( routineCompletionEntity)
243-
244- // 메인 루틴이라면, 그 안의 세부 루틴 값도 업데이트
245- if let mainRoutine = routine as? MainRoutine {
246- for subRoutine in mainRoutine. subRoutines {
247- guard subRoutine. isDone != isDone else { continue }
248- let subRoutineCompletionEntity = RoutineCompletionEntity (
249- performedDate: performedDate,
250- routineId: subRoutine. id,
251- completeYn: isDone,
252- historySeq: subRoutine. historySeq,
253- routineType: subRoutine. routineType)
254- routineCompletionEntities. append ( subRoutineCompletionEntity)
255- }
256- } else if let subRoutine = routine as? SubRoutine {
257- // 세부 루틴이라면, 세부 루틴의 완료 값을 확인하여 메인 루틴도 업데이트
258- let mainRoutines = routinesSubject. value
259- for mainRoutine in mainRoutines {
260- if mainRoutine. subRoutines. contains ( subRoutine) {
261- let mainRoutineIsDone = mainRoutine. isDone
262- var subRoutineCompleted : Bool
263- if subRoutine. isDone {
264- subRoutineCompleted = mainRoutine. subRoutines. filter ( { $0. isDone } ) . count - 1 == mainRoutine. subRoutines. count
265- } else {
266- subRoutineCompleted = mainRoutine. subRoutines. filter ( { $0. isDone } ) . count + 1 == mainRoutine. subRoutines. count
267- }
268- if subRoutineCompleted != mainRoutineIsDone {
269- let mainRoutineCompletionEntity = RoutineCompletionEntity (
270- performedDate: performedDate,
271- routineId: mainRoutine. id,
272- completeYn: subRoutineCompleted,
273- historySeq: mainRoutine. historySeq,
274- routineType: mainRoutine. routineType)
275- routineCompletionEntities. append ( mainRoutineCompletionEntity)
276- }
234+ let isDone = !updatedRoutine. isDone
235+ let routineCompletionEntity = RoutineCompletionEntity (
236+ performedDate: performedDate,
237+ routineId: updatedRoutine. id,
238+ completeYn: isDone,
239+ historySeq: updatedRoutine. historySeq,
240+ routineType: updatedRoutine. routineType)
241+ routineCompletionEntities. append ( routineCompletionEntity)
242+
243+ // 메인 루틴이라면, 그 안의 세부 루틴 값도 업데이트
244+ if let mainRoutine = updatedRoutine as? MainRoutine {
245+ for subRoutine in mainRoutine. subRoutines {
246+ guard subRoutine. isDone != isDone else { continue }
247+ let subRoutineCompletionEntity = RoutineCompletionEntity (
248+ performedDate: performedDate,
249+ routineId: subRoutine. id,
250+ completeYn: isDone,
251+ historySeq: subRoutine. historySeq,
252+ routineType: subRoutine. routineType)
253+ routineCompletionEntities. append ( subRoutineCompletionEntity)
254+ }
255+ } else if let subRoutine = updatedRoutine as? SubRoutine {
256+ // 세부 루틴이라면, 세부 루틴의 완료 값을 확인하여 메인 루틴도 업데이트
257+ let mainRoutines = routinesSubject. value
258+ for mainRoutine in mainRoutines {
259+ if mainRoutine. subRoutines. contains ( subRoutine) {
260+ let mainRoutineIsDone = mainRoutine. isDone
261+ var subRoutineCompleted : Bool
262+ if subRoutine. isDone {
263+ subRoutineCompleted = mainRoutine. subRoutines. filter ( { $0. isDone } ) . count - 1 == mainRoutine. subRoutines. count
264+ } else {
265+ subRoutineCompleted = mainRoutine. subRoutines. filter ( { $0. isDone } ) . count + 1 == mainRoutine. subRoutines. count
266+ }
267+ if subRoutineCompleted != mainRoutineIsDone {
268+ let mainRoutineCompletionEntity = RoutineCompletionEntity (
269+ performedDate: performedDate,
270+ routineId: mainRoutine. id,
271+ completeYn: subRoutineCompleted,
272+ historySeq: mainRoutine. historySeq,
273+ routineType: mainRoutine. routineType)
274+ routineCompletionEntities. append ( mainRoutineCompletionEntity)
277275 }
278276 }
279277 }
0 commit comments