From 8784912cdb48b2b3436797f2b25587f86f1c1c3f Mon Sep 17 00:00:00 2001 From: Kirill Kamakin Date: Thu, 4 Aug 2022 20:53:26 +0200 Subject: [PATCH] Extract AddRecipeInput proto file to a module --- app/build.gradle.kts | 28 +-------- .../data/add/impl/AddRecipeStorageImpl.kt | 2 +- .../data/add/models/AddRecipeRequest.kt | 1 + .../kirmanak/mealient/di/AddRecipeModule.kt | 15 ----- database/build.gradle.kts | 1 - datastore/.gitignore | 1 + datastore/build.gradle.kts | 60 +++++++++++++++++++ .../mealient/datastore/DataStoreModule.kt | 29 +++++++++ .../recipe}/AddRecipeInputSerializer.kt | 2 +- datastore/src/main/proto/AddRecipeInput.proto | 14 +++++ settings.gradle.kts | 1 + 11 files changed, 109 insertions(+), 45 deletions(-) create mode 100644 datastore/.gitignore create mode 100644 datastore/build.gradle.kts create mode 100644 datastore/src/main/kotlin/gq/kirmanak/mealient/datastore/DataStoreModule.kt rename {app/src/main/java/gq/kirmanak/mealient/data/add/models => datastore/src/main/kotlin/gq/kirmanak/mealient/datastore/recipe}/AddRecipeInputSerializer.kt (93%) create mode 100644 datastore/src/main/proto/AddRecipeInput.proto diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 9b3c2f9..c36411a 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -1,9 +1,5 @@ @file:Suppress("UnstableApiUsage") -import com.google.protobuf.gradle.builtins -import com.google.protobuf.gradle.generateProtoTasks -import com.google.protobuf.gradle.protobuf -import com.google.protobuf.gradle.protoc import java.io.FileInputStream import java.util.* @@ -16,7 +12,6 @@ plugins { id("com.google.gms.google-services") id("com.google.firebase.crashlytics") alias(libs.plugins.appsweep) - alias(libs.plugins.protobuf) } android { @@ -72,6 +67,7 @@ android { dependencies { implementation(project(":database")) + implementation(project(":datastore")) implementation(libs.android.material.material) @@ -126,8 +122,6 @@ dependencies { implementation(libs.androidx.datastore.preferences) implementation(libs.androidx.datastore.datastore) - implementation(libs.google.protobuf.javalite) - implementation(libs.androidx.security.crypto) implementation(platform(libs.google.firebase.bom)) @@ -150,24 +144,4 @@ dependencies { debugImplementation(libs.squareup.leakcanary) debugImplementation(libs.chuckerteam.chucker) -} - -protobuf { - protoc { - artifact = libs.google.protobuf.protoc.get().toString() - } - - generateProtoTasks { - all().forEach { task -> - task.builtins { - val java by registering { - option("lite") - } - } - } - } -} - -kapt { - correctErrorTypes = true } \ No newline at end of file diff --git a/app/src/main/java/gq/kirmanak/mealient/data/add/impl/AddRecipeStorageImpl.kt b/app/src/main/java/gq/kirmanak/mealient/data/add/impl/AddRecipeStorageImpl.kt index 921d414..800a887 100644 --- a/app/src/main/java/gq/kirmanak/mealient/data/add/impl/AddRecipeStorageImpl.kt +++ b/app/src/main/java/gq/kirmanak/mealient/data/add/impl/AddRecipeStorageImpl.kt @@ -2,8 +2,8 @@ package gq.kirmanak.mealient.data.add.impl import androidx.datastore.core.DataStore import gq.kirmanak.mealient.data.add.AddRecipeStorage -import gq.kirmanak.mealient.data.add.models.AddRecipeInput import gq.kirmanak.mealient.data.add.models.AddRecipeRequest +import gq.kirmanak.mealient.datastore.recipe.AddRecipeInput import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.map import timber.log.Timber diff --git a/app/src/main/java/gq/kirmanak/mealient/data/add/models/AddRecipeRequest.kt b/app/src/main/java/gq/kirmanak/mealient/data/add/models/AddRecipeRequest.kt index deb538e..4501015 100644 --- a/app/src/main/java/gq/kirmanak/mealient/data/add/models/AddRecipeRequest.kt +++ b/app/src/main/java/gq/kirmanak/mealient/data/add/models/AddRecipeRequest.kt @@ -1,5 +1,6 @@ package gq.kirmanak.mealient.data.add.models +import gq.kirmanak.mealient.datastore.recipe.AddRecipeInput import kotlinx.serialization.SerialName import kotlinx.serialization.Serializable diff --git a/app/src/main/java/gq/kirmanak/mealient/di/AddRecipeModule.kt b/app/src/main/java/gq/kirmanak/mealient/di/AddRecipeModule.kt index c0b0402..cfb7a66 100644 --- a/app/src/main/java/gq/kirmanak/mealient/di/AddRecipeModule.kt +++ b/app/src/main/java/gq/kirmanak/mealient/di/AddRecipeModule.kt @@ -1,14 +1,9 @@ package gq.kirmanak.mealient.di -import android.content.Context -import androidx.datastore.core.DataStore -import androidx.datastore.core.DataStoreFactory -import androidx.datastore.dataStoreFile import dagger.Binds import dagger.Module import dagger.Provides import dagger.hilt.InstallIn -import dagger.hilt.android.qualifiers.ApplicationContext import dagger.hilt.components.SingletonComponent import gq.kirmanak.mealient.data.add.AddRecipeDataSource import gq.kirmanak.mealient.data.add.AddRecipeRepo @@ -17,8 +12,6 @@ import gq.kirmanak.mealient.data.add.impl.AddRecipeDataSourceImpl import gq.kirmanak.mealient.data.add.impl.AddRecipeRepoImpl import gq.kirmanak.mealient.data.add.impl.AddRecipeService import gq.kirmanak.mealient.data.add.impl.AddRecipeStorageImpl -import gq.kirmanak.mealient.data.add.models.AddRecipeInput -import gq.kirmanak.mealient.data.add.models.AddRecipeInputSerializer import gq.kirmanak.mealient.data.baseurl.BaseURLStorage import gq.kirmanak.mealient.data.network.RetrofitBuilder import gq.kirmanak.mealient.data.network.ServiceFactory @@ -34,14 +27,6 @@ interface AddRecipeModule { companion object { - @Provides - @Singleton - fun provideAddRecipeInputStore( - @ApplicationContext context: Context - ): DataStore = DataStoreFactory.create(AddRecipeInputSerializer) { - context.dataStoreFile("add_recipe_input") - } - @Provides @Singleton fun provideAddRecipeServiceFactory( diff --git a/database/build.gradle.kts b/database/build.gradle.kts index afb1731..7f5ab6f 100644 --- a/database/build.gradle.kts +++ b/database/build.gradle.kts @@ -39,5 +39,4 @@ dependencies { testImplementation(libs.google.truth) testImplementation(libs.io.mockk) - } \ No newline at end of file diff --git a/datastore/.gitignore b/datastore/.gitignore new file mode 100644 index 0000000..42afabf --- /dev/null +++ b/datastore/.gitignore @@ -0,0 +1 @@ +/build \ No newline at end of file diff --git a/datastore/build.gradle.kts b/datastore/build.gradle.kts new file mode 100644 index 0000000..3a77714 --- /dev/null +++ b/datastore/build.gradle.kts @@ -0,0 +1,60 @@ +import com.google.protobuf.gradle.builtins +import com.google.protobuf.gradle.generateProtoTasks +import com.google.protobuf.gradle.protobuf +import com.google.protobuf.gradle.protoc + +plugins { + id("gq.kirmanak.mealient.library") + id("kotlin-kapt") + id("dagger.hilt.android.plugin") + alias(libs.plugins.protobuf) +} + +android { + namespace = "gq.kirmanak.mealient.datastore" +} + +dependencies { + implementation(libs.androidx.datastore.preferences) + implementation(libs.androidx.datastore.datastore) + + implementation(libs.google.protobuf.javalite) + + implementation(libs.androidx.security.crypto) + + implementation(libs.google.dagger.hiltAndroid) + kapt(libs.google.dagger.hiltCompiler) + kaptTest(libs.google.dagger.hiltAndroidCompiler) + testImplementation(libs.google.dagger.hiltAndroidTesting) + + implementation(libs.jetbrains.kotlinx.datetime) + + implementation(libs.jetbrains.kotlinx.coroutinesAndroid) + testImplementation(libs.jetbrains.kotlinx.coroutinesTest) + + testImplementation(libs.androidx.test.junit) + + testImplementation(libs.google.truth) + + testImplementation(libs.io.mockk) +} + +protobuf { + protoc { + artifact = libs.google.protobuf.protoc.get().toString() + } + + generateProtoTasks { + all().forEach { task -> + task.builtins { + val java by registering { + option("lite") + } + } + } + } +} + +kapt { + correctErrorTypes = true +} diff --git a/datastore/src/main/kotlin/gq/kirmanak/mealient/datastore/DataStoreModule.kt b/datastore/src/main/kotlin/gq/kirmanak/mealient/datastore/DataStoreModule.kt new file mode 100644 index 0000000..3555021 --- /dev/null +++ b/datastore/src/main/kotlin/gq/kirmanak/mealient/datastore/DataStoreModule.kt @@ -0,0 +1,29 @@ +package gq.kirmanak.mealient.datastore + +import android.content.Context +import androidx.datastore.core.DataStore +import androidx.datastore.core.DataStoreFactory +import androidx.datastore.dataStoreFile +import dagger.Module +import dagger.Provides +import dagger.hilt.InstallIn +import dagger.hilt.android.qualifiers.ApplicationContext +import dagger.hilt.components.SingletonComponent +import gq.kirmanak.mealient.datastore.recipe.AddRecipeInput +import gq.kirmanak.mealient.datastore.recipe.AddRecipeInputSerializer +import javax.inject.Singleton + +@Module +@InstallIn(SingletonComponent::class) +interface DataStoreModule { + + companion object { + @Provides + @Singleton + fun provideAddRecipeInputStore( + @ApplicationContext context: Context + ): DataStore = DataStoreFactory.create(AddRecipeInputSerializer) { + context.dataStoreFile("add_recipe_input") + } + } +} \ No newline at end of file diff --git a/app/src/main/java/gq/kirmanak/mealient/data/add/models/AddRecipeInputSerializer.kt b/datastore/src/main/kotlin/gq/kirmanak/mealient/datastore/recipe/AddRecipeInputSerializer.kt similarity index 93% rename from app/src/main/java/gq/kirmanak/mealient/data/add/models/AddRecipeInputSerializer.kt rename to datastore/src/main/kotlin/gq/kirmanak/mealient/datastore/recipe/AddRecipeInputSerializer.kt index d7f0199..1b2e60a 100644 --- a/app/src/main/java/gq/kirmanak/mealient/data/add/models/AddRecipeInputSerializer.kt +++ b/datastore/src/main/kotlin/gq/kirmanak/mealient/datastore/recipe/AddRecipeInputSerializer.kt @@ -1,4 +1,4 @@ -package gq.kirmanak.mealient.data.add.models +package gq.kirmanak.mealient.datastore.recipe import androidx.datastore.core.CorruptionException import androidx.datastore.core.Serializer diff --git a/datastore/src/main/proto/AddRecipeInput.proto b/datastore/src/main/proto/AddRecipeInput.proto new file mode 100644 index 0000000..760cc0c --- /dev/null +++ b/datastore/src/main/proto/AddRecipeInput.proto @@ -0,0 +1,14 @@ +syntax = "proto3"; + +option java_package = "gq.kirmanak.mealient.datastore.recipe"; +option java_multiple_files = true; + +message AddRecipeInput { + string recipeName = 1; + string recipeDescription = 2; + string recipeYield = 3; + repeated string recipeInstructions = 4; + repeated string recipeIngredients = 5; + bool isRecipePublic = 6; + bool areCommentsDisabled = 7; +} \ No newline at end of file diff --git a/settings.gradle.kts b/settings.gradle.kts index 4145c27..9b81aeb 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -21,3 +21,4 @@ rootProject.name = "Mealient" include(":app") include(":database") +include(":datastore")