Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

서버에서 바뀐 업로드 과정 반영 #237

Merged
merged 8 commits into from
Nov 30, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,37 +1,33 @@
package com.ohdodok.catchytape.core.data.api

import com.ohdodok.catchytape.core.data.model.PreSignedUrlResponse
import com.ohdodok.catchytape.core.data.model.UrlResponse
import com.ohdodok.catchytape.core.data.model.UuidResponse
import okhttp3.MultipartBody
import okhttp3.RequestBody
import retrofit2.http.GET
import retrofit2.http.Multipart
import retrofit2.http.POST
import retrofit2.http.Part
import retrofit2.http.Query

interface UploadApi {

@GET("upload/uuid")
suspend fun getUuid(
): UuidResponse

@GET("upload")
suspend fun getPreSignedUrl(
@Query("uuid") uuid: String,
@Query("type") type: String,
): PreSignedUrlResponse

@Multipart
@POST("upload/music")
suspend fun postMusic(
@Part part: MultipartBody.Part,
@Part audio: MultipartBody.Part,
@Part("uuid") uuid: RequestBody,
): UrlResponse

@Multipart
@POST("upload/image")
suspend fun postImage(
@Part part: MultipartBody.Part,
@Part image: MultipartBody.Part,
@Part("uuid") uuid: RequestBody,
@Part("type") type: RequestBody,
): UrlResponse

}
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,13 @@ package com.ohdodok.catchytape.core.data.di
import com.ohdodok.catchytape.core.data.repository.AuthRepositoryImpl
import com.ohdodok.catchytape.core.data.repository.MusicRepositoryImpl
import com.ohdodok.catchytape.core.data.repository.PlaylistRepositoryImpl
import com.ohdodok.catchytape.core.data.repository.UrlRepositoryImpl
import com.ohdodok.catchytape.core.data.repository.UploadRepositoryImpl
import com.ohdodok.catchytape.core.data.repository.UserTokenRepositoryImpl
import com.ohdodok.catchytape.core.data.repository.UuidRepositoryImpl
import com.ohdodok.catchytape.core.domain.repository.AuthRepository
import com.ohdodok.catchytape.core.domain.repository.MusicRepository
import com.ohdodok.catchytape.core.domain.repository.PlaylistRepository
import com.ohdodok.catchytape.core.domain.repository.UrlRepository
import com.ohdodok.catchytape.core.domain.repository.UploadRepository
import com.ohdodok.catchytape.core.domain.repository.UserTokenRepository
import com.ohdodok.catchytape.core.domain.repository.UuidRepository
import dagger.Binds
Expand All @@ -36,7 +36,7 @@ interface RepositoryModule {

@Binds
@Singleton
fun bindUrlRepository(urlRepositoryImpl: UrlRepositoryImpl): UrlRepository
fun bindUrlRepository(urlRepositoryImpl: UploadRepositoryImpl): UploadRepository

@Binds
@Singleton
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,6 @@ package com.ohdodok.catchytape.core.data.model

import kotlinx.serialization.Serializable

@Serializable
data class PreSignedUrlResponse(
val signedUrl: String
)

@Serializable
data class UrlResponse(
val url: String
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
package com.ohdodok.catchytape.core.data.repository

import com.ohdodok.catchytape.core.data.api.UploadApi
import com.ohdodok.catchytape.core.domain.repository.UploadRepository
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.flow
import okhttp3.MediaType.Companion.toMediaTypeOrNull
import okhttp3.MultipartBody
import okhttp3.RequestBody.Companion.asRequestBody
import okhttp3.RequestBody.Companion.toRequestBody
import java.io.File
import javax.inject.Inject

class UploadRepositoryImpl @Inject constructor(
private val uploadApi: UploadApi
) : UploadRepository {

override fun uploadImage(uuid: String, file: File): Flow<String> = flow {
val response = uploadApi.postImage(
image = file.toImageMultipart(),
uuid = uuid.toRequestBody(),
type = "cover".toRequestBody(),
)
emit(response.url)
}

override fun uploadAudio(uuid: String, file: File): Flow<String> = flow {
val response = uploadApi.postMusic(
audio = file.toAudioMultipart(),
uuid = uuid.toRequestBody(),
)
emit(response.url)
}

private fun File.toAudioMultipart(): MultipartBody.Part {
val fileBody = this.asRequestBody("audio/mpeg".toMediaTypeOrNull())
return MultipartBody.Part.createFormData("file", this.name, fileBody)
}

private fun File.toImageMultipart(): MultipartBody.Part {
val fileBody = this.asRequestBody("image/png".toMediaTypeOrNull())
return MultipartBody.Part.createFormData("file", this.name, fileBody)
}

}

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package com.ohdodok.catchytape.core.domain.repository

import kotlinx.coroutines.flow.Flow
import java.io.File

interface UploadRepository {

fun uploadImage(uuid: String, file: File): Flow<String>

fun uploadAudio(uuid: String, file: File): Flow<String>

}

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package com.ohdodok.catchytape.core.domain.usecase.upload

import com.ohdodok.catchytape.core.domain.repository.UploadRepository
import com.ohdodok.catchytape.core.domain.repository.UuidRepository
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.first
import kotlinx.coroutines.flow.map
import java.io.File
import javax.inject.Inject

class UploadFileUseCase @Inject constructor(
private val uuidRepository: UuidRepository,
private val uploadRepository: UploadRepository,
) {

fun uploadAudio(audioFile: File): Flow<String> = uuidRepository.getUuid().map { uuid ->
uploadRepository.uploadAudio(uuid, audioFile).first()
}

fun uploadMusicCover(imageFile: File): Flow<String> = uuidRepository.getUuid().map { uuid ->
uploadRepository.uploadImage(uuid, imageFile).first()
}
}
Loading