Skip to content

Commit

Permalink
Merge pull request #110 from 2rabs/rt/add-datastore-module
Browse files Browse the repository at this point in the history
✨ DataStore モジュールを追加
  • Loading branch information
tatsutakein authored Dec 4, 2023
2 parents ec5df5b + a1dd63c commit 1801fe3
Show file tree
Hide file tree
Showing 18 changed files with 109 additions and 46 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import club.nito.app.shared.di.featureModules
import club.nito.app.shared.di.nitoDateFormatterModule
import club.nito.app.shared.di.userMessageStateHolderModule
import club.nito.core.data.di.dataModule
import club.nito.core.datastore.di.dataStoreModule
import club.nito.core.domain.di.useCaseModule
import club.nito.core.network.di.remoteDataSourceModule
import club.nito.core.network.di.supabaseClientModule
Expand All @@ -30,6 +31,7 @@ class KmpEntryPoint {
supabaseClientModule,
remoteDataSourceModule,
// fakeRemoteDataSourceModule,
dataStoreModule,
dataModule,
useCaseModule,

Expand Down
1 change: 1 addition & 0 deletions app/shared/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ kotlin {
dependencies {
implementation(projects.core.common)
implementation(projects.core.model)
implementation(projects.core.datastore)
implementation(projects.core.data)
implementation(projects.core.network)
implementation(projects.core.domain)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import club.nito.app.shared.di.featureModules
import club.nito.app.shared.di.nitoDateFormatterModule
import club.nito.app.shared.di.userMessageStateHolderModule
import club.nito.core.data.di.dataModule
import club.nito.core.datastore.di.dataStoreModule
import club.nito.core.designsystem.theme.NitoTheme
import club.nito.core.domain.di.useCaseModule
import club.nito.core.network.di.remoteDataSourceModule
Expand Down Expand Up @@ -41,6 +42,7 @@ fun NitoApp(
supabaseClientModule,
remoteDataSourceModule,
// fakeRemoteDataSourceModule,
dataStoreModule,
dataModule,
useCaseModule,

Expand Down
1 change: 1 addition & 0 deletions core/common/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ kotlin {
dependencies {
implementation(libs.kotlinxCoroutinesCore)
implementation(libs.kotlinxDatetime)
implementation(libs.kotlinSerializationJson)
}
}
iosMain {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package club.nito.core.common

import kotlinx.serialization.ExperimentalSerializationApi
import kotlinx.serialization.json.Json
import kotlinx.serialization.json.JsonNamingStrategy

public val nitoJsonSettings: Json = Json {
encodeDefaults = true
isLenient = true
allowSpecialFloatingPointValues = true
allowStructuredMapKeys = true
prettyPrint = false
useArrayPolymorphism = false
ignoreUnknownKeys = true
coerceInputValues = true
useAlternativeNames = false

@OptIn(ExperimentalSerializationApi::class)
namingStrategy = JsonNamingStrategy.SnakeCase
}
1 change: 1 addition & 0 deletions core/data/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ kotlin {
implementation(projects.core.common)
implementation(projects.core.model)
implementation(projects.core.database)
implementation(projects.core.datastore)
implementation(projects.core.network)

implementation(libs.kotlinxCoroutinesCore)
Expand Down
31 changes: 31 additions & 0 deletions core/datastore/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
plugins {
id("nito.primitive.kmp")
id("nito.primitive.kmp.android")
id("nito.primitive.kmp.ios")
id("nito.primitive.kmp.js")
id("nito.primitive.detekt")
}

android.namespace = "club.nito.core.datastore"

kotlin {
explicitApi()

sourceSets {
commonMain {
dependencies {
implementation(projects.core.common)
implementation(projects.core.model)

implementation(libs.kotlinxCoroutinesCore)
implementation(libs.kotlinSerializationJson)

implementation(libs.koin)
implementation(libs.kermit)

implementation(libs.multiplatformSettingsNoArg)
implementation(libs.multiplatformSettingsCoroutines)
}
}
}
}
Empty file.
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
package club.nito.core.datastore

public sealed interface DataStore
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package club.nito.core.datastore

import com.russhwolf.settings.ExperimentalSettingsApi
import com.russhwolf.settings.Settings
import com.russhwolf.settings.coroutines.SuspendSettings
import com.russhwolf.settings.coroutines.toSuspendSettings
import kotlinx.serialization.json.Json

public class SettingsDataStore(
private val settings: Settings,
@OptIn(ExperimentalSettingsApi::class)
private val suspendSettings: SuspendSettings = settings.toSuspendSettings(),
private val json: Json,
) : DataStore
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package club.nito.core.datastore

import com.russhwolf.settings.Settings

internal fun createSettings() = try {
Settings()
} catch (e: Exception) {
error("Failed to create default settings")
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package club.nito.core.datastore.di

import club.nito.core.common.nitoJsonSettings
import club.nito.core.datastore.DataStore
import club.nito.core.datastore.SettingsDataStore
import club.nito.core.datastore.createSettings
import com.russhwolf.settings.ExperimentalSettingsApi
import org.koin.core.module.Module
import org.koin.dsl.module

public val dataStoreModule: Module = module {
single<DataStore> {
@OptIn(ExperimentalSettingsApi::class)
SettingsDataStore(
settings = createSettings(),
json = nitoJsonSettings
)
}
}
Empty file.

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,7 @@ import io.github.jan.supabase.gotrue.Auth
import io.github.jan.supabase.postgrest.Postgrest
import io.github.jan.supabase.realtime.Realtime
import io.github.jan.supabase.serializer.KotlinXSerializer
import kotlinx.serialization.ExperimentalSerializationApi
import kotlinx.serialization.json.Json
import kotlinx.serialization.json.JsonNamingStrategy
import kotlinx.serialization.modules.SerializersModule
import kotlinx.serialization.modules.contextual

internal fun createNitoSupabaseClient(
json: Json,
Expand All @@ -24,22 +20,3 @@ internal fun createNitoSupabaseClient(

defaultSerializer = KotlinXSerializer(json)
}

internal fun createNitoKtorJsonSettings(): Json = Json {
encodeDefaults = true
isLenient = true
allowSpecialFloatingPointValues = true
allowStructuredMapKeys = true
prettyPrint = false
useArrayPolymorphism = false
ignoreUnknownKeys = true
coerceInputValues = true
useAlternativeNames = false

@OptIn(ExperimentalSerializationApi::class)
namingStrategy = JsonNamingStrategy.SnakeCase

serializersModule = SerializersModule {
contextual(InstantSerializer)
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package club.nito.core.network.di

import club.nito.core.network.createNitoKtorJsonSettings
import club.nito.core.common.nitoJsonSettings
import club.nito.core.network.createNitoSupabaseClient
import io.github.jan.supabase.SupabaseClient
import io.github.jan.supabase.gotrue.Auth
Expand All @@ -16,7 +16,7 @@ public val supabaseClientModule: Module = module {
)
}
single<Json> {
createNitoKtorJsonSettings()
nitoJsonSettings
}
single<Auth> {
get<SupabaseClient>().auth
Expand Down
3 changes: 3 additions & 0 deletions gradle/libs.versions.toml
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ ktor = "2.3.6"
ksp = "1.9.21-1.0.15"
firebaseBom = "32.2.3"
multiplatformFirebase = "1.10.4"
multiplatformSettings = "1.1.1"
kermit = "2.0.2"
okHttp = "4.12.0"
ossLicensesPlugin = "0.10.6"
Expand Down Expand Up @@ -68,6 +69,8 @@ androidxWindow = { module = "androidx.window:window", version = "1.1.0" }
androidxSplashScreen = { module = "androidx.core:core-splashscreen", version.ref = "androidxSplashScreen" }
javaPoet = { module = "com.squareup:javapoet", version = "1.13.0" }

multiplatformSettingsNoArg = { module = "com.russhwolf:multiplatform-settings-no-arg", version.ref = "multiplatformSettings" }
multiplatformSettingsCoroutines = { module = "com.russhwolf:multiplatform-settings-coroutines", version.ref = "multiplatformSettings" }
kotlinSerializationJson = { module = "org.jetbrains.kotlinx:kotlinx-serialization-json", version.ref = "kotlinxSerialization" }

ktorClientCore = { module = "io.ktor:ktor-client-core", version.ref = "ktor" }
Expand Down
1 change: 1 addition & 0 deletions settings.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ include(
":app:backend",
":core:common",
":core:database",
":core:datastore",
":core:network",
":core:data",
":core:model",
Expand Down

0 comments on commit 1801fe3

Please sign in to comment.