Skip to content

Commit

Permalink
chore: drafting solution
Browse files Browse the repository at this point in the history
  • Loading branch information
yamilmedina committed May 23, 2024
1 parent e2c3559 commit c990590
Show file tree
Hide file tree
Showing 23 changed files with 115 additions and 57 deletions.
2 changes: 1 addition & 1 deletion logic/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -93,7 +93,7 @@ kotlin {
val jvmMain by getting {
addCommonKotlinJvmSourceDir()
dependencies {
// implementation(project(":persistence-pg"))
implementation(project(":persistence-pg"))
implementation(libs.jna)
implementation(libs.coreCryptoJvm)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ import com.wire.kalium.logic.util.SecurityHelperImpl
import com.wire.kalium.network.NetworkStateObserver
import com.wire.kalium.persistence.db.GlobalDatabaseBuilder
import com.wire.kalium.persistence.db.PlatformDatabaseData
import com.wire.kalium.persistence.db.globalDatabaseProvider
import com.wire.kalium.persistence.db.sqliteGlobalDatabaseProvider
import com.wire.kalium.persistence.kmmSettings.GlobalPrefProvider
import com.wire.kalium.util.KaliumDispatcherImpl
import kotlinx.coroutines.cancel
Expand All @@ -54,7 +54,7 @@ actual class CoreLogic(
kaliumConfigs.shouldEncryptData
)

override val globalDatabaseBuilder: GlobalDatabaseBuilder = globalDatabaseProvider(
override val globalDatabaseBuilder: GlobalDatabaseBuilder = sqliteGlobalDatabaseProvider(
platformDatabaseData = PlatformDatabaseData(appContext),
queriesContext = KaliumDispatcherImpl.io,
passphrase = if (kaliumConfigs.shouldEncryptData) {
Expand Down
4 changes: 2 additions & 2 deletions logic/src/appleMain/kotlin/com/wire/kalium/logic/CoreLogic.kt
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ import com.wire.kalium.network.NetworkStateObserver
import com.wire.kalium.persistence.db.GlobalDatabaseBuilder
import com.wire.kalium.persistence.db.PlatformDatabaseData
import com.wire.kalium.persistence.db.StorageData
import com.wire.kalium.persistence.db.globalDatabaseProvider
import com.wire.kalium.persistence.db.sqliteGlobalDatabaseProvider
import com.wire.kalium.persistence.kmmSettings.GlobalPrefProvider
import com.wire.kalium.util.KaliumDispatcherImpl
import kotlinx.coroutines.cancel
Expand All @@ -50,7 +50,7 @@ actual class CoreLogic(
shouldEncryptData = kaliumConfigs.shouldEncryptData
)

override val globalDatabaseBuilder: GlobalDatabaseBuilder = globalDatabaseProvider(
override val globalDatabaseBuilder: GlobalDatabaseBuilder = sqliteGlobalDatabaseProvider(
platformDatabaseData = PlatformDatabaseData(
storageData = if (useInMemoryStorage) {
StorageData.InMemory
Expand Down
27 changes: 9 additions & 18 deletions logic/src/jvmMain/kotlin/com/wire/kalium/logic/CoreLogic.kt
Original file line number Diff line number Diff line change
Expand Up @@ -30,13 +30,10 @@ import com.wire.kalium.logic.sync.GlobalWorkSchedulerImpl
import com.wire.kalium.logic.util.PlatformContext
import com.wire.kalium.network.NetworkStateObserver
import com.wire.kalium.persistence.db.GlobalDatabaseBuilder
import com.wire.kalium.persistence.db.PlatformDatabaseData
import com.wire.kalium.persistence.db.StorageData
import com.wire.kalium.persistence.db.globalDatabaseProvider
import com.wire.kalium.persistence.db.pgGlobalDatabaseProvider
import com.wire.kalium.persistence.db.sqliteGlobalDatabaseProvider
import com.wire.kalium.persistence.kmmSettings.GlobalPrefProvider
import com.wire.kalium.util.KaliumDispatcherImpl
import kotlinx.coroutines.cancel
import java.io.File

/**
* @sample samples.logic.CoreLogicSamples.versionedAuthScope
Expand All @@ -45,7 +42,7 @@ actual class CoreLogic(
rootPath: String,
kaliumConfigs: KaliumConfigs,
userAgent: String,
useInMemoryStorage: Boolean = false,
usePg: Boolean = false,
) : CoreLogicCommon(
rootPath = rootPath, kaliumConfigs = kaliumConfigs, userAgent = userAgent
) {
Expand All @@ -56,17 +53,11 @@ actual class CoreLogic(
shouldEncryptData = kaliumConfigs.shouldEncryptData
)

override val globalDatabaseBuilder: GlobalDatabaseBuilder = globalDatabaseProvider(
platformDatabaseData = PlatformDatabaseData(
storageData = if (useInMemoryStorage) {
StorageData.InMemory
} else {
StorageData.FileBacked(File("$rootPath/global-storage"))
}
),
passphrase = null,
queriesContext = KaliumDispatcherImpl.io
)
override val globalDatabaseBuilder: GlobalDatabaseBuilder = if (usePg) {
pgGlobalDatabaseProvider(sad)
} else {
sqliteGlobalDatabaseProvider()
}

override fun getSessionScope(userId: UserId): UserSessionScope =
userSessionScopeProvider.value.getOrCreate(userId)
Expand All @@ -92,7 +83,7 @@ actual class CoreLogic(
networkStateObserver,
logoutCallbackManager,
userAgent,
useInMemoryStorage
usePg
)
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ fun coreLogic(
encryptProteusStorage = true,
isMLSSupportEnabled = true,
wipeOnDeviceRemoval = true,
), userAgent = "Wire Infinite Monkeys", useInMemoryStorage = true
), userAgent = "Wire Infinite Monkeys", usePg = true
)
coreLogic.updateApiVersionsScheduler.scheduleImmediateApiVersionUpdate()
return coreLogic
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
/*
* Wire
* Copyright (C) 2024 Wire Swiss GmbH
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see http://www.gnu.org/licenses/.
*/
package com.wire.kalium.persistence.db

import com.wire.kalium.persistence.daokaliumdb.AccountsDAO
import com.wire.kalium.persistence.daokaliumdb.ServerConfigurationDAO

interface WireUserDb {
val accountsDAO: AccountsDAO
val serverConfigurationDAO: ServerConfigurationDAO


// db driver
}
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ class GlobalDatabaseBuilder internal constructor(
private val sqlDriver: SqlDriver,
private val platformDatabaseData: PlatformDatabaseData,
private val queriesContext: CoroutineContext = KaliumDispatcherImpl.io
) {
):WireUserDb {

internal val database: GlobalDatabase = GlobalDatabase(
sqlDriver,
Expand All @@ -70,10 +70,10 @@ class GlobalDatabaseBuilder internal constructor(
database.globalDatabasePropertiesQueries.enableForeignKeyContraints()
}

val serverConfigurationDAO: ServerConfigurationDAO
override val serverConfigurationDAO: ServerConfigurationDAO
get() = ServerConfigurationDAOImpl(database.serverConfigurationQueries, queriesContext)

val accountsDAO: AccountsDAO
override val accountsDAO: AccountsDAO
get() = AccountsDAOImpl(database.accountsQueries, database.currentAccountQueries, queriesContext)

fun nuke(): Boolean {
Expand All @@ -94,7 +94,7 @@ expect fun nuke(platformDatabaseData: PlatformDatabaseData): Boolean
*
* @return a new instance of the [GlobalDatabaseBuilder].
*/
expect fun globalDatabaseProvider(
expect fun pgGlobalDatabaseProvider(
platformDatabaseData: PlatformDatabaseData,
queriesContext: CoroutineDispatcher = KaliumDispatcherImpl.io,
passphrase: GlobalDatabaseSecret?,
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
/*
* Wire
* Copyright (C) 2024 Wire Swiss GmbH
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see http://www.gnu.org/licenses/.
*/
package com.wire.kalium.persistence.db

data class DatabaseCoordinates(val port: String, val user: String)
Original file line number Diff line number Diff line change
Expand Up @@ -23,11 +23,10 @@ import com.wire.kalium.persistence.GlobalDatabase
import com.wire.kalium.persistence.util.FileNameUtil
import kotlinx.coroutines.CoroutineDispatcher

actual fun globalDatabaseProvider(
actual fun pgGlobalDatabaseProvider(
platformDatabaseData: PlatformDatabaseData,
queriesContext: CoroutineDispatcher,
passphrase: GlobalDatabaseSecret?,
enableWAL: Boolean,
): GlobalDatabaseBuilder {
val storageData = platformDatabaseData.storageData
if (storageData is StorageData.InMemory) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,16 +20,12 @@ package com.wire.kalium.persistence.db
import app.cash.sqldelight.db.SqlDriver
import app.cash.sqldelight.driver.jdbc.sqlite.JdbcSqliteDriver
import org.sqlite.SQLiteConfig
import java.io.File

actual data class PlatformDatabaseData(
val storageData: StorageData
)

sealed interface StorageData {
data class FileBacked(val file: File) : StorageData
data object InMemory : StorageData
}
data class StorageData(val uri: String, val username: String, val password: String)

fun databaseDriver(uri: String, config: DriverConfigurationBuilder.() -> Unit = {}): SqlDriver {
val driverConfiguration = DriverConfigurationBuilder().apply(config)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ package com.wire.kalium.persistence
import com.wire.kalium.persistence.db.GlobalDatabaseBuilder
import com.wire.kalium.persistence.db.PlatformDatabaseData
import com.wire.kalium.persistence.db.StorageData
import com.wire.kalium.persistence.db.globalDatabaseProvider
import com.wire.kalium.persistence.db.pgGlobalDatabaseProvider
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.test.TestDispatcher
import kotlinx.coroutines.test.UnconfinedTestDispatcher
Expand All @@ -37,7 +37,7 @@ actual abstract class GlobalDBBaseTest {
}

actual fun createDatabase(): GlobalDatabaseBuilder {
return globalDatabaseProvider(
return pgGlobalDatabaseProvider(
platformDatabaseData = PlatformDatabaseData(
StorageData.FileBacked(databaseFile)
),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ import com.wire.kalium.persistence.db.GlobalDatabaseBuilder
import com.wire.kalium.persistence.db.GlobalDatabaseSecret
import com.wire.kalium.persistence.db.PlatformDatabaseData
import com.wire.kalium.persistence.db.UserDatabaseBuilder
import com.wire.kalium.persistence.db.globalDatabaseProvider
import com.wire.kalium.persistence.db.sqliteGlobalDatabaseProvider
import com.wire.kalium.persistence.db.inMemoryDatabase
import com.wire.kalium.persistence.util.FileNameUtil
import kotlinx.coroutines.test.StandardTestDispatcher
Expand All @@ -45,7 +45,7 @@ internal actual fun deleteTestDatabase(userId: UserIDEntity) {
}

internal actual fun createTestGlobalDatabase(): GlobalDatabaseBuilder {
return globalDatabaseProvider(
return sqliteGlobalDatabaseProvider(
platformDatabaseData = PlatformDatabaseData(ApplicationProvider.getApplicationContext()),
passphrase = GlobalDatabaseSecret("test_db_secret".toByteArray()),
enableWAL = true,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ import com.wire.kalium.persistence.db.GlobalDatabaseBuilder
import com.wire.kalium.persistence.db.PlatformDatabaseData
import com.wire.kalium.persistence.db.StorageData
import com.wire.kalium.persistence.db.UserDatabaseBuilder
import com.wire.kalium.persistence.db.globalDatabaseProvider
import com.wire.kalium.persistence.db.sqliteGlobalDatabaseProvider
import com.wire.kalium.persistence.db.inMemoryDatabase
import com.wire.kalium.persistence.util.FileNameUtil
import kotlinx.coroutines.test.StandardTestDispatcher
Expand All @@ -42,7 +42,7 @@ internal actual fun deleteTestDatabase(userId: UserIDEntity) {
}

internal actual fun createTestGlobalDatabase(): GlobalDatabaseBuilder {
return globalDatabaseProvider(
return sqliteGlobalDatabaseProvider(
platformDatabaseData = PlatformDatabaseData(StorageData.FileBacked(getTempDatabaseDirectory())),
passphrase = null,
queriesContext = StandardTestDispatcher()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ import com.wire.kalium.persistence.db.PlatformDatabaseData
import com.wire.kalium.persistence.db.StorageData
import com.wire.kalium.persistence.db.UserDatabaseBuilder
import com.wire.kalium.persistence.db.clearInMemoryDatabase
import com.wire.kalium.persistence.db.globalDatabaseProvider
import com.wire.kalium.persistence.db.sqliteGlobalDatabaseProvider
import com.wire.kalium.persistence.db.inMemoryDatabase
import kotlinx.coroutines.test.StandardTestDispatcher
import kotlinx.coroutines.test.TestDispatcher
Expand All @@ -39,7 +39,7 @@ internal actual fun deleteTestDatabase(userId: UserIDEntity) {
}

internal actual fun createTestGlobalDatabase(): GlobalDatabaseBuilder {
return globalDatabaseProvider(
return sqliteGlobalDatabaseProvider(
platformDatabaseData = PlatformDatabaseData(StorageData.InMemory),
passphrase = null,
queriesContext = StandardTestDispatcher()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ import androidx.test.core.app.ApplicationProvider
import com.wire.kalium.persistence.db.GlobalDatabaseBuilder
import com.wire.kalium.persistence.db.GlobalDatabaseSecret
import com.wire.kalium.persistence.db.PlatformDatabaseData
import com.wire.kalium.persistence.db.globalDatabaseProvider
import com.wire.kalium.persistence.db.sqliteGlobalDatabaseProvider
import com.wire.kalium.persistence.util.FileNameUtil
import com.wire.kalium.util.KaliumDispatcherImpl

Expand All @@ -34,7 +34,7 @@ actual abstract class GlobalDBBaseTest {
context.deleteDatabase(FileNameUtil.globalDBName())
}

actual fun createDatabase(): GlobalDatabaseBuilder = globalDatabaseProvider(
actual fun createDatabase(): GlobalDatabaseBuilder = sqliteGlobalDatabaseProvider(
platformDatabaseData = PlatformDatabaseData(ApplicationProvider.getApplicationContext()),
queriesContext = KaliumDispatcherImpl.unconfined,
passphrase = GlobalDatabaseSecret("test_db_secret".toByteArray()),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ import com.wire.kalium.persistence.GlobalDatabase
import com.wire.kalium.persistence.util.FileNameUtil
import kotlinx.coroutines.CoroutineDispatcher

actual fun globalDatabaseProvider(
actual fun sqliteGlobalDatabaseProvider(
platformDatabaseData: PlatformDatabaseData,
queriesContext: CoroutineDispatcher,
passphrase: GlobalDatabaseSecret?,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ import com.wire.kalium.persistence.util.FileNameUtil
import kotlinx.coroutines.CoroutineDispatcher
import platform.Foundation.NSFileManager

actual fun globalDatabaseProvider(
actual fun sqliteGlobalDatabaseProvider(
platformDatabaseData: PlatformDatabaseData,
queriesContext: CoroutineDispatcher,
passphrase: GlobalDatabaseSecret?,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ import co.touchlab.sqliter.DatabaseFileContext.deleteDatabase
import com.wire.kalium.persistence.db.GlobalDatabaseBuilder
import com.wire.kalium.persistence.db.PlatformDatabaseData
import com.wire.kalium.persistence.db.StorageData
import com.wire.kalium.persistence.db.globalDatabaseProvider
import com.wire.kalium.persistence.db.sqliteGlobalDatabaseProvider
import com.wire.kalium.persistence.util.FileNameUtil
import kotlinx.coroutines.test.StandardTestDispatcher
import platform.Foundation.NSCachesDirectory
Expand All @@ -38,7 +38,7 @@ actual abstract class GlobalDBBaseTest {
}

actual fun createDatabase(): GlobalDatabaseBuilder {
return globalDatabaseProvider(
return sqliteGlobalDatabaseProvider(
PlatformDatabaseData(StorageData.FileBacked(storePath)), StandardTestDispatcher(), null, false
)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ class GlobalDatabaseBuilder internal constructor(
private val sqlDriver: SqlDriver,
private val platformDatabaseData: PlatformDatabaseData,
private val queriesContext: CoroutineContext = KaliumDispatcherImpl.io
) {
) : WireUserDb {

internal val database: GlobalDatabase = GlobalDatabase(
sqlDriver,
Expand All @@ -65,10 +65,10 @@ class GlobalDatabaseBuilder internal constructor(
database.globalDatabasePropertiesQueries.enableForeignKeyContraints()
}

val serverConfigurationDAO: ServerConfigurationDAO
override val serverConfigurationDAO: ServerConfigurationDAO
get() = ServerConfigurationDAOImpl(database.serverConfigurationQueries, queriesContext)

val accountsDAO: AccountsDAO
override val accountsDAO: AccountsDAO
get() = AccountsDAOImpl(database.accountsQueries, database.currentAccountQueries, queriesContext)

fun nuke(): Boolean {
Expand All @@ -89,7 +89,7 @@ expect fun nuke(platformDatabaseData: PlatformDatabaseData): Boolean
*
* @return a new instance of the [GlobalDatabaseBuilder].
*/
expect fun globalDatabaseProvider(
expect fun sqliteGlobalDatabaseProvider(
platformDatabaseData: PlatformDatabaseData,
queriesContext: CoroutineDispatcher = KaliumDispatcherImpl.io,
passphrase: GlobalDatabaseSecret?,
Expand Down
Loading

0 comments on commit c990590

Please sign in to comment.