Skip to content

Commit d4db35e

Browse files
committed
[Network] #206 - API 연결
1 parent fe461ae commit d4db35e

2 files changed

Lines changed: 34 additions & 13 deletions

File tree

Neki-iOS/Features/Archive/Sources/Presentation/Sources/Feature/AlbumSelectionFeature.swift

Lines changed: 23 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -144,14 +144,32 @@ struct AlbumSelectionFeature {
144144
case .tapConfirm:
145145
guard !state.selectedAlbumIDs.isEmpty else { return .none }
146146
state.isLoading = true
147+
147148
let purpose = state.selectionPurpose
149+
let photoIDs = state.photoIDs
150+
let targetFolderIDs = Array(state.selectedAlbumIDs)
151+
let currentAlbumId = state.currentAlbumId
148152

149153
return .run { send in
150-
// TODO: 실제 API 연동 (archiveClient.duplicatePhoto / movePhoto)
151-
try? await Task.sleep(for: .seconds(1))
152-
153-
let msg = purpose == .duplicate ? "사진을 앨범에 추가했어요" : "사진을 앨범으로 이동했어요"
154-
await send(.taskCompleted(message: msg))
154+
do {
155+
if purpose == .duplicate {
156+
// 복제 - sourceFolderId 없음
157+
try await archiveClient.duplicatePhoto(photoIDs: photoIDs, targetFolderIDs: targetFolderIDs)
158+
await send(.taskCompleted(message: "사진을 앨범에 추가했어요"))
159+
160+
} else if purpose == .move {
161+
// 이동 - sourceFolderId 필수
162+
if let sourceFolderId = currentAlbumId {
163+
try await archiveClient.movePhoto(sourceFolderId: sourceFolderId, photoIDs: photoIDs, targetFolderIDs: targetFolderIDs)
164+
await send(.taskCompleted(message: "사진을 앨범으로 이동했어요"))
165+
} else {
166+
await send(.taskFailed(message: "사진 이동에 실패했어요"))
167+
}
168+
}
169+
} catch {
170+
let failMsg = purpose == .duplicate ? "사진 추가에 실패했어요" : "사진 이동에 실패했어요"
171+
await send(.taskFailed(message: failMsg))
172+
}
155173
}
156174

157175
case let .taskCompleted(message):

Neki-iOS/Features/Archive/Sources/Presentation/Sources/Feature/PhotoImportFeature.swift

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ struct PhotoImportFeature {
2323
var isFetchingAlbums: Bool = false
2424
var isLoading: Bool = false
2525

26-
var targetAlbumId: Int
26+
var targetAlbumId: Int
2727

2828
var uploadCount: Int { selectedIDs.count }
2929
var isUploadEnabled: Bool { uploadCount > 0 }
@@ -121,7 +121,7 @@ struct PhotoImportFeature {
121121

122122
return .run { [id = state.selectedAlbum?.id] send in
123123
if id == -1 {
124-
await send(.fetchPhotosResponse(Result { try await archiveClient.fetchFavoritePhotoList(20, sortOrder) }))
124+
await send(.fetchPhotosResponse(Result { try await archiveClient.fetchFavoritePhotoList(size: 20, sortOrder: sortOrder) }))
125125
} else {
126126
await send(.fetchPhotosResponse(Result { try await archiveClient.fetchPhotoList(folderId: targetFolderId, size: 20, sortOrder: sortOrder) }))
127127
}
@@ -171,14 +171,17 @@ struct PhotoImportFeature {
171171
case .tapUpload:
172172
guard state.isUploadEnabled else { return .none }
173173
state.isLoading = true
174-
let ids = Array(state.selectedIDs)
175-
let targetId = state.targetAlbumId
174+
175+
let photoIDs = Array(state.selectedIDs)
176+
let targetFolderIDs = [state.targetAlbumId]
176177

177178
return .run { send in
178-
// TODO: 실제 API 연동 (archiveClient.duplicatePhoto(sourceFolderId: nil, photoIDs: ids, targetFolderIDs: [targetId]))
179-
try? await Task.sleep(for: .seconds(1)) // 임시 딜레이
180-
181-
await send(.taskCompleted(message: "사진을 앨범에 가져왔어요"))
179+
do {
180+
try await archiveClient.duplicatePhoto(photoIDs: photoIDs, targetFolderIDs: targetFolderIDs)
181+
await send(.taskCompleted(message: "사진을 앨범에 가져왔어요"))
182+
} catch {
183+
await send(.taskFailed(message: "사진을 가져오지 못했어요"))
184+
}
182185
}
183186

184187
case let .taskCompleted(message):

0 commit comments

Comments
 (0)