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:
Aditya Wasan 2021-04-02 13:25:43 +05:30 committed by Harsh Shandilya
parent bc9ad69260
commit d86d12f2db
No known key found for this signature in database
GPG key ID: 366D7BBAD1031E80
11 changed files with 103 additions and 26 deletions

8
.idea/artifacts/database_jvm.xml generated Normal file
View 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>

View file

@ -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"))
} }

View file

@ -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),
)
} }
} }

View file

@ -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")
} }

View file

@ -0,0 +1,2 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="dev.msfjarvis.lobsters.database" />

View file

@ -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)
}
}

View file

@ -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()))
}

View file

@ -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

View file

@ -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
}
}

View file

@ -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