Skip to content

Commit ae9c4de

Browse files
committed
[Fix/#145] 이미지 업로드 유스케이스 수정
- 캔슬 throw 로직 추가 - zip 내에서 suspend 호출하지 않도록 변경 - uri/files 크기 다를 때 예외처리 - 최종 실패 시에도 이미지 디렉토리 비우도록
1 parent 1b19a90 commit ae9c4de

File tree

1 file changed

+16
-7
lines changed

1 file changed

+16
-7
lines changed

app/src/main/java/com/poti/android/domain/usecase/image/UploadImagesUseCaseV2.kt

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,15 @@ package com.poti.android.domain.usecase.image
22

33
import com.poti.android.core.common.constant.ImageConstants.IMAGE_EXTENSION
44
import com.poti.android.domain.model.image.PresignedUploadInfo
5-
import com.poti.android.domain.repository.FileUplaodRepository
5+
import com.poti.android.domain.repository.FileUploadRepository
66
import com.poti.android.domain.repository.ImageRepository
77
import java.io.File
88
import javax.inject.Inject
9+
import kotlin.coroutines.cancellation.CancellationException
910

1011
class UploadImagesUseCaseV2 @Inject constructor(
1112
private val imageRepository: ImageRepository,
12-
private val fileUplaodRepository: FileUplaodRepository,
13+
private val fileUploadRepository: FileUploadRepository,
1314
) {
1415
suspend operator fun invoke(
1516
uploadType: String,
@@ -21,11 +22,13 @@ class UploadImagesUseCaseV2 @Inject constructor(
2122
val files = createImages(uriStrings)
2223

2324
uploadImages(urls, files)
24-
clearDirectory()
2525

2626
return Result.success(fileNames)
2727
} catch (t: Throwable) {
28+
if (t is CancellationException) throw t
2829
return Result.failure(t)
30+
} finally {
31+
clearDirectory()
2932
}
3033
}
3134

@@ -40,16 +43,22 @@ class UploadImagesUseCaseV2 @Inject constructor(
4043
private fun createImages(
4144
uriStrings: List<String>,
4245
): List<File> = uriStrings.map { uri ->
43-
fileUplaodRepository.createImage(uri).getOrThrow()
46+
fileUploadRepository.createImage(uri).getOrThrow()
4447
}
4548

4649
private suspend fun uploadImages(
4750
urls: List<String>,
4851
files: List<File>,
49-
) = urls.zip(files) { url, file ->
50-
fileUplaodRepository.uploadImage(url, file).getOrThrow()
52+
) {
53+
if (urls.size != files.size) {
54+
throw IllegalStateException("Upload URL count and file count must match")
55+
}
56+
57+
for (i in urls.indices) {
58+
fileUploadRepository.uploadImage(urls[i], files[i]).getOrThrow()
59+
}
5160
}
5261

53-
private fun clearDirectory() = fileUplaodRepository
62+
private fun clearDirectory() = fileUploadRepository
5463
.clearDirectory().getOrThrow()
5564
}

0 commit comments

Comments
 (0)