From ccf39174e14bf4eb786d6bea6b7445f7f7700ebb Mon Sep 17 00:00:00 2001 From: "Hector A. Narvaez" Date: Wed, 24 May 2023 18:05:02 -0500 Subject: [PATCH] Implemented use case for create files on non-gms module --- .../nongms/data/GoogleStorageApiService.kt | 17 +++++++++++++--- .../repository/NonGmsFileRepositoryImpl.kt | 2 +- .../source/NonGmsFileRemoteDataSourceImpl.kt | 18 ++++++++++++++++- .../nongms/data/source/body/CreateFileBody.kt | 6 ++++++ .../data/source/OmhFileRemoteDataSource.kt | 2 ++ .../api/domain/repository/FileRepository.kt | 2 +- .../storage/api/domain/usecase/CreateFile.kt | 5 ----- .../api/domain/usecase/CreateFileUseCase.kt | 20 +++++++++++++++++++ 8 files changed, 61 insertions(+), 11 deletions(-) create mode 100644 storage-api-drive-nongms/src/main/java/com/omh/android/storage/api/drive/nongms/data/source/body/CreateFileBody.kt delete mode 100644 storage-api/src/main/java/com/omh/android/storage/api/domain/usecase/CreateFile.kt create mode 100644 storage-api/src/main/java/com/omh/android/storage/api/domain/usecase/CreateFileUseCase.kt diff --git a/storage-api-drive-nongms/src/main/java/com/omh/android/storage/api/drive/nongms/data/GoogleStorageApiService.kt b/storage-api-drive-nongms/src/main/java/com/omh/android/storage/api/drive/nongms/data/GoogleStorageApiService.kt index 6e5fbdf1..6ea437bd 100644 --- a/storage-api-drive-nongms/src/main/java/com/omh/android/storage/api/drive/nongms/data/GoogleStorageApiService.kt +++ b/storage-api-drive-nongms/src/main/java/com/omh/android/storage/api/drive/nongms/data/GoogleStorageApiService.kt @@ -1,25 +1,36 @@ package com.omh.android.storage.api.drive.nongms.data +import com.omh.android.storage.api.drive.nongms.data.source.body.CreateFileBody import com.omh.android.storage.api.drive.nongms.data.source.response.FileListRemoteResponse +import com.omh.android.storage.api.drive.nongms.data.source.response.FileRemoteResponse import retrofit2.Call +import retrofit2.http.Body import retrofit2.http.GET +import retrofit2.http.POST import retrofit2.http.Query internal interface GoogleStorageApiService { companion object { - private const val GET_ALL_FILES_AND_FOLDERS_LIST_PARTICLE = "files" + private const val FILES_PARTICLE = "files" private const val QUERY_Q = "q" private const val QUERY_FIELDS = "fields" private const val Q_VALUE = "'root' in parents and trashed = false" - private const val FIELDS_VALUE = "files(id, name, mimeType, modifiedTime)" + private const val QUERY_REQUESTED_FIELDS = "id,name,mimeType,modifiedTime" + private const val FIELDS_VALUE = "files($QUERY_REQUESTED_FIELDS)" } - @GET(GET_ALL_FILES_AND_FOLDERS_LIST_PARTICLE) + @GET(FILES_PARTICLE) fun getRootFilesList( @Query(QUERY_Q) query: String = Q_VALUE, @Query(QUERY_FIELDS) fields: String = FIELDS_VALUE ): Call + + @POST(FILES_PARTICLE) + fun createFile( + @Query(QUERY_FIELDS) query: String = QUERY_REQUESTED_FIELDS, + @Body body: CreateFileBody + ): Call } diff --git a/storage-api-drive-nongms/src/main/java/com/omh/android/storage/api/drive/nongms/data/repository/NonGmsFileRepositoryImpl.kt b/storage-api-drive-nongms/src/main/java/com/omh/android/storage/api/drive/nongms/data/repository/NonGmsFileRepositoryImpl.kt index afa74ca7..c28d4514 100644 --- a/storage-api-drive-nongms/src/main/java/com/omh/android/storage/api/drive/nongms/data/repository/NonGmsFileRepositoryImpl.kt +++ b/storage-api-drive-nongms/src/main/java/com/omh/android/storage/api/drive/nongms/data/repository/NonGmsFileRepositoryImpl.kt @@ -9,7 +9,7 @@ internal class NonGmsFileRepositoryImpl( override fun getRootFilesList() = dataSource.getRootFilesList() - override fun create() = Unit + override fun createFile(name: String, mimeType: String) = dataSource.createFile(name, mimeType) override fun open() = Unit diff --git a/storage-api-drive-nongms/src/main/java/com/omh/android/storage/api/drive/nongms/data/source/NonGmsFileRemoteDataSourceImpl.kt b/storage-api-drive-nongms/src/main/java/com/omh/android/storage/api/drive/nongms/data/source/NonGmsFileRemoteDataSourceImpl.kt index 60849c99..b0eb8b98 100644 --- a/storage-api-drive-nongms/src/main/java/com/omh/android/storage/api/drive/nongms/data/source/NonGmsFileRemoteDataSourceImpl.kt +++ b/storage-api-drive-nongms/src/main/java/com/omh/android/storage/api/drive/nongms/data/source/NonGmsFileRemoteDataSourceImpl.kt @@ -3,9 +3,12 @@ package com.omh.android.storage.api.drive.nongms.data.source import com.omh.android.storage.api.data.source.OmhFileRemoteDataSource import com.omh.android.storage.api.domain.model.OmhFile import com.omh.android.storage.api.drive.nongms.data.GoogleRetrofitImpl +import com.omh.android.storage.api.drive.nongms.data.source.body.CreateFileBody +import com.omh.android.storage.api.drive.nongms.data.source.mapper.toFile import com.omh.android.storage.api.drive.nongms.data.source.mapper.toFileList -internal class NonGmsFileRemoteDataSourceImpl(private val retrofitImpl: GoogleRetrofitImpl) : OmhFileRemoteDataSource { +internal class NonGmsFileRemoteDataSourceImpl(private val retrofitImpl: GoogleRetrofitImpl) : + OmhFileRemoteDataSource { override fun getRootFilesList(): List { val response = retrofitImpl @@ -19,4 +22,17 @@ internal class NonGmsFileRemoteDataSourceImpl(private val retrofitImpl: GoogleRe emptyList() } } + + override fun createFile(name: String, mimeType: String): OmhFile? { + val response = retrofitImpl + .getGoogleStorageApiService() + .createFile(body = CreateFileBody(mimeType, name)) + .execute() + + return if (response.isSuccessful) { + response.body()?.toFile() + } else { + null + } + } } diff --git a/storage-api-drive-nongms/src/main/java/com/omh/android/storage/api/drive/nongms/data/source/body/CreateFileBody.kt b/storage-api-drive-nongms/src/main/java/com/omh/android/storage/api/drive/nongms/data/source/body/CreateFileBody.kt new file mode 100644 index 00000000..6a9d65c7 --- /dev/null +++ b/storage-api-drive-nongms/src/main/java/com/omh/android/storage/api/drive/nongms/data/source/body/CreateFileBody.kt @@ -0,0 +1,6 @@ +package com.omh.android.storage.api.drive.nongms.data.source.body + +data class CreateFileBody( + val mimeType: String, + val name: String +) diff --git a/storage-api/src/main/java/com/omh/android/storage/api/data/source/OmhFileRemoteDataSource.kt b/storage-api/src/main/java/com/omh/android/storage/api/data/source/OmhFileRemoteDataSource.kt index 4dbb0a6f..5f10aaea 100644 --- a/storage-api/src/main/java/com/omh/android/storage/api/data/source/OmhFileRemoteDataSource.kt +++ b/storage-api/src/main/java/com/omh/android/storage/api/data/source/OmhFileRemoteDataSource.kt @@ -5,4 +5,6 @@ import com.omh.android.storage.api.domain.model.OmhFile interface OmhFileRemoteDataSource { fun getRootFilesList(): List + + fun createFile(name: String, mimeType: String): OmhFile? } diff --git a/storage-api/src/main/java/com/omh/android/storage/api/domain/repository/FileRepository.kt b/storage-api/src/main/java/com/omh/android/storage/api/domain/repository/FileRepository.kt index d0b5fc95..cc53cc9a 100644 --- a/storage-api/src/main/java/com/omh/android/storage/api/domain/repository/FileRepository.kt +++ b/storage-api/src/main/java/com/omh/android/storage/api/domain/repository/FileRepository.kt @@ -6,7 +6,7 @@ interface FileRepository { fun getRootFilesList(): List - fun create() + fun createFile(name: String, mimeType: String): OmhFile? fun open() diff --git a/storage-api/src/main/java/com/omh/android/storage/api/domain/usecase/CreateFile.kt b/storage-api/src/main/java/com/omh/android/storage/api/domain/usecase/CreateFile.kt deleted file mode 100644 index 9d43bafa..00000000 --- a/storage-api/src/main/java/com/omh/android/storage/api/domain/usecase/CreateFile.kt +++ /dev/null @@ -1,5 +0,0 @@ -package com.omh.android.storage.api.domain.usecase - -interface CreateFile { - fun execute() -} diff --git a/storage-api/src/main/java/com/omh/android/storage/api/domain/usecase/CreateFileUseCase.kt b/storage-api/src/main/java/com/omh/android/storage/api/domain/usecase/CreateFileUseCase.kt new file mode 100644 index 00000000..f2d4c484 --- /dev/null +++ b/storage-api/src/main/java/com/omh/android/storage/api/domain/usecase/CreateFileUseCase.kt @@ -0,0 +1,20 @@ +package com.omh.android.storage.api.domain.usecase + +import com.omh.android.storage.api.domain.model.OmhFile +import com.omh.android.storage.api.domain.repository.FileRepository +import kotlinx.coroutines.CoroutineDispatcher +import kotlinx.coroutines.Dispatchers + +class CreateFileUseCase( + private val repository: FileRepository, + dispatcher: CoroutineDispatcher = Dispatchers.Default +) : OmhSuspendUseCase(dispatcher) { + + override suspend fun execute(parameters: CreateFileUseCaseParams) = CreateFileUseCaseResult( + repository.createFile(parameters.name, parameters.mimeType) + ) +} + +data class CreateFileUseCaseParams(val name: String, val mimeType: String) + +data class CreateFileUseCaseResult(val file: OmhFile?)