@@ -12,13 +12,13 @@ import Foundation
1212final class ReportHistoryViewModel : ViewModel {
1313 enum Input {
1414 case fetchReports
15- case fetchReport( index: Int )
1615 case filterCategory( type: ReportType )
1716 case filterProgress( progress: ReportProgress )
1817 }
1918
2019 struct Output {
2120 let progressPublisher : AnyPublisher < [ ReportProgressItem ] , Never >
21+ let selectedProgressPublisher : AnyPublisher < ReportProgress ? , Never >
2222 let categoryPublisher : AnyPublisher < [ ReportType ] , Never >
2323 let selectedCategoryPublisher : AnyPublisher < ReportType ? , Never >
2424 let reportsPublisher : AnyPublisher < [ ReportHistoryItem ] , Never >
@@ -27,14 +27,17 @@ final class ReportHistoryViewModel: ViewModel {
2727
2828 private( set) var output : Output
2929 private let progressSubject = CurrentValueSubject < [ ReportProgressItem ] , Never > ( [ ] )
30+ private let selectedProgressSubject = CurrentValueSubject < ReportProgress ? , Never > ( nil )
3031 private let categorySubject = CurrentValueSubject < [ ReportType ] , Never > ( [ ] )
3132 private let selectedCategorySubject = CurrentValueSubject < ReportType ? , Never > ( nil )
3233 private let reportSubject = CurrentValueSubject < [ ReportHistoryItem ] , Never > ( [ ] )
3334 private let selectedReportSubject = PassthroughSubject < Int ? , Never > ( )
3435 private( set) var selectedReportCategory : ReportType ?
3536 private var reports : [ ReportHistoryItem ] = [ ]
37+ private let reportRepository : ReportRepositoryProtocol
3638
37- init ( ) {
39+ init ( reportRepository: ReportRepositoryProtocol ) {
40+ self . reportRepository = reportRepository
3841 progressSubject
3942 . send (
4043 ReportProgress . allCases. map { ReportProgressItem (
@@ -46,6 +49,7 @@ final class ReportHistoryViewModel: ViewModel {
4649
4750 output = Output (
4851 progressPublisher: progressSubject. eraseToAnyPublisher ( ) ,
52+ selectedProgressPublisher: selectedProgressSubject. eraseToAnyPublisher ( ) ,
4953 categoryPublisher: categorySubject. eraseToAnyPublisher ( ) ,
5054 selectedCategoryPublisher: selectedCategorySubject. eraseToAnyPublisher ( ) ,
5155 reportsPublisher: reportSubject. eraseToAnyPublisher ( ) ,
@@ -56,8 +60,6 @@ final class ReportHistoryViewModel: ViewModel {
5660 switch input {
5761 case . fetchReports:
5862 fetchReports ( )
59- case . fetchReport( let index) :
60- fetchReport ( index: index)
6163 case . filterCategory( let type) :
6264 filterCategory ( reportType: type)
6365 case . filterProgress( let progress) :
@@ -99,16 +101,42 @@ final class ReportHistoryViewModel: ViewModel {
99101 }
100102
101103 private func filterReports( ) {
104+ let selectedProgress = selectedProgressSubject. value
105+ let selectedCategory = selectedCategorySubject. value
102106
107+ var filteredReports = reports
108+ if let selectedProgress {
109+ filteredReports = filteredReports. filter ( { $0. progress == selectedProgress } )
110+ }
111+ if let selectedCategory {
112+ filteredReports = filteredReports. filter ( { $0. type == selectedCategory } )
113+ }
114+ reportSubject. send ( filteredReports)
103115 }
104116
105117 private func fetchReports( ) {
106- //reportSubject.send(ReportHistoryItem.dummyData)
107- }
108-
109- private func fetchReport( index: Int ) {
110- guard index < reports. count else { return }
111-
112- selectedReportSubject. send ( reports [ index] . id)
118+ Task {
119+ do {
120+ let reportEntities = try await reportRepository. fetchReports ( )
121+
122+ var reportHistoryItems : [ ReportHistoryItem ] = [ ]
123+ for reportEntity in reportEntities {
124+ let reportHistoryItem = ReportHistoryItem (
125+ id: reportEntity. id,
126+ title: reportEntity. title,
127+ thumbnailUrl: reportEntity. photoUrls. first ?? " " ,
128+ date: reportEntity. date ?? " " ,
129+ type: reportEntity. type,
130+ progress: reportEntity. progress,
131+ location: reportEntity. location. address ?? " " )
132+ reportHistoryItems. append ( reportHistoryItem)
133+ }
134+
135+ reports = reportHistoryItems
136+ reportSubject. send ( reportHistoryItems)
137+ } catch {
138+ // TODO: 에러 처리
139+ }
140+ }
113141 }
114142}
0 commit comments