From 3ccee37b2710e8c7c3ae0be09fb563568a21e5bb Mon Sep 17 00:00:00 2001 From: "Hector A. Narvaez" Date: Mon, 15 May 2023 14:59:44 -0500 Subject: [PATCH] Add implementation for data layer on non gms module --- .../api/drive/nongms/OmhStorageClientImpl.kt | 25 ++++++++++++ .../api/drive/nongms/OmhStorageFactoryImpl.kt | 11 ++++++ .../drive/nongms/data/GoogleRetrofitImpl.kt | 26 +++++++++++++ .../drive/nongms/data/GoogleStorageREST.kt | 15 ++++++++ .../datasource/FilesFoldersRestDataSource.kt | 14 +++++++ .../drive/nongms/data/mapper/DataMappers.kt | 38 +++++++++++++++++++ .../nongms/data/model/FileOrFolderResponse.kt | 16 ++++++++ .../data/model/FilesFoldersListResponse.kt | 10 +++++ 8 files changed, 155 insertions(+) create mode 100644 storage-api-drive-nongms/src/main/java/com/omh/android/storage/api/drive/nongms/OmhStorageClientImpl.kt create mode 100644 storage-api-drive-nongms/src/main/java/com/omh/android/storage/api/drive/nongms/OmhStorageFactoryImpl.kt create mode 100644 storage-api-drive-nongms/src/main/java/com/omh/android/storage/api/drive/nongms/data/GoogleRetrofitImpl.kt create mode 100644 storage-api-drive-nongms/src/main/java/com/omh/android/storage/api/drive/nongms/data/GoogleStorageREST.kt create mode 100644 storage-api-drive-nongms/src/main/java/com/omh/android/storage/api/drive/nongms/data/datasource/FilesFoldersRestDataSource.kt create mode 100644 storage-api-drive-nongms/src/main/java/com/omh/android/storage/api/drive/nongms/data/mapper/DataMappers.kt create mode 100644 storage-api-drive-nongms/src/main/java/com/omh/android/storage/api/drive/nongms/data/model/FileOrFolderResponse.kt create mode 100644 storage-api-drive-nongms/src/main/java/com/omh/android/storage/api/drive/nongms/data/model/FilesFoldersListResponse.kt diff --git a/storage-api-drive-nongms/src/main/java/com/omh/android/storage/api/drive/nongms/OmhStorageClientImpl.kt b/storage-api-drive-nongms/src/main/java/com/omh/android/storage/api/drive/nongms/OmhStorageClientImpl.kt new file mode 100644 index 00000000..9dc0ce79 --- /dev/null +++ b/storage-api-drive-nongms/src/main/java/com/omh/android/storage/api/drive/nongms/OmhStorageClientImpl.kt @@ -0,0 +1,25 @@ +package com.omh.android.storage.api.drive.nongms + +import android.content.Context +import com.omh.android.storage.api.OmhStorageClient + +internal class OmhStorageClientImpl( + context: Context +) : OmhStorageClient { + + private val applicationContext: Context + + init { + applicationContext = context.applicationContext + } + + internal class Builder : OmhStorageClient.Builder { + override fun build(context: Context): OmhStorageClient { + return OmhStorageClientImpl(context) + } + } + + override fun setupAccessToken(token: String) { + // Implement THIS + } +} diff --git a/storage-api-drive-nongms/src/main/java/com/omh/android/storage/api/drive/nongms/OmhStorageFactoryImpl.kt b/storage-api-drive-nongms/src/main/java/com/omh/android/storage/api/drive/nongms/OmhStorageFactoryImpl.kt new file mode 100644 index 00000000..6788fb91 --- /dev/null +++ b/storage-api-drive-nongms/src/main/java/com/omh/android/storage/api/drive/nongms/OmhStorageFactoryImpl.kt @@ -0,0 +1,11 @@ +package com.omh.android.storage.api.drive.nongms + +import android.content.Context +import com.omh.android.storage.api.OmhStorageFactory + +class OmhStorageFactoryImpl : OmhStorageFactory { + + override fun getStorageClient( + context: Context + ) = OmhStorageClientImpl.Builder().build(context) +} diff --git a/storage-api-drive-nongms/src/main/java/com/omh/android/storage/api/drive/nongms/data/GoogleRetrofitImpl.kt b/storage-api-drive-nongms/src/main/java/com/omh/android/storage/api/drive/nongms/data/GoogleRetrofitImpl.kt new file mode 100644 index 00000000..886fab68 --- /dev/null +++ b/storage-api-drive-nongms/src/main/java/com/omh/android/storage/api/drive/nongms/data/GoogleRetrofitImpl.kt @@ -0,0 +1,26 @@ +package com.omh.android.storage.api.drive.nongms.data + +import com.omh.android.storage.api.drive.nongms.BuildConfig +import okhttp3.OkHttpClient +import okhttp3.logging.HttpLoggingInterceptor +import retrofit2.Retrofit +import retrofit2.converter.jackson.JacksonConverterFactory + +internal object GoogleRetrofitImpl { + + private val okHttpClient = OkHttpClient.Builder() + .addInterceptor( + HttpLoggingInterceptor().apply { + if (BuildConfig.DEBUG) setLevel(HttpLoggingInterceptor.Level.BODY) + } + ) + .build() + + private val retrofitClient = Retrofit.Builder() + .client(okHttpClient) + .baseUrl(BuildConfig.G_STORAGE_URL) + .addConverterFactory(JacksonConverterFactory.create()) + .build() + + val googleStorageREST: GoogleStorageREST = retrofitClient.create(GoogleStorageREST::class.java) +} diff --git a/storage-api-drive-nongms/src/main/java/com/omh/android/storage/api/drive/nongms/data/GoogleStorageREST.kt b/storage-api-drive-nongms/src/main/java/com/omh/android/storage/api/drive/nongms/data/GoogleStorageREST.kt new file mode 100644 index 00000000..ae62ff26 --- /dev/null +++ b/storage-api-drive-nongms/src/main/java/com/omh/android/storage/api/drive/nongms/data/GoogleStorageREST.kt @@ -0,0 +1,15 @@ +package com.omh.android.storage.api.drive.nongms.data + +import com.omh.android.storage.api.drive.nongms.data.model.FilesFoldersListResponse +import retrofit2.Call +import retrofit2.http.GET +import retrofit2.http.Query + +internal interface GoogleStorageREST { + + @GET("files") + fun getFilesFoldersList( + @Query("q") query: String = "'root' in parents and trashed = false", + @Query("fields") fields: String = "files(id, name, mimeType, modifiedTime)" + ): Call +} diff --git a/storage-api-drive-nongms/src/main/java/com/omh/android/storage/api/drive/nongms/data/datasource/FilesFoldersRestDataSource.kt b/storage-api-drive-nongms/src/main/java/com/omh/android/storage/api/drive/nongms/data/datasource/FilesFoldersRestDataSource.kt new file mode 100644 index 00000000..6f3741a8 --- /dev/null +++ b/storage-api-drive-nongms/src/main/java/com/omh/android/storage/api/drive/nongms/data/datasource/FilesFoldersRestDataSource.kt @@ -0,0 +1,14 @@ +package com.omh.android.storage.api.drive.nongms.data.datasource + +import com.omh.android.storage.api.data.datasource.network.FilesFoldersNetworkDataSource +import com.omh.android.storage.api.drive.nongms.data.GoogleStorageREST +import com.omh.android.storage.api.drive.nongms.data.mapper.fromFilesFoldersResponseListToData + +internal class FilesFoldersRestDataSource( + private val storageService: GoogleStorageREST, +) : FilesFoldersNetworkDataSource { + + override fun getAll() = fromFilesFoldersResponseListToData( + storageService.getFilesFoldersList().execute() + ) +} diff --git a/storage-api-drive-nongms/src/main/java/com/omh/android/storage/api/drive/nongms/data/mapper/DataMappers.kt b/storage-api-drive-nongms/src/main/java/com/omh/android/storage/api/drive/nongms/data/mapper/DataMappers.kt new file mode 100644 index 00000000..3c2c5ba7 --- /dev/null +++ b/storage-api-drive-nongms/src/main/java/com/omh/android/storage/api/drive/nongms/data/mapper/DataMappers.kt @@ -0,0 +1,38 @@ +package com.omh.android.storage.api.drive.nongms.data.mapper + +import com.omh.android.storage.api.data.model.RemoteFile +import com.omh.android.storage.api.data.model.RemoteFileOrFolder +import com.omh.android.storage.api.data.model.RemoteFolder +import com.omh.android.storage.api.drive.nongms.data.model.FilesFoldersListResponse +import retrofit2.Response +import java.text.SimpleDateFormat + +private const val RESPONSE_DATE_FORMAT = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'" + +internal fun fromFilesFoldersResponseListToData( + response: Response +): List { + val outputList = mutableListOf() + val filesInBody = response.body()?.files + if (!response.isSuccessful || filesInBody == null) return outputList + filesInBody.map { fileFolderResponse -> + val modifiedTimeAsLong = SimpleDateFormat(RESPONSE_DATE_FORMAT) + .parse(fileFolderResponse.modifiedTime) + .time + outputList.add( + if (fileFolderResponse.mimeType.contains("folder")) { + RemoteFolder( + fileFolderResponse.name, + modifiedTimeAsLong + ) + } else { + RemoteFile( + fileFolderResponse.name, + fileFolderResponse.mimeType, + modifiedTimeAsLong + ) + } + ) + } + return outputList +} diff --git a/storage-api-drive-nongms/src/main/java/com/omh/android/storage/api/drive/nongms/data/model/FileOrFolderResponse.kt b/storage-api-drive-nongms/src/main/java/com/omh/android/storage/api/drive/nongms/data/model/FileOrFolderResponse.kt new file mode 100644 index 00000000..867cac4d --- /dev/null +++ b/storage-api-drive-nongms/src/main/java/com/omh/android/storage/api/drive/nongms/data/model/FileOrFolderResponse.kt @@ -0,0 +1,16 @@ +package com.omh.android.storage.api.drive.nongms.data.model + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties +import com.fasterxml.jackson.annotation.JsonProperty + +@JsonIgnoreProperties(ignoreUnknown = true) +internal class FileOrFolderResponse( + @JsonProperty("id") + val id: String, + @JsonProperty("name") + val name: String, + @JsonProperty("mimeType") + val mimeType: String, + @JsonProperty("modifiedTime") + val modifiedTime: String +) diff --git a/storage-api-drive-nongms/src/main/java/com/omh/android/storage/api/drive/nongms/data/model/FilesFoldersListResponse.kt b/storage-api-drive-nongms/src/main/java/com/omh/android/storage/api/drive/nongms/data/model/FilesFoldersListResponse.kt new file mode 100644 index 00000000..a07d478e --- /dev/null +++ b/storage-api-drive-nongms/src/main/java/com/omh/android/storage/api/drive/nongms/data/model/FilesFoldersListResponse.kt @@ -0,0 +1,10 @@ +package com.omh.android.storage.api.drive.nongms.data.model + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties +import com.fasterxml.jackson.annotation.JsonProperty + +@JsonIgnoreProperties(ignoreUnknown = true) +internal class FilesFoldersListResponse( + @JsonProperty("files") + val files: List +)