Skip to content

Commit 63be47a

Browse files
committed
[#69] 코드 리뷰 반영: 에러 처리 및 코드 품질 개선
1 parent 892cc36 commit 63be47a

6 files changed

Lines changed: 20 additions & 12 deletions

File tree

Codive/Features/Feed/Presentation/Add/View/PhotoTagView.swift

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,14 @@ struct PhotoTagView: View {
6565
.enableSwipeBack()
6666
}
6767
.ignoresSafeArea(.all, edges: .bottom)
68+
.alert("오류", isPresented: Binding(
69+
get: { viewModel.errorMessage != nil },
70+
set: { if !$0 { viewModel.errorMessage = nil } }
71+
)) {
72+
Button("확인", role: .cancel) {}
73+
} message: {
74+
Text(viewModel.errorMessage ?? "")
75+
}
6876
}
6977
}
7078

Codive/Features/Feed/Presentation/Add/ViewModel/PhotoTagViewModel.swift

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ final class PhotoTagViewModel: ObservableObject {
2323
@Published var selectedProducts: Set<Int> = []
2424
@Published var clothTags: [ClothTag] = []
2525
@Published var clothItems: [ProductItem] = []
26+
@Published var errorMessage: String?
2627

2728
let allPhotos: [SelectedPhoto]
2829
private let navigationRouter: NavigationRouter
@@ -68,14 +69,18 @@ final class PhotoTagViewModel: ObservableObject {
6869
}
6970

7071
// MARK: - Methods
72+
// TODO: 코디 완성 후 태그하기 진입 시, 해당 코디에 사용된 clothId 목록을 전달받아
73+
// isTodayCloth: true 설정 + 자동 선택 처리 필요 (백엔드 API 필드 추가 or 클라이언트 처리)
7174
func fetchClothItems() async {
75+
errorMessage = nil
7276
do {
7377
clothItems = try await fetchClothItemsUseCase.execute(category: selectedCategory)
7478
} catch {
7579
#if DEBUG
7680
print("[PhotoTag] Failed to fetch cloth items: \(error)")
7781
#endif
7882
clothItems = []
83+
errorMessage = "옷 목록을 불러오지 못했습니다"
7984
}
8085
}
8186

Codive/Features/Feed/Presentation/FeedDetail/View/FeedDetailView.swift

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -173,12 +173,10 @@ struct FeedDetailView: View {
173173
await viewModel.loadFeedDetail()
174174
}
175175
}
176-
.sheet(isPresented: $viewModel.isLikesSheetPresented, onDismiss: {
177-
viewModel.isLikesSheetPresented = false
178-
}, content: {
176+
.sheet(isPresented: $viewModel.isLikesSheetPresented) {
179177
FeedLikesListView(viewModel: viewModel)
180178
.presentationDetents([.medium, .large])
181-
})
179+
}
182180
.sheet(isPresented: Binding(
183181
get: { navigationRouter.sheetDestination != nil && isCommentSheet(navigationRouter.sheetDestination) },
184182
set: { if !$0 { navigationRouter.dismissSheet() } }

Codive/Features/Feed/Presentation/MainFeed/View/FeedView.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,7 @@ struct FeedView: View {
9494
}
9595
.presentationDetents([.height(500)])
9696
}
97-
.onAppear {
97+
.task {
9898
viewModel.loadFeedsIfNeeded()
9999
}
100100
}

Codive/Features/Feed/Presentation/MainFeed/ViewModel/FeedViewModel.swift

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -126,12 +126,11 @@ final class FeedViewModel: ObservableObject {
126126
feeds = result.feeds
127127
nextCursor = result.nextCursor
128128
hasMorePages = result.hasNext
129-
} catch {
129+
} catch is CancellationError {
130130
// Task 취소 시 기존 데이터 유지
131-
guard !Task.isCancelled else {
132-
isLoading = false
133-
return
134-
}
131+
isLoading = false
132+
return
133+
} catch {
135134
errorMessage = "Feed를 불러오는데 실패했습니다: \(error.localizedDescription)"
136135
feeds = []
137136
}

Codive/Features/Profile/MyProfile/Data/ProfileAPIService+Extensions.swift

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@ extension ProfileAPIService {
1818
switch response {
1919
case .ok(let okResponse):
2020
let data = try await Data(collecting: okResponse.body.any, upTo: .max)
21-
let jsonDecoder = JSONDecoderFactory.makeAPIDecoder()
2221

2322
let decoded = try jsonDecoder.decode(Components.Schemas.BaseResponseListFavoriteCoordinateResponse.self, from: data)
2423

@@ -45,7 +44,6 @@ extension ProfileAPIService {
4544
switch response {
4645
case .ok(let okResponse):
4746
let data = try await Data(collecting: okResponse.body.any, upTo: .max)
48-
let jsonDecoder = JSONDecoderFactory.makeAPIDecoder()
4947

5048
let decoded = try jsonDecoder.decode(Components.Schemas.BaseResponseListFavoriteCoordinateResponse.self, from: data)
5149

0 commit comments

Comments
 (0)