Skip to content

Commit 5f1deb0

Browse files
lsakeeSangwook123
authored andcommitted
[feat] #62 separate s3 thumbnail upload with architecture
1 parent d28c983 commit 5f1deb0

File tree

6 files changed

+35
-8
lines changed

6 files changed

+35
-8
lines changed

data/video/src/main/java/com/record/video/repository/UploadRepositoryImpl.kt

+14
Original file line numberDiff line numberDiff line change
@@ -57,4 +57,18 @@ class UploadRepositoryImpl @Inject constructor(
5757
}
5858
}
5959
}
60+
61+
override suspend fun uploadThumbnailToS3Bucket(url: String, file: File): Result<String> =
62+
runCatching {
63+
remoteUploadDataSource.uploadThumbnailToS3Bucket(url, file)
64+
}.recoverCatching { exception ->
65+
when (exception) {
66+
is HttpException -> {
67+
throw ApiError(exception.message())
68+
}
69+
else -> {
70+
throw exception
71+
}
72+
}
73+
}
6074
}

data/video/src/main/java/com/record/video/source/remote/RemoteUploadDataSource.kt

+1
Original file line numberDiff line numberDiff line change
@@ -9,4 +9,5 @@ interface RemoteUploadDataSource {
99
suspend fun getUploadUrl(): ResponseGetPresignedUrlDto
1010
suspend fun uploadRecord(requestPostVideoDto: RequestPostVideoDto)
1111
suspend fun uploadVideoToS3Bucket(url: String, file: File):String
12+
suspend fun uploadThumbnailToS3Bucket(url: String, file: File):String
1213
}

domain/upload/src/main/java/com/record/upload/repository/UploadRepository.kt

+1-1
Original file line numberDiff line numberDiff line change
@@ -8,5 +8,5 @@ interface UploadRepository {
88
suspend fun getPresignedUrl(): Result<UploadInfo>
99
suspend fun uploadRecord(videoInfo: VideoInfo): Result<Unit>
1010
suspend fun uploadVideoToS3Bucket(url: String, file: File): Result<String>
11-
11+
suspend fun uploadThumbnailToS3Bucket(url: String, file: File): Result<String>
1212
}

feature/upload/src/main/java/com/record/upload/UploadViewModel.kt

+3-4
Original file line numberDiff line numberDiff line change
@@ -52,12 +52,11 @@ class UploadViewModel @Inject constructor(
5252
).onSuccess {
5353
a = removeQueryParameters(it)
5454
Log.d("testUpload", "$a")
55-
uploadFileToS3ThumbnailPresignedUrl(
56-
context,
55+
uploadRepository.uploadThumbnailToS3Bucket(
5756
uiState.value.thumbnailUrl,
5857
file,
59-
) { success, message ->
60-
b = removeQueryParameters(message)
58+
) .onSuccess{
59+
b = removeQueryParameters(it)
6160
Log.d("testUploadthumbnailUrl", "$b")
6261
uploadRecord(a, b)
6362
}

remote/video/build.gradle.kts

+1
Original file line numberDiff line numberDiff line change
@@ -8,4 +8,5 @@ android {
88

99
dependencies {
1010
implementation(projects.data.video)
11+
implementation(projects.core.common)
1112
}

remote/video/src/main/java/com/record/video/datasource/RemoteUploadDataSourceImpl.kt

+15-3
Original file line numberDiff line numberDiff line change
@@ -2,23 +2,23 @@ package com.record.video.datasource
22

33
import android.content.Context
44
import android.util.Log
5+
import com.record.common.util.getVideoFrameAt1Sec
56
import com.record.video.api.BucketApi
67
import com.record.video.api.UploadApi
78
import com.record.video.model.remote.request.RequestPostVideoDto
89
import com.record.video.model.remote.response.ResponseGetPresignedUrlDto
910
import com.record.video.source.remote.RemoteUploadDataSource
11+
import dagger.hilt.android.qualifiers.ApplicationContext
1012
import okhttp3.MediaType.Companion.toMediaTypeOrNull
11-
import okhttp3.MultipartBody
1213
import okhttp3.RequestBody
13-
import okhttp3.RequestBody.Companion.toRequestBody
14-
import okhttp3.ResponseBody.Companion.toResponseBody
1514
import java.io.File
1615
import java.net.URL
1716
import javax.inject.Inject
1817

1918
class RemoteUploadDataSourceImpl @Inject constructor(
2019
private val uploadApi: UploadApi,
2120
private val bucketApi: BucketApi,
21+
@ApplicationContext private val context: Context
2222
) : RemoteUploadDataSource {
2323
override suspend fun getUploadUrl(): ResponseGetPresignedUrlDto =
2424
uploadApi.getPresignedUploadUrl()
@@ -35,4 +35,16 @@ class RemoteUploadDataSourceImpl @Inject constructor(
3535
Log.d("testUrl","$url")
3636
return URL(url.protocol, url.host, url.port, url.path).toString()
3737
}
38+
39+
override suspend fun uploadThumbnailToS3Bucket(url: String, file: File): String {
40+
val videoPath = file.absolutePath
41+
val outputImagePath = File(context.cacheDir, file.name)
42+
getVideoFrameAt1Sec(videoPath, outputImagePath.absolutePath)
43+
val mediaType = "application/octet-stream".toMediaTypeOrNull()
44+
val requestBody = RequestBody.create(mediaType, outputImagePath)
45+
val url = URL(bucketApi.uploadVideoWithS3Video(url, requestBody).raw().request.url.toString())
46+
Log.d("testUrl2","$url")
47+
return URL(url.protocol, url.host, url.port, url.path).toString()
48+
49+
}
3850
}

0 commit comments

Comments
 (0)