diff --git a/.idea/artifacts/database_jvm.xml b/.idea/artifacts/database_jvm.xml
new file mode 100644
index 00000000..a32d631c
--- /dev/null
+++ b/.idea/artifacts/database_jvm.xml
@@ -0,0 +1,8 @@
+
+
+ $PROJECT_DIR$/database/build/libs
+
+
+
+
+
\ No newline at end of file
diff --git a/app/build.gradle.kts b/app/build.gradle.kts
index 39eec84b..0d31a976 100644
--- a/app/build.gradle.kts
+++ b/app/build.gradle.kts
@@ -44,7 +44,6 @@ dependencies {
implementation(Dependencies.ThirdParty.accompanistFlow)
implementation(Dependencies.ThirdParty.Moshi.lib)
implementation(Dependencies.ThirdParty.Retrofit.moshi)
- implementation(Dependencies.ThirdParty.SQLDelight.androidDriver)
testImplementation(kotlin("test-junit"))
androidTestImplementation(kotlin("test-junit"))
}
diff --git a/app/src/main/java/dev/msfjarvis/lobsters/injection/DatabaseModule.kt b/app/src/main/java/dev/msfjarvis/lobsters/injection/DatabaseModule.kt
index a960454d..6638523a 100644
--- a/app/src/main/java/dev/msfjarvis/lobsters/injection/DatabaseModule.kt
+++ b/app/src/main/java/dev/msfjarvis/lobsters/injection/DatabaseModule.kt
@@ -1,41 +1,29 @@
package dev.msfjarvis.lobsters.injection
import android.content.Context
-import com.squareup.sqldelight.android.AndroidSqliteDriver
-import com.squareup.sqldelight.db.SqlDriver
import dagger.Module
import dagger.Provides
-import dagger.Reusable
import dagger.hilt.InstallIn
import dagger.hilt.android.qualifiers.ApplicationContext
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.model.TagsAdapter
import javax.inject.Singleton
@Module
@InstallIn(SingletonComponent::class)
object DatabaseModule {
- @Provides
- @Reusable
- fun providesTagsAdapter(): TagsAdapter {
- return TagsAdapter()
- }
-
@Provides
@Singleton
- fun providesSqlDriver(@ApplicationContext context: Context): SqlDriver {
- return AndroidSqliteDriver(LobstersDatabase.Schema, context, "SavedPosts.db")
+ fun providesDriverFactory(@ApplicationContext context: Context): DriverFactory {
+ return DriverFactory(context)
}
@Provides
@Singleton
- fun providesLobstersDatabase(sqlDriver: SqlDriver, tagsAdapter: TagsAdapter): LobstersDatabase {
- return LobstersDatabase(
- sqlDriver,
- SavedPost.Adapter(tagsAdapter),
- )
+ fun providesLobstersDatabase(driverFactory: DriverFactory): LobstersDatabase {
+ return createDatabase(driverFactory)
}
}
diff --git a/database/build.gradle.kts b/database/build.gradle.kts
index daaf6ca9..763013a7 100644
--- a/database/build.gradle.kts
+++ b/database/build.gradle.kts
@@ -1,11 +1,48 @@
plugins {
- kotlin("jvm")
+ kotlin("multiplatform")
+ id("com.android.library")
id("com.squareup.sqldelight")
`lobsters-plugin`
}
-dependencies {
- testImplementation(Dependencies.Kotlin.Coroutines.core)
- testImplementation(Dependencies.ThirdParty.SQLDelight.jvmDriver)
- testImplementation(kotlin("test-junit"))
+// workaround for https://youtrack.jetbrains.com/issue/KT-43944
+android {
+ configurations {
+ 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")
}
diff --git a/database/src/androidMain/AndroidManifest.xml b/database/src/androidMain/AndroidManifest.xml
new file mode 100644
index 00000000..4ee754c1
--- /dev/null
+++ b/database/src/androidMain/AndroidManifest.xml
@@ -0,0 +1,2 @@
+
diff --git a/database/src/androidMain/kotlin/dev/msfjarvis/lobsters/data/local/Database.kt b/database/src/androidMain/kotlin/dev/msfjarvis/lobsters/data/local/Database.kt
new file mode 100644
index 00000000..37209b72
--- /dev/null
+++ b/database/src/androidMain/kotlin/dev/msfjarvis/lobsters/data/local/Database.kt
@@ -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)
+ }
+}
diff --git a/database/src/commonMain/kotlin/dev/msfjarvis/lobsters/data/local/Database.kt b/database/src/commonMain/kotlin/dev/msfjarvis/lobsters/data/local/Database.kt
new file mode 100644
index 00000000..1ab3266e
--- /dev/null
+++ b/database/src/commonMain/kotlin/dev/msfjarvis/lobsters/data/local/Database.kt
@@ -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()))
+}
diff --git a/database/src/main/java/dev/msfjarvis/lobsters/model/TagsAdapter.kt b/database/src/commonMain/kotlin/dev/msfjarvis/lobsters/data/model/TagsAdapter.kt
similarity index 90%
rename from database/src/main/java/dev/msfjarvis/lobsters/model/TagsAdapter.kt
rename to database/src/commonMain/kotlin/dev/msfjarvis/lobsters/data/model/TagsAdapter.kt
index a4a04588..3b8fcb48 100644
--- a/database/src/main/java/dev/msfjarvis/lobsters/model/TagsAdapter.kt
+++ b/database/src/commonMain/kotlin/dev/msfjarvis/lobsters/data/model/TagsAdapter.kt
@@ -1,4 +1,4 @@
-package dev.msfjarvis.lobsters.model
+package dev.msfjarvis.lobsters.data.model
import com.squareup.sqldelight.ColumnAdapter
diff --git a/database/src/main/sqldelight/dev/msfjarvis/lobsters/data/local/SavedPost.sq b/database/src/commonMain/sqldelight/dev/msfjarvis/lobsters/data/local/SavedPost.sq
similarity index 100%
rename from database/src/main/sqldelight/dev/msfjarvis/lobsters/data/local/SavedPost.sq
rename to database/src/commonMain/sqldelight/dev/msfjarvis/lobsters/data/local/SavedPost.sq
diff --git a/database/src/jvmMain/kotlin/dev/msfjarvis/lobsters/data/local/Database.kt b/database/src/jvmMain/kotlin/dev/msfjarvis/lobsters/data/local/Database.kt
new file mode 100644
index 00000000..9883a8a3
--- /dev/null
+++ b/database/src/jvmMain/kotlin/dev/msfjarvis/lobsters/data/local/Database.kt
@@ -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
+ }
+}
diff --git a/database/src/test/java/dev/msfjarvis/lobsters/data/local/SqlDelightQueriesTest.kt b/database/src/jvmTest/kotlin/dev/msfjarvis/lobsters/data/local/SqlDelightQueriesTest.kt
similarity index 98%
rename from database/src/test/java/dev/msfjarvis/lobsters/data/local/SqlDelightQueriesTest.kt
rename to database/src/jvmTest/kotlin/dev/msfjarvis/lobsters/data/local/SqlDelightQueriesTest.kt
index 68bee231..5ca12981 100644
--- a/database/src/test/java/dev/msfjarvis/lobsters/data/local/SqlDelightQueriesTest.kt
+++ b/database/src/jvmTest/kotlin/dev/msfjarvis/lobsters/data/local/SqlDelightQueriesTest.kt
@@ -1,8 +1,8 @@
package dev.msfjarvis.lobsters.data.local
import com.squareup.sqldelight.sqlite.driver.JdbcSqliteDriver
+import dev.msfjarvis.lobsters.data.model.TagsAdapter
import dev.msfjarvis.lobsters.database.LobstersDatabase
-import dev.msfjarvis.lobsters.model.TagsAdapter
import kotlin.test.Test
import kotlin.test.assertEquals
import kotlinx.coroutines.runBlocking