mirror of
https://github.com/msfjarvis/compose-lobsters
synced 2025-08-17 10:57:02 +05:30
database: convert to multiplatform
Co-authored-by: Harsh Shandilya <me@msfjarvis.dev> Signed-off-by: Aditya Wasan <adityawasan55@gmail.com> Signed-off-by: Harsh Shandilya <me@msfjarvis.dev>
This commit is contained in:
parent
bc9ad69260
commit
d86d12f2db
11 changed files with 103 additions and 26 deletions
8
.idea/artifacts/database_jvm.xml
generated
Normal file
8
.idea/artifacts/database_jvm.xml
generated
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
<component name="ArtifactManager">
|
||||||
|
<artifact type="jar" name="database-jvm">
|
||||||
|
<output-path>$PROJECT_DIR$/database/build/libs</output-path>
|
||||||
|
<root id="archive" name="database-jvm.jar">
|
||||||
|
<element id="module-output" name="database.Claw.database.jvmMain" />
|
||||||
|
</root>
|
||||||
|
</artifact>
|
||||||
|
</component>
|
|
@ -44,7 +44,6 @@ dependencies {
|
||||||
implementation(Dependencies.ThirdParty.accompanistFlow)
|
implementation(Dependencies.ThirdParty.accompanistFlow)
|
||||||
implementation(Dependencies.ThirdParty.Moshi.lib)
|
implementation(Dependencies.ThirdParty.Moshi.lib)
|
||||||
implementation(Dependencies.ThirdParty.Retrofit.moshi)
|
implementation(Dependencies.ThirdParty.Retrofit.moshi)
|
||||||
implementation(Dependencies.ThirdParty.SQLDelight.androidDriver)
|
|
||||||
testImplementation(kotlin("test-junit"))
|
testImplementation(kotlin("test-junit"))
|
||||||
androidTestImplementation(kotlin("test-junit"))
|
androidTestImplementation(kotlin("test-junit"))
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,41 +1,29 @@
|
||||||
package dev.msfjarvis.lobsters.injection
|
package dev.msfjarvis.lobsters.injection
|
||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import com.squareup.sqldelight.android.AndroidSqliteDriver
|
|
||||||
import com.squareup.sqldelight.db.SqlDriver
|
|
||||||
import dagger.Module
|
import dagger.Module
|
||||||
import dagger.Provides
|
import dagger.Provides
|
||||||
import dagger.Reusable
|
|
||||||
import dagger.hilt.InstallIn
|
import dagger.hilt.InstallIn
|
||||||
import dagger.hilt.android.qualifiers.ApplicationContext
|
import dagger.hilt.android.qualifiers.ApplicationContext
|
||||||
import dagger.hilt.components.SingletonComponent
|
import dagger.hilt.components.SingletonComponent
|
||||||
import dev.msfjarvis.lobsters.data.local.SavedPost
|
import dev.msfjarvis.lobsters.data.local.DriverFactory
|
||||||
|
import dev.msfjarvis.lobsters.data.local.createDatabase
|
||||||
import dev.msfjarvis.lobsters.database.LobstersDatabase
|
import dev.msfjarvis.lobsters.database.LobstersDatabase
|
||||||
import dev.msfjarvis.lobsters.model.TagsAdapter
|
|
||||||
import javax.inject.Singleton
|
import javax.inject.Singleton
|
||||||
|
|
||||||
@Module
|
@Module
|
||||||
@InstallIn(SingletonComponent::class)
|
@InstallIn(SingletonComponent::class)
|
||||||
object DatabaseModule {
|
object DatabaseModule {
|
||||||
|
|
||||||
@Provides
|
|
||||||
@Reusable
|
|
||||||
fun providesTagsAdapter(): TagsAdapter {
|
|
||||||
return TagsAdapter()
|
|
||||||
}
|
|
||||||
|
|
||||||
@Provides
|
@Provides
|
||||||
@Singleton
|
@Singleton
|
||||||
fun providesSqlDriver(@ApplicationContext context: Context): SqlDriver {
|
fun providesDriverFactory(@ApplicationContext context: Context): DriverFactory {
|
||||||
return AndroidSqliteDriver(LobstersDatabase.Schema, context, "SavedPosts.db")
|
return DriverFactory(context)
|
||||||
}
|
}
|
||||||
|
|
||||||
@Provides
|
@Provides
|
||||||
@Singleton
|
@Singleton
|
||||||
fun providesLobstersDatabase(sqlDriver: SqlDriver, tagsAdapter: TagsAdapter): LobstersDatabase {
|
fun providesLobstersDatabase(driverFactory: DriverFactory): LobstersDatabase {
|
||||||
return LobstersDatabase(
|
return createDatabase(driverFactory)
|
||||||
sqlDriver,
|
|
||||||
SavedPost.Adapter(tagsAdapter),
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,11 +1,48 @@
|
||||||
plugins {
|
plugins {
|
||||||
kotlin("jvm")
|
kotlin("multiplatform")
|
||||||
|
id("com.android.library")
|
||||||
id("com.squareup.sqldelight")
|
id("com.squareup.sqldelight")
|
||||||
`lobsters-plugin`
|
`lobsters-plugin`
|
||||||
}
|
}
|
||||||
|
|
||||||
dependencies {
|
// workaround for https://youtrack.jetbrains.com/issue/KT-43944
|
||||||
testImplementation(Dependencies.Kotlin.Coroutines.core)
|
android {
|
||||||
testImplementation(Dependencies.ThirdParty.SQLDelight.jvmDriver)
|
configurations {
|
||||||
testImplementation(kotlin("test-junit"))
|
create("androidTestApi")
|
||||||
|
create("androidTestDebugApi")
|
||||||
|
create("androidTestReleaseApi")
|
||||||
|
create("testApi")
|
||||||
|
create("testDebugApi")
|
||||||
|
create("testReleaseApi")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
kotlin {
|
||||||
|
jvm()
|
||||||
|
android()
|
||||||
|
|
||||||
|
sourceSets {
|
||||||
|
val commonMain by getting {
|
||||||
|
}
|
||||||
|
val jvmTest by getting {
|
||||||
|
dependencies {
|
||||||
|
implementation(Dependencies.Kotlin.Coroutines.core)
|
||||||
|
implementation(kotlin("test-junit"))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
val jvmMain by getting {
|
||||||
|
dependencies {
|
||||||
|
implementation(Dependencies.ThirdParty.SQLDelight.jvmDriver)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
val androidMain by getting {
|
||||||
|
dependencies {
|
||||||
|
implementation(Dependencies.ThirdParty.SQLDelight.androidDriver)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
android {
|
||||||
|
sourceSets["main"].manifest.srcFile("src/androidMain/AndroidManifest.xml")
|
||||||
}
|
}
|
||||||
|
|
2
database/src/androidMain/AndroidManifest.xml
Normal file
2
database/src/androidMain/AndroidManifest.xml
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
package="dev.msfjarvis.lobsters.database" />
|
|
@ -0,0 +1,12 @@
|
||||||
|
package dev.msfjarvis.lobsters.data.local
|
||||||
|
|
||||||
|
import android.content.Context
|
||||||
|
import com.squareup.sqldelight.android.AndroidSqliteDriver
|
||||||
|
import com.squareup.sqldelight.db.SqlDriver
|
||||||
|
import dev.msfjarvis.lobsters.database.LobstersDatabase
|
||||||
|
|
||||||
|
actual class DriverFactory(private val context: Context) {
|
||||||
|
actual fun createDriver(): SqlDriver {
|
||||||
|
return AndroidSqliteDriver(LobstersDatabase.Schema, context, LobstersDatabaseName)
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,18 @@
|
||||||
|
package dev.msfjarvis.lobsters.data.local
|
||||||
|
|
||||||
|
import com.squareup.sqldelight.db.SqlDriver
|
||||||
|
import dev.msfjarvis.lobsters.data.model.TagsAdapter
|
||||||
|
import dev.msfjarvis.lobsters.database.LobstersDatabase
|
||||||
|
|
||||||
|
internal const val LobstersDatabaseName = "SavedPosts.db"
|
||||||
|
|
||||||
|
expect class DriverFactory {
|
||||||
|
fun createDriver(): SqlDriver
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun getTagsAdapter() = TagsAdapter()
|
||||||
|
|
||||||
|
fun createDatabase(driverFactory: DriverFactory): LobstersDatabase {
|
||||||
|
val driver = driverFactory.createDriver()
|
||||||
|
return LobstersDatabase(driver, SavedPost.Adapter(getTagsAdapter()))
|
||||||
|
}
|
|
@ -1,4 +1,4 @@
|
||||||
package dev.msfjarvis.lobsters.model
|
package dev.msfjarvis.lobsters.data.model
|
||||||
|
|
||||||
import com.squareup.sqldelight.ColumnAdapter
|
import com.squareup.sqldelight.ColumnAdapter
|
||||||
|
|
|
@ -0,0 +1,13 @@
|
||||||
|
package dev.msfjarvis.lobsters.data.local
|
||||||
|
|
||||||
|
import com.squareup.sqldelight.db.SqlDriver
|
||||||
|
import com.squareup.sqldelight.sqlite.driver.JdbcSqliteDriver
|
||||||
|
import dev.msfjarvis.lobsters.database.LobstersDatabase
|
||||||
|
|
||||||
|
actual class DriverFactory {
|
||||||
|
actual fun createDriver(): SqlDriver {
|
||||||
|
val driver: SqlDriver = JdbcSqliteDriver(JdbcSqliteDriver.IN_MEMORY)
|
||||||
|
LobstersDatabase.Schema.create(driver)
|
||||||
|
return driver
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,8 +1,8 @@
|
||||||
package dev.msfjarvis.lobsters.data.local
|
package dev.msfjarvis.lobsters.data.local
|
||||||
|
|
||||||
import com.squareup.sqldelight.sqlite.driver.JdbcSqliteDriver
|
import com.squareup.sqldelight.sqlite.driver.JdbcSqliteDriver
|
||||||
|
import dev.msfjarvis.lobsters.data.model.TagsAdapter
|
||||||
import dev.msfjarvis.lobsters.database.LobstersDatabase
|
import dev.msfjarvis.lobsters.database.LobstersDatabase
|
||||||
import dev.msfjarvis.lobsters.model.TagsAdapter
|
|
||||||
import kotlin.test.Test
|
import kotlin.test.Test
|
||||||
import kotlin.test.assertEquals
|
import kotlin.test.assertEquals
|
||||||
import kotlinx.coroutines.runBlocking
|
import kotlinx.coroutines.runBlocking
|
Loading…
Add table
Add a link
Reference in a new issue