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.Moshi.lib)
implementation(Dependencies.ThirdParty.Retrofit.moshi)
implementation(Dependencies.ThirdParty.SQLDelight.androidDriver)
testImplementation(kotlin("test-junit"))
androidTestImplementation(kotlin("test-junit"))
}

View file

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

View file

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

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

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