diff --git a/.gitignore b/.gitignore
index fcc044a3..bb5d661f 100644
--- a/.gitignore
+++ b/.gitignore
@@ -15,3 +15,5 @@ appiOS/Pods/
appiOS/Podfile.lock
*.podspec
*.xcuserstate
+
+notflix.preferences_pb
diff --git a/appiOS/Notflix.xcodeproj/project.pbxproj b/appiOS/Notflix.xcodeproj/project.pbxproj
index fd75189b..afa96c78 100644
--- a/appiOS/Notflix.xcodeproj/project.pbxproj
+++ b/appiOS/Notflix.xcodeproj/project.pbxproj
@@ -148,7 +148,7 @@
isa = PBXNativeTarget;
buildConfigurationList = 1CE0FB2C2A6A8B5100B26932 /* Build configuration list for PBXNativeTarget "Notflix" */;
buildPhases = (
- 1C13F5F92C773DB900B1DA2E /* ShellScript */,
+ 1CD2A8F32C9B405100B07805 /* ShellScript */,
1CE0FB042A6A8B4F00B26932 /* Sources */,
1CE0FB052A6A8B4F00B26932 /* Frameworks */,
1CE0FB062A6A8B4F00B26932 /* Resources */,
@@ -268,7 +268,7 @@
/* End PBXResourcesBuildPhase section */
/* Begin PBXShellScriptBuildPhase section */
- 1C13F5F92C773DB900B1DA2E /* ShellScript */ = {
+ 1CD2A8F32C9B405100B07805 /* ShellScript */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
diff --git a/composeApp/build.gradle.kts b/composeApp/build.gradle.kts
index 22fba723..119e1391 100644
--- a/composeApp/build.gradle.kts
+++ b/composeApp/build.gradle.kts
@@ -7,8 +7,10 @@ plugins {
alias(libs.plugins.kotlinX.serialization.plugin)
alias(libs.plugins.buildKonfig)
alias(libs.plugins.compose)
+
+ alias(libs.plugins.ksp)
+ alias(libs.plugins.room)
alias(libs.plugins.compose.compiler)
- alias(libs.plugins.sqlDelight)
alias(libs.plugins.android.application)
alias(libs.plugins.googleServices.plugin)
@@ -17,6 +19,10 @@ plugins {
alias(libs.plugins.firebase.performance.plugin)
}
+kotlin {
+ jvmToolchain(17)
+}
+
@OptIn(org.jetbrains.kotlin.gradle.ExperimentalKotlinGradlePluginApi::class)
kotlin {
kotlin.applyDefaultHierarchyTemplate()
@@ -30,7 +36,7 @@ kotlin {
).forEach {
it.binaries.framework {
baseName = "shared"
- isStatic = false
+ isStatic = true
}
}
@@ -48,7 +54,7 @@ kotlin {
implementation(libs.bundles.ktor)
- api(libs.koin.core)
+ implementation(libs.koin.core)
implementation(libs.koin.compose)
implementation(libs.koin.composeViewModel)
@@ -56,17 +62,16 @@ kotlin {
implementation(libs.kotlinX.dateTime)
- api(libs.napier)
+ implementation(libs.napier)
implementation(libs.bundles.coil)
implementation(libs.navigation)
- implementation(libs.sqlDelight.coroutine)
-
implementation(libs.datastore.preferences)
- // implementation(libs.material.windowSizeClass)
+ implementation(libs.room.runtime)
+ implementation(libs.sqlite.bundled)
}
commonTest.dependencies {
@@ -78,12 +83,10 @@ kotlin {
androidMain.dependencies {
implementation(libs.ktor.android)
- implementation(libs.sqlDelight.android)
implementation(libs.koin.android)
implementation(libs.koin.androidx.compose)
implementation(libs.androidX.activity)
- // Firebase
implementation(libs.firebase.analytics)
implementation(libs.firebase.crashlytics)
implementation(libs.firebase.performance)
@@ -91,12 +94,10 @@ kotlin {
iosMain.dependencies {
implementation(libs.ktor.darwin)
- implementation(libs.sqlDelight.native)
}
sourceSets["desktopMain"].dependencies {
implementation(libs.ktor.java)
- implementation(libs.sqlDelight.jvm)
implementation(libs.coroutines.swing)
implementation(compose.desktop.currentOs)
}
@@ -184,13 +185,16 @@ buildkonfig {
}
}
-sqldelight {
- databases {
- create("AppDatabase") {
- packageName.set("com.vickbt.shared.data.cache.sqldelight")
- srcDirs.setFrom("src/commonMain/kotlin")
- }
- }
+room {
+ schemaDirectory("$projectDir/schemas")
+}
+
+dependencies {
+ add("kspAndroid", libs.room.compiler)
+ add("kspIosX64", libs.room.compiler)
+ add("kspIosArm64", libs.room.compiler)
+ add("kspIosSimulatorArm64", libs.room.compiler)
+ add("kspDesktop", libs.room.compiler)
}
compose.resources {
diff --git a/composeApp/schemas/com.vickbt.composeApp.data.cache.AppDatabase/1.json b/composeApp/schemas/com.vickbt.composeApp.data.cache.AppDatabase/1.json
new file mode 100644
index 00000000..e375700e
--- /dev/null
+++ b/composeApp/schemas/com.vickbt.composeApp.data.cache.AppDatabase/1.json
@@ -0,0 +1,112 @@
+{
+ "formatVersion": 1,
+ "database": {
+ "version": 1,
+ "identityHash": "b735d958b317149fd8c12c6ffeccf7a6",
+ "entities": [
+ {
+ "tableName": "Favorite Movies",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER NOT NULL, `imdbId` TEXT, `backdropPath` TEXT NOT NULL, `posterPath` TEXT NOT NULL, `originalLanguage` TEXT, `originalTitle` TEXT NOT NULL, `overview` TEXT NOT NULL, `popularity` REAL, `releaseDate` TEXT, `runtime` INTEGER, `status` TEXT, `tagLine` TEXT, `title` TEXT NOT NULL, `voteAverage` REAL, `voteCount` INTEGER, `createdAt` TEXT NOT NULL, PRIMARY KEY(`id`))",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "id",
+ "affinity": "INTEGER",
+ "notNull": true
+ },
+ {
+ "fieldPath": "imdbId",
+ "columnName": "imdbId",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "backdropPath",
+ "columnName": "backdropPath",
+ "affinity": "TEXT",
+ "notNull": true
+ },
+ {
+ "fieldPath": "posterPath",
+ "columnName": "posterPath",
+ "affinity": "TEXT",
+ "notNull": true
+ },
+ {
+ "fieldPath": "originalLanguage",
+ "columnName": "originalLanguage",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "originalTitle",
+ "columnName": "originalTitle",
+ "affinity": "TEXT",
+ "notNull": true
+ },
+ {
+ "fieldPath": "overview",
+ "columnName": "overview",
+ "affinity": "TEXT",
+ "notNull": true
+ },
+ {
+ "fieldPath": "popularity",
+ "columnName": "popularity",
+ "affinity": "REAL"
+ },
+ {
+ "fieldPath": "releaseDate",
+ "columnName": "releaseDate",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "runtime",
+ "columnName": "runtime",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "status",
+ "columnName": "status",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "tagLine",
+ "columnName": "tagLine",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "title",
+ "columnName": "title",
+ "affinity": "TEXT",
+ "notNull": true
+ },
+ {
+ "fieldPath": "voteAverage",
+ "columnName": "voteAverage",
+ "affinity": "REAL"
+ },
+ {
+ "fieldPath": "voteCount",
+ "columnName": "voteCount",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "createdAt",
+ "columnName": "createdAt",
+ "affinity": "TEXT",
+ "notNull": true
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": false,
+ "columnNames": [
+ "id"
+ ]
+ }
+ }
+ ],
+ "setupQueries": [
+ "CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)",
+ "INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, 'b735d958b317149fd8c12c6ffeccf7a6')"
+ ]
+ }
+}
\ No newline at end of file
diff --git a/composeApp/src/androidMain/AndroidManifest.xml b/composeApp/src/androidMain/AndroidManifest.xml
index 8808bbcb..d20391ea 100644
--- a/composeApp/src/androidMain/AndroidManifest.xml
+++ b/composeApp/src/androidMain/AndroidManifest.xml
@@ -5,7 +5,7 @@
diff --git a/composeApp/src/androidMain/kotlin/com/vickbt/shared/NotflixApplication.kt b/composeApp/src/androidMain/kotlin/com/vickbt/composeApp/NotflixApplication.kt
similarity index 72%
rename from composeApp/src/androidMain/kotlin/com/vickbt/shared/NotflixApplication.kt
rename to composeApp/src/androidMain/kotlin/com/vickbt/composeApp/NotflixApplication.kt
index 21dba450..e3000823 100644
--- a/composeApp/src/androidMain/kotlin/com/vickbt/shared/NotflixApplication.kt
+++ b/composeApp/src/androidMain/kotlin/com/vickbt/composeApp/NotflixApplication.kt
@@ -1,8 +1,7 @@
-package com.vickbt.shared
+package com.vickbt.composeApp
import android.app.Application
-import com.vickbt.shared.di.initKoin
-import com.vickbt.shared.utils.ContextUtils
+import com.vickbt.composeApp.di.initKoin
import org.koin.android.ext.koin.androidContext
import org.koin.android.ext.koin.androidLogger
import org.koin.core.logger.Level
@@ -12,8 +11,6 @@ class NotflixApplication : Application() {
override fun onCreate() {
super.onCreate()
- ContextUtils.setContext(context = this)
-
initKoin {
androidLogger(level = Level.NONE)
androidContext(androidContext = this@NotflixApplication)
diff --git a/composeApp/src/androidMain/kotlin/com/vickbt/composeApp/di/Module.android.kt b/composeApp/src/androidMain/kotlin/com/vickbt/composeApp/di/Module.android.kt
new file mode 100644
index 00000000..fe8b5d5d
--- /dev/null
+++ b/composeApp/src/androidMain/kotlin/com/vickbt/composeApp/di/Module.android.kt
@@ -0,0 +1,12 @@
+package com.vickbt.composeApp.di
+
+import com.vickbt.composeApp.utils.DatabaseFactory
+import com.vickbt.composeApp.utils.DatastoreFactory
+import org.koin.core.module.Module
+import org.koin.dsl.module
+
+actual fun platformModule(): Module = module {
+ single { DatastoreFactory(context = get()).createDatastore() }
+
+ single { DatabaseFactory(context = get()).createDatabase() }
+}
diff --git a/composeApp/src/androidMain/kotlin/com/vickbt/shared/ui/activity/MainActivity.kt b/composeApp/src/androidMain/kotlin/com/vickbt/composeApp/ui/activity/MainActivity.kt
similarity index 80%
rename from composeApp/src/androidMain/kotlin/com/vickbt/shared/ui/activity/MainActivity.kt
rename to composeApp/src/androidMain/kotlin/com/vickbt/composeApp/ui/activity/MainActivity.kt
index ee281ca2..6d148591 100644
--- a/composeApp/src/androidMain/kotlin/com/vickbt/shared/ui/activity/MainActivity.kt
+++ b/composeApp/src/androidMain/kotlin/com/vickbt/composeApp/ui/activity/MainActivity.kt
@@ -1,10 +1,10 @@
-package com.vickbt.shared.ui.activity
+package com.vickbt.composeApp.ui.activity
import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.compose.animation.ExperimentalAnimationApi
-import com.vickbt.shared.ui.screens.main.MainScreen
+import com.vickbt.composeApp.ui.screens.main.MainScreen
@ExperimentalAnimationApi
class MainActivity : ComponentActivity() {
diff --git a/composeApp/src/androidMain/kotlin/com/vickbt/shared/utils/ContextUtils.kt b/composeApp/src/androidMain/kotlin/com/vickbt/composeApp/utils/ContextUtils.kt
similarity index 91%
rename from composeApp/src/androidMain/kotlin/com/vickbt/shared/utils/ContextUtils.kt
rename to composeApp/src/androidMain/kotlin/com/vickbt/composeApp/utils/ContextUtils.kt
index c785b307..ca286b9c 100644
--- a/composeApp/src/androidMain/kotlin/com/vickbt/shared/utils/ContextUtils.kt
+++ b/composeApp/src/androidMain/kotlin/com/vickbt/composeApp/utils/ContextUtils.kt
@@ -1,4 +1,4 @@
-package com.vickbt.shared.utils
+package com.vickbt.composeApp.utils
import android.content.Context
diff --git a/composeApp/src/androidMain/kotlin/com/vickbt/composeApp/utils/DatabaseFactory.android.kt b/composeApp/src/androidMain/kotlin/com/vickbt/composeApp/utils/DatabaseFactory.android.kt
new file mode 100644
index 00000000..5fcc2309
--- /dev/null
+++ b/composeApp/src/androidMain/kotlin/com/vickbt/composeApp/utils/DatabaseFactory.android.kt
@@ -0,0 +1,20 @@
+package com.vickbt.composeApp.utils
+
+import android.content.Context
+import androidx.room.Room
+import androidx.sqlite.driver.bundled.BundledSQLiteDriver
+import com.vickbt.composeApp.data.cache.AppDatabase
+import kotlinx.coroutines.Dispatchers
+
+actual class DatabaseFactory(private val context: Context) {
+ actual fun createDatabase(): AppDatabase {
+ val appContext = context.applicationContext
+
+ val dbFile = appContext.getDatabasePath("notflix.db")
+ return Room.databaseBuilder(
+ context = appContext,
+ name = dbFile.absolutePath
+ ).setQueryCoroutineContext(Dispatchers.IO).fallbackToDestructiveMigration(true)
+ .setDriver(BundledSQLiteDriver()).build()
+ }
+}
diff --git a/composeApp/src/androidMain/kotlin/com/vickbt/shared/utils/DatastoreFactory.android.kt b/composeApp/src/androidMain/kotlin/com/vickbt/composeApp/utils/DatastoreFactory.android.kt
similarity index 63%
rename from composeApp/src/androidMain/kotlin/com/vickbt/shared/utils/DatastoreFactory.android.kt
rename to composeApp/src/androidMain/kotlin/com/vickbt/composeApp/utils/DatastoreFactory.android.kt
index 303e49fb..2d2f2a53 100644
--- a/composeApp/src/androidMain/kotlin/com/vickbt/shared/utils/DatastoreFactory.android.kt
+++ b/composeApp/src/androidMain/kotlin/com/vickbt/composeApp/utils/DatastoreFactory.android.kt
@@ -1,14 +1,14 @@
-package com.vickbt.shared.utils
+package com.vickbt.composeApp.utils
import android.content.Context
import androidx.datastore.core.DataStore
import androidx.datastore.preferences.core.Preferences
-import com.vickbt.shared.domain.utils.Constants
+import com.vickbt.composeApp.domain.utils.Constants
actual class DatastoreFactory(private val context: Context) {
actual fun createDatastore(): DataStore {
return initDataStore {
- context.filesDir.resolve(Constants.dataStoreFileName).absolutePath
+ context.filesDir.resolve(Constants.DATASTORE_FILE_NAME).absolutePath
}
}
}
diff --git a/composeApp/src/androidMain/kotlin/com/vickbt/shared/di/Module.kt b/composeApp/src/androidMain/kotlin/com/vickbt/shared/di/Module.kt
deleted file mode 100644
index ff1fbba6..00000000
--- a/composeApp/src/androidMain/kotlin/com/vickbt/shared/di/Module.kt
+++ /dev/null
@@ -1,11 +0,0 @@
-package com.vickbt.shared.di
-
-import com.vickbt.shared.utils.DatabaseDriverFactory
-import com.vickbt.shared.utils.DatastoreFactory
-import org.koin.core.module.Module
-import org.koin.dsl.module
-
-actual fun platformModule(): Module = module {
- single { DatabaseDriverFactory(context = get()) }
- single { DatastoreFactory(context = get()).createDatastore() }
-}
diff --git a/composeApp/src/androidMain/kotlin/com/vickbt/shared/utils/DatabaseDriverFactory.kt b/composeApp/src/androidMain/kotlin/com/vickbt/shared/utils/DatabaseDriverFactory.kt
deleted file mode 100644
index f9735f4f..00000000
--- a/composeApp/src/androidMain/kotlin/com/vickbt/shared/utils/DatabaseDriverFactory.kt
+++ /dev/null
@@ -1,12 +0,0 @@
-package com.vickbt.shared.utils
-
-import android.content.Context
-import app.cash.sqldelight.db.SqlDriver
-import app.cash.sqldelight.driver.android.AndroidSqliteDriver
-import com.vickbt.shared.data.cache.sqldelight.AppDatabase
-
-actual class DatabaseDriverFactory(private val context: Context) {
- actual fun createDriver(): SqlDriver {
- return AndroidSqliteDriver(AppDatabase.Schema, context, "Notflix.db")
- }
-}
diff --git a/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/data/cache/AppDatabase.kt b/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/data/cache/AppDatabase.kt
new file mode 100644
index 00000000..f78e8fb3
--- /dev/null
+++ b/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/data/cache/AppDatabase.kt
@@ -0,0 +1,19 @@
+package com.vickbt.composeApp.data.cache
+
+import androidx.room.ConstructedBy
+import androidx.room.Database
+import androidx.room.RoomDatabase
+import androidx.room.RoomDatabaseConstructor
+import com.vickbt.composeApp.data.cache.daos.FavoriteMovieDao
+import com.vickbt.composeApp.data.cache.entities.MovieDetailsEntity
+
+@Suppress("NO_ACTUAL_FOR_EXPECT")
+expect object AppDatabaseConstructor : RoomDatabaseConstructor {
+ override fun initialize(): AppDatabase
+}
+
+@Database(entities = [MovieDetailsEntity::class], version = 1, exportSchema = true)
+@ConstructedBy(AppDatabaseConstructor::class)
+abstract class AppDatabase : RoomDatabase() {
+ abstract fun favoriteMovieDao(): FavoriteMovieDao
+}
diff --git a/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/data/cache/daos/FavoriteMovieDao.kt b/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/data/cache/daos/FavoriteMovieDao.kt
new file mode 100644
index 00000000..1c249dc6
--- /dev/null
+++ b/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/data/cache/daos/FavoriteMovieDao.kt
@@ -0,0 +1,29 @@
+package com.vickbt.composeApp.data.cache.daos
+
+import androidx.room.Dao
+import androidx.room.Insert
+import androidx.room.Query
+import com.vickbt.composeApp.data.cache.entities.MovieDetailsEntity
+import kotlinx.coroutines.flow.Flow
+
+@Dao
+interface FavoriteMovieDao {
+
+ @Insert
+ suspend fun saveFavoriteMovie(movie: MovieDetailsEntity)
+
+ @Query("SELECT * FROM `Favorite Movies`")
+ fun getAllFavoriteMovies(): Flow>
+
+ @Query("SELECT * FROM `Favorite Movies` WHERE id = :id")
+ suspend fun getFavoriteMovie(id: Int): MovieDetailsEntity
+
+ @Query("DELETE FROM `Favorite Movies` WHERE id = :id")
+ suspend fun deleteFavoriteMovie(id: Int)
+
+ @Query("DELETE FROM `Favorite Movies`")
+ suspend fun deleteAllFavoriteMovies()
+
+ @Query("SELECT COUNT() FROM `Favorite Movies` WHERE id = :id")
+ fun isMovieFavorite(id: Int): Flow
+}
diff --git a/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/data/cache/entities/MovieDetailsEntity.kt b/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/data/cache/entities/MovieDetailsEntity.kt
new file mode 100644
index 00000000..c36e92e2
--- /dev/null
+++ b/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/data/cache/entities/MovieDetailsEntity.kt
@@ -0,0 +1,26 @@
+package com.vickbt.composeApp.data.cache.entities
+
+import androidx.room.Entity
+import androidx.room.PrimaryKey
+import kotlinx.datetime.Clock
+
+@Entity(tableName = "Favorite Movies")
+data class MovieDetailsEntity(
+ @PrimaryKey(autoGenerate = false)
+ val id: Int,
+ val imdbId: String? = null,
+ val backdropPath: String,
+ val posterPath: String,
+ val originalLanguage: String? = null,
+ val originalTitle: String,
+ val overview: String,
+ val popularity: Double? = null,
+ val releaseDate: String? = null,
+ val runtime: Int? = null,
+ val status: String? = null,
+ val tagLine: String? = null,
+ val title: String,
+ val voteAverage: Double? = null,
+ val voteCount: Int? = null,
+ val createdAt: String = Clock.System.now().toEpochMilliseconds().toString()
+)
diff --git a/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/data/datasources/FavoritesRepositoryImpl.kt b/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/data/datasources/FavoritesRepositoryImpl.kt
new file mode 100644
index 00000000..d5c174ea
--- /dev/null
+++ b/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/data/datasources/FavoritesRepositoryImpl.kt
@@ -0,0 +1,19 @@
+package com.vickbt.composeApp.data.datasources
+
+import com.vickbt.composeApp.data.cache.AppDatabase
+import com.vickbt.composeApp.data.mappers.toDomain
+import com.vickbt.composeApp.domain.models.MovieDetails
+import com.vickbt.composeApp.domain.repositories.FavoritesRepository
+import kotlinx.coroutines.flow.Flow
+import kotlinx.coroutines.flow.map
+
+class FavoritesRepositoryImpl(
+ private val appDatabase: AppDatabase
+) : FavoritesRepository {
+
+ override suspend fun getFavouriteMovies(): Flow> {
+ return appDatabase.favoriteMovieDao().getAllFavoriteMovies().map {
+ it.map { movieDetail -> movieDetail.toDomain() }
+ }
+ }
+}
diff --git a/composeApp/src/commonMain/kotlin/com/vickbt/shared/data/datasources/MovieDetailsRepositoryImpl.kt b/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/data/datasources/MovieDetailsRepositoryImpl.kt
similarity index 60%
rename from composeApp/src/commonMain/kotlin/com/vickbt/shared/data/datasources/MovieDetailsRepositoryImpl.kt
rename to composeApp/src/commonMain/kotlin/com/vickbt/composeApp/data/datasources/MovieDetailsRepositoryImpl.kt
index a356f257..e1b69534 100644
--- a/composeApp/src/commonMain/kotlin/com/vickbt/shared/data/datasources/MovieDetailsRepositoryImpl.kt
+++ b/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/data/datasources/MovieDetailsRepositoryImpl.kt
@@ -1,31 +1,32 @@
-package com.vickbt.shared.data.datasources
+package com.vickbt.composeApp.data.datasources
-import com.vickbt.shared.data.cache.sqldelight.daos.FavoriteMovieDao
-import com.vickbt.shared.data.mappers.toDomain
-import com.vickbt.shared.data.network.models.CastDto
-import com.vickbt.shared.data.network.models.MovieDetailsDto
-import com.vickbt.shared.data.network.models.MovieResultsDto
-import com.vickbt.shared.data.network.utils.safeApiCall
-import com.vickbt.shared.domain.models.Cast
-import com.vickbt.shared.domain.models.Movie
-import com.vickbt.shared.domain.models.MovieDetails
-import com.vickbt.shared.domain.repositories.MovieDetailsRepository
-import com.vickbt.shared.utils.ResultState
-import com.vickbt.shared.utils.toBoolean
+import com.vickbt.composeApp.data.cache.AppDatabase
+import com.vickbt.composeApp.data.mappers.toDomain
+import com.vickbt.composeApp.data.mappers.toEntity
+import com.vickbt.composeApp.data.network.models.CastDto
+import com.vickbt.composeApp.data.network.models.MovieDetailsDto
+import com.vickbt.composeApp.data.network.models.MovieResultsDto
+import com.vickbt.composeApp.data.network.utils.safeApiCall
+import com.vickbt.composeApp.domain.models.Cast
+import com.vickbt.composeApp.domain.models.Movie
+import com.vickbt.composeApp.domain.models.MovieDetails
+import com.vickbt.composeApp.domain.repositories.MovieDetailsRepository
+import com.vickbt.composeApp.utils.ResultState
import io.ktor.client.HttpClient
import io.ktor.client.call.body
import io.ktor.client.request.get
import io.ktor.client.request.parameter
import kotlinx.coroutines.flow.Flow
+import kotlinx.coroutines.flow.firstOrNull
import kotlinx.coroutines.flow.flowOf
class MovieDetailsRepositoryImpl(
private val httpClient: HttpClient,
- private val favoriteMovieDao: FavoriteMovieDao
+ private val appDatabase: AppDatabase
) : MovieDetailsRepository {
override suspend fun fetchMovieDetails(movieId: Int): Flow> {
- val isMovieCached = isMovieFavorite(movieId = movieId)
+ val isMovieCached = isMovieFavorite(movieId = movieId).firstOrNull()
return if (isMovieCached == true) {
try {
@@ -71,18 +72,19 @@ class MovieDetailsRepositoryImpl(
}
override suspend fun saveFavoriteMovie(movie: MovieDetails) {
- favoriteMovieDao.saveFavoriteMovie(movie = movie)
+ appDatabase.favoriteMovieDao().saveFavoriteMovie(movie = movie.toEntity())
}
override suspend fun getFavoriteMovie(movieId: Int): MovieDetails {
- return favoriteMovieDao.getFavoriteMovie(movieId = movieId).toDomain()
+ val favMovieDao = appDatabase.favoriteMovieDao()
+ return favMovieDao.getFavoriteMovie(id = movieId).toDomain()
}
override suspend fun deleteFavoriteMovie(movieId: Int) {
- favoriteMovieDao.deleteFavouriteMovie(movieId = movieId)
+ appDatabase.favoriteMovieDao().deleteFavoriteMovie(id = movieId)
}
- override suspend fun isMovieFavorite(movieId: Int): Boolean? {
- return favoriteMovieDao.isMovieFavorite(movieId = movieId)?.toBoolean()
+ override suspend fun isMovieFavorite(movieId: Int): Flow {
+ return appDatabase.favoriteMovieDao().isMovieFavorite(id = movieId)
}
}
diff --git a/composeApp/src/commonMain/kotlin/com/vickbt/shared/data/datasources/MoviesRepositoryImpl.kt b/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/data/datasources/MoviesRepositoryImpl.kt
similarity index 83%
rename from composeApp/src/commonMain/kotlin/com/vickbt/shared/data/datasources/MoviesRepositoryImpl.kt
rename to composeApp/src/commonMain/kotlin/com/vickbt/composeApp/data/datasources/MoviesRepositoryImpl.kt
index aa96bfba..9e3075ad 100644
--- a/composeApp/src/commonMain/kotlin/com/vickbt/shared/data/datasources/MoviesRepositoryImpl.kt
+++ b/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/data/datasources/MoviesRepositoryImpl.kt
@@ -1,11 +1,11 @@
-package com.vickbt.shared.data.datasources
+package com.vickbt.composeApp.data.datasources
-import com.vickbt.shared.data.mappers.toDomain
-import com.vickbt.shared.data.network.models.MovieResultsDto
-import com.vickbt.shared.data.network.utils.safeApiCall
-import com.vickbt.shared.domain.models.Movie
-import com.vickbt.shared.domain.repositories.MoviesRepository
-import com.vickbt.shared.utils.ResultState
+import com.vickbt.composeApp.data.mappers.toDomain
+import com.vickbt.composeApp.data.network.models.MovieResultsDto
+import com.vickbt.composeApp.data.network.utils.safeApiCall
+import com.vickbt.composeApp.domain.models.Movie
+import com.vickbt.composeApp.domain.repositories.MoviesRepository
+import com.vickbt.composeApp.utils.ResultState
import io.ktor.client.HttpClient
import io.ktor.client.call.body
import io.ktor.client.request.get
diff --git a/composeApp/src/commonMain/kotlin/com/vickbt/shared/data/datasources/SearchRepositoryImpl.kt b/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/data/datasources/SearchRepositoryImpl.kt
similarity index 66%
rename from composeApp/src/commonMain/kotlin/com/vickbt/shared/data/datasources/SearchRepositoryImpl.kt
rename to composeApp/src/commonMain/kotlin/com/vickbt/composeApp/data/datasources/SearchRepositoryImpl.kt
index 0f671a2e..cdb06e96 100644
--- a/composeApp/src/commonMain/kotlin/com/vickbt/shared/data/datasources/SearchRepositoryImpl.kt
+++ b/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/data/datasources/SearchRepositoryImpl.kt
@@ -1,11 +1,11 @@
-package com.vickbt.shared.data.datasources
+package com.vickbt.composeApp.data.datasources
-import com.vickbt.shared.data.mappers.toDomain
-import com.vickbt.shared.data.network.models.MovieResultsDto
-import com.vickbt.shared.data.network.utils.safeApiCall
-import com.vickbt.shared.domain.models.Movie
-import com.vickbt.shared.domain.repositories.SearchRepository
-import com.vickbt.shared.utils.ResultState
+import com.vickbt.composeApp.data.mappers.toDomain
+import com.vickbt.composeApp.data.network.models.MovieResultsDto
+import com.vickbt.composeApp.data.network.utils.safeApiCall
+import com.vickbt.composeApp.domain.models.Movie
+import com.vickbt.composeApp.domain.repositories.SearchRepository
+import com.vickbt.composeApp.utils.ResultState
import io.ktor.client.HttpClient
import io.ktor.client.call.body
import io.ktor.client.request.get
diff --git a/composeApp/src/commonMain/kotlin/com/vickbt/shared/data/datasources/SettingsRepositoryImpl.kt b/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/data/datasources/SettingsRepositoryImpl.kt
similarity index 79%
rename from composeApp/src/commonMain/kotlin/com/vickbt/shared/data/datasources/SettingsRepositoryImpl.kt
rename to composeApp/src/commonMain/kotlin/com/vickbt/composeApp/data/datasources/SettingsRepositoryImpl.kt
index ee9afc0b..d339142e 100644
--- a/composeApp/src/commonMain/kotlin/com/vickbt/shared/data/datasources/SettingsRepositoryImpl.kt
+++ b/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/data/datasources/SettingsRepositoryImpl.kt
@@ -1,12 +1,12 @@
-package com.vickbt.shared.data.datasources
+package com.vickbt.composeApp.data.datasources
import androidx.datastore.core.DataStore
import androidx.datastore.preferences.core.Preferences
import androidx.datastore.preferences.core.edit
import androidx.datastore.preferences.core.intPreferencesKey
-import com.vickbt.shared.domain.repositories.SettingsRepository
-import com.vickbt.shared.domain.utils.Constants.KEY_IMAGE_QUALITY
-import com.vickbt.shared.domain.utils.Constants.KEY_THEME
+import com.vickbt.composeApp.domain.repositories.SettingsRepository
+import com.vickbt.composeApp.domain.utils.Constants.KEY_IMAGE_QUALITY
+import com.vickbt.composeApp.domain.utils.Constants.KEY_THEME
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.map
diff --git a/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/data/mappers/DomainToEntity.kt b/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/data/mappers/DomainToEntity.kt
new file mode 100644
index 00000000..b4f27fa7
--- /dev/null
+++ b/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/data/mappers/DomainToEntity.kt
@@ -0,0 +1,28 @@
+package com.vickbt.composeApp.data.mappers
+
+import com.vickbt.composeApp.data.cache.entities.MovieDetailsEntity
+import com.vickbt.composeApp.domain.models.MovieDetails
+import kotlinx.datetime.Clock
+import kotlinx.datetime.TimeZone
+import kotlinx.datetime.toLocalDateTime
+
+fun MovieDetails.toEntity(): MovieDetailsEntity {
+ return MovieDetailsEntity(
+ id = this.id,
+ imdbId = this.imdbId,
+ title = this.title ?: "",
+ posterPath = this.posterPath ?: "",
+ backdropPath = this.backdropPath ?: "",
+ originalLanguage = this.originalLanguage,
+ originalTitle = this.originalTitle ?: "",
+ overview = this.overview ?: "",
+ popularity = this.popularity,
+ releaseDate = this.releaseDate,
+ runtime = this.runtime,
+ status = this.status,
+ tagLine = this.tagline,
+ voteAverage = this.voteAverage,
+ voteCount = this.voteCount,
+ createdAt = Clock.System.now().toLocalDateTime(TimeZone.currentSystemDefault()).toString()
+ )
+}
diff --git a/composeApp/src/commonMain/kotlin/com/vickbt/shared/data/mappers/DtoToDomain.kt b/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/data/mappers/DtoToDomain.kt
similarity index 77%
rename from composeApp/src/commonMain/kotlin/com/vickbt/shared/data/mappers/DtoToDomain.kt
rename to composeApp/src/commonMain/kotlin/com/vickbt/composeApp/data/mappers/DtoToDomain.kt
index 02095236..a21ac7e2 100644
--- a/composeApp/src/commonMain/kotlin/com/vickbt/shared/data/mappers/DtoToDomain.kt
+++ b/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/data/mappers/DtoToDomain.kt
@@ -1,17 +1,17 @@
-package com.vickbt.shared.data.mappers
+package com.vickbt.composeApp.data.mappers
-import com.vickbt.shared.data.network.models.ActorDto
-import com.vickbt.shared.data.network.models.CastDto
-import com.vickbt.shared.data.network.models.ErrorResponseDto
-import com.vickbt.shared.data.network.models.MovieDetailsDto
-import com.vickbt.shared.data.network.models.MovieDto
-import com.vickbt.shared.data.network.models.VideoDto
-import com.vickbt.shared.domain.models.Actor
-import com.vickbt.shared.domain.models.Cast
-import com.vickbt.shared.domain.models.ErrorResponse
-import com.vickbt.shared.domain.models.Movie
-import com.vickbt.shared.domain.models.MovieDetails
-import com.vickbt.shared.domain.models.Video
+import com.vickbt.composeApp.data.network.models.ActorDto
+import com.vickbt.composeApp.data.network.models.CastDto
+import com.vickbt.composeApp.data.network.models.ErrorResponseDto
+import com.vickbt.composeApp.data.network.models.MovieDetailsDto
+import com.vickbt.composeApp.data.network.models.MovieDto
+import com.vickbt.composeApp.data.network.models.VideoDto
+import com.vickbt.composeApp.domain.models.Actor
+import com.vickbt.composeApp.domain.models.Cast
+import com.vickbt.composeApp.domain.models.ErrorResponse
+import com.vickbt.composeApp.domain.models.Movie
+import com.vickbt.composeApp.domain.models.MovieDetails
+import com.vickbt.composeApp.domain.models.Video
fun MovieDto.toDomain(): Movie {
return Movie(
diff --git a/composeApp/src/commonMain/kotlin/com/vickbt/shared/data/mappers/EntityToDomain.kt b/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/data/mappers/EntityToDomain.kt
similarity index 62%
rename from composeApp/src/commonMain/kotlin/com/vickbt/shared/data/mappers/EntityToDomain.kt
rename to composeApp/src/commonMain/kotlin/com/vickbt/composeApp/data/mappers/EntityToDomain.kt
index f1774f55..b5f71362 100644
--- a/composeApp/src/commonMain/kotlin/com/vickbt/shared/data/mappers/EntityToDomain.kt
+++ b/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/data/mappers/EntityToDomain.kt
@@ -1,14 +1,14 @@
-package com.vickbt.shared.data.mappers
+package com.vickbt.composeApp.data.mappers
-import com.vickbt.shared.data.cache.sqldelight.FavoriteMovieEntity
-import com.vickbt.shared.domain.models.MovieDetails
+import com.vickbt.composeApp.data.cache.entities.MovieDetailsEntity
+import com.vickbt.composeApp.domain.models.MovieDetails
-fun FavoriteMovieEntity.toDomain(): MovieDetails {
+fun MovieDetailsEntity.toDomain(): MovieDetails {
return MovieDetails(
adult = null,
backdropPath = this.backdropPath,
homepage = null,
- id = this.id.toInt(),
+ id = this.id,
imdbId = this.imdbId,
originalLanguage = this.originalLanguage,
originalTitle = this.originalTitle,
@@ -16,12 +16,12 @@ fun FavoriteMovieEntity.toDomain(): MovieDetails {
popularity = this.popularity,
posterPath = this.posterPath,
releaseDate = this.releaseDate,
- runtime = this.runTime?.toInt(),
+ runtime = this.runtime,
status = this.status,
tagline = this.tagLine,
title = this.title,
video = null,
voteAverage = this.voteAverage,
- voteCount = this.voteCount?.toInt()
+ voteCount = this.voteCount
)
}
diff --git a/composeApp/src/commonMain/kotlin/com/vickbt/shared/data/network/models/ActorDto.kt b/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/data/network/models/ActorDto.kt
similarity index 91%
rename from composeApp/src/commonMain/kotlin/com/vickbt/shared/data/network/models/ActorDto.kt
rename to composeApp/src/commonMain/kotlin/com/vickbt/composeApp/data/network/models/ActorDto.kt
index 436efbed..8becd8aa 100644
--- a/composeApp/src/commonMain/kotlin/com/vickbt/shared/data/network/models/ActorDto.kt
+++ b/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/data/network/models/ActorDto.kt
@@ -1,4 +1,4 @@
-package com.vickbt.shared.data.network.models
+package com.vickbt.composeApp.data.network.models
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable
diff --git a/composeApp/src/commonMain/kotlin/com/vickbt/shared/data/network/models/ApiError.kt b/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/data/network/models/ApiError.kt
similarity index 85%
rename from composeApp/src/commonMain/kotlin/com/vickbt/shared/data/network/models/ApiError.kt
rename to composeApp/src/commonMain/kotlin/com/vickbt/composeApp/data/network/models/ApiError.kt
index 86512362..05ccb8bf 100644
--- a/composeApp/src/commonMain/kotlin/com/vickbt/shared/data/network/models/ApiError.kt
+++ b/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/data/network/models/ApiError.kt
@@ -1,4 +1,4 @@
-package com.vickbt.shared.data.network.models
+package com.vickbt.composeApp.data.network.models
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable
diff --git a/composeApp/src/commonMain/kotlin/com/vickbt/shared/data/network/models/CastDto.kt b/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/data/network/models/CastDto.kt
similarity index 81%
rename from composeApp/src/commonMain/kotlin/com/vickbt/shared/data/network/models/CastDto.kt
rename to composeApp/src/commonMain/kotlin/com/vickbt/composeApp/data/network/models/CastDto.kt
index a6192fe8..fff362e4 100644
--- a/composeApp/src/commonMain/kotlin/com/vickbt/shared/data/network/models/CastDto.kt
+++ b/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/data/network/models/CastDto.kt
@@ -1,4 +1,4 @@
-package com.vickbt.shared.data.network.models
+package com.vickbt.composeApp.data.network.models
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable
diff --git a/composeApp/src/commonMain/kotlin/com/vickbt/shared/data/network/models/DatesDto.kt b/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/data/network/models/DatesDto.kt
similarity index 82%
rename from composeApp/src/commonMain/kotlin/com/vickbt/shared/data/network/models/DatesDto.kt
rename to composeApp/src/commonMain/kotlin/com/vickbt/composeApp/data/network/models/DatesDto.kt
index 12df74db..fbb17b5f 100644
--- a/composeApp/src/commonMain/kotlin/com/vickbt/shared/data/network/models/DatesDto.kt
+++ b/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/data/network/models/DatesDto.kt
@@ -1,4 +1,4 @@
-package com.vickbt.shared.data.network.models
+package com.vickbt.composeApp.data.network.models
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable
diff --git a/composeApp/src/commonMain/kotlin/com/vickbt/shared/data/network/models/ErrorResponseDto.kt b/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/data/network/models/ErrorResponseDto.kt
similarity index 85%
rename from composeApp/src/commonMain/kotlin/com/vickbt/shared/data/network/models/ErrorResponseDto.kt
rename to composeApp/src/commonMain/kotlin/com/vickbt/composeApp/data/network/models/ErrorResponseDto.kt
index db5713c7..c93893b7 100644
--- a/composeApp/src/commonMain/kotlin/com/vickbt/shared/data/network/models/ErrorResponseDto.kt
+++ b/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/data/network/models/ErrorResponseDto.kt
@@ -1,4 +1,4 @@
-package com.vickbt.shared.data.network.models
+package com.vickbt.composeApp.data.network.models
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable
diff --git a/composeApp/src/commonMain/kotlin/com/vickbt/shared/data/network/models/GenreDto.kt b/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/data/network/models/GenreDto.kt
similarity index 81%
rename from composeApp/src/commonMain/kotlin/com/vickbt/shared/data/network/models/GenreDto.kt
rename to composeApp/src/commonMain/kotlin/com/vickbt/composeApp/data/network/models/GenreDto.kt
index 28fde62a..691b02bc 100644
--- a/composeApp/src/commonMain/kotlin/com/vickbt/shared/data/network/models/GenreDto.kt
+++ b/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/data/network/models/GenreDto.kt
@@ -1,4 +1,4 @@
-package com.vickbt.shared.data.network.models
+package com.vickbt.composeApp.data.network.models
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable
diff --git a/composeApp/src/commonMain/kotlin/com/vickbt/shared/data/network/models/MovieDetailsDto.kt b/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/data/network/models/MovieDetailsDto.kt
similarity index 84%
rename from composeApp/src/commonMain/kotlin/com/vickbt/shared/data/network/models/MovieDetailsDto.kt
rename to composeApp/src/commonMain/kotlin/com/vickbt/composeApp/data/network/models/MovieDetailsDto.kt
index 30763330..012f9075 100644
--- a/composeApp/src/commonMain/kotlin/com/vickbt/shared/data/network/models/MovieDetailsDto.kt
+++ b/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/data/network/models/MovieDetailsDto.kt
@@ -1,4 +1,4 @@
-package com.vickbt.shared.data.network.models
+package com.vickbt.composeApp.data.network.models
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable
@@ -10,7 +10,7 @@ data class MovieDetailsDto(
val adult: Boolean? = null,
@SerialName("backdrop_path")
- val backdropPath: String? = null,
+ val backdropPath: String,
@SerialName("genres")
val genres: List? = null,
@@ -28,16 +28,16 @@ data class MovieDetailsDto(
val originalLanguage: String? = null,
@SerialName("original_title")
- val originalTitle: String? = null,
+ val originalTitle: String,
@SerialName("overview")
- val overview: String? = null,
+ val overview: String,
@SerialName("popularity")
val popularity: Double? = null,
@SerialName("poster_path")
- val posterPath: String? = null,
+ val posterPath: String,
@SerialName("release_date")
val releaseDate: String? = null,
@@ -55,7 +55,7 @@ data class MovieDetailsDto(
val tagline: String? = null,
@SerialName("title")
- val title: String? = null,
+ val title: String,
@SerialName("video")
val video: Boolean? = null,
diff --git a/composeApp/src/commonMain/kotlin/com/vickbt/shared/data/network/models/MovieDto.kt b/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/data/network/models/MovieDto.kt
similarity index 80%
rename from composeApp/src/commonMain/kotlin/com/vickbt/shared/data/network/models/MovieDto.kt
rename to composeApp/src/commonMain/kotlin/com/vickbt/composeApp/data/network/models/MovieDto.kt
index c828f465..5bc90ae2 100644
--- a/composeApp/src/commonMain/kotlin/com/vickbt/shared/data/network/models/MovieDto.kt
+++ b/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/data/network/models/MovieDto.kt
@@ -1,4 +1,4 @@
-package com.vickbt.shared.data.network.models
+package com.vickbt.composeApp.data.network.models
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable
@@ -9,7 +9,7 @@ data class MovieDto(
val adult: Boolean? = null,
@SerialName("backdrop_path")
- val backdropPath: String? = null,
+ val backdropPath: String,
@SerialName("genre_ids")
val genreIds: List? = null,
@@ -21,22 +21,22 @@ data class MovieDto(
val originalLanguage: String? = null,
@SerialName("original_title")
- val originalTitle: String? = null,
+ val originalTitle: String,
@SerialName("overview")
- val overview: String? = null,
+ val overview: String,
@SerialName("popularity")
val popularity: Double? = null,
@SerialName("poster_path")
- val posterPath: String? = null,
+ val posterPath: String,
@SerialName("release_date")
val releaseDate: String? = null,
@SerialName("title")
- val title: String? = null,
+ val title: String,
@SerialName("video")
val video: Boolean? = null,
diff --git a/composeApp/src/commonMain/kotlin/com/vickbt/shared/data/network/models/MovieResultsDto.kt b/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/data/network/models/MovieResultsDto.kt
similarity index 88%
rename from composeApp/src/commonMain/kotlin/com/vickbt/shared/data/network/models/MovieResultsDto.kt
rename to composeApp/src/commonMain/kotlin/com/vickbt/composeApp/data/network/models/MovieResultsDto.kt
index f6fed87a..aae04c00 100644
--- a/composeApp/src/commonMain/kotlin/com/vickbt/shared/data/network/models/MovieResultsDto.kt
+++ b/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/data/network/models/MovieResultsDto.kt
@@ -1,4 +1,4 @@
-package com.vickbt.shared.data.network.models
+package com.vickbt.composeApp.data.network.models
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable
diff --git a/composeApp/src/commonMain/kotlin/com/vickbt/shared/data/network/models/MovieVideoDto.kt b/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/data/network/models/MovieVideoDto.kt
similarity index 82%
rename from composeApp/src/commonMain/kotlin/com/vickbt/shared/data/network/models/MovieVideoDto.kt
rename to composeApp/src/commonMain/kotlin/com/vickbt/composeApp/data/network/models/MovieVideoDto.kt
index 908655f8..c3c10868 100644
--- a/composeApp/src/commonMain/kotlin/com/vickbt/shared/data/network/models/MovieVideoDto.kt
+++ b/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/data/network/models/MovieVideoDto.kt
@@ -1,4 +1,4 @@
-package com.vickbt.shared.data.network.models
+package com.vickbt.composeApp.data.network.models
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable
diff --git a/composeApp/src/commonMain/kotlin/com/vickbt/shared/data/network/models/SpokenLanguageDto.kt b/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/data/network/models/SpokenLanguageDto.kt
similarity index 86%
rename from composeApp/src/commonMain/kotlin/com/vickbt/shared/data/network/models/SpokenLanguageDto.kt
rename to composeApp/src/commonMain/kotlin/com/vickbt/composeApp/data/network/models/SpokenLanguageDto.kt
index 22046062..b8fa13f9 100644
--- a/composeApp/src/commonMain/kotlin/com/vickbt/shared/data/network/models/SpokenLanguageDto.kt
+++ b/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/data/network/models/SpokenLanguageDto.kt
@@ -1,4 +1,4 @@
-package com.vickbt.shared.data.network.models
+package com.vickbt.composeApp.data.network.models
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable
diff --git a/composeApp/src/commonMain/kotlin/com/vickbt/shared/data/network/models/VideoDto.kt b/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/data/network/models/VideoDto.kt
similarity index 93%
rename from composeApp/src/commonMain/kotlin/com/vickbt/shared/data/network/models/VideoDto.kt
rename to composeApp/src/commonMain/kotlin/com/vickbt/composeApp/data/network/models/VideoDto.kt
index 4e6a1213..63649dda 100644
--- a/composeApp/src/commonMain/kotlin/com/vickbt/shared/data/network/models/VideoDto.kt
+++ b/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/data/network/models/VideoDto.kt
@@ -1,4 +1,4 @@
-package com.vickbt.shared.data.network.models
+package com.vickbt.composeApp.data.network.models
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable
diff --git a/composeApp/src/commonMain/kotlin/com/vickbt/shared/data/network/utils/SafeApiCall.kt b/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/data/network/utils/SafeApiCall.kt
similarity index 85%
rename from composeApp/src/commonMain/kotlin/com/vickbt/shared/data/network/utils/SafeApiCall.kt
rename to composeApp/src/commonMain/kotlin/com/vickbt/composeApp/data/network/utils/SafeApiCall.kt
index 819c727f..3971640a 100644
--- a/composeApp/src/commonMain/kotlin/com/vickbt/shared/data/network/utils/SafeApiCall.kt
+++ b/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/data/network/utils/SafeApiCall.kt
@@ -1,9 +1,9 @@
-package com.vickbt.shared.data.network.utils
+package com.vickbt.composeApp.data.network.utils
-import com.vickbt.shared.data.mappers.toDomain
-import com.vickbt.shared.data.network.models.ErrorResponseDto
-import com.vickbt.shared.domain.models.ErrorResponse
-import com.vickbt.shared.utils.ResultState
+import com.vickbt.composeApp.data.mappers.toDomain
+import com.vickbt.composeApp.data.network.models.ErrorResponseDto
+import com.vickbt.composeApp.domain.models.ErrorResponse
+import com.vickbt.composeApp.utils.ResultState
import io.ktor.client.call.body
import io.ktor.client.plugins.ClientRequestException
import io.ktor.client.plugins.RedirectResponseException
diff --git a/composeApp/src/commonMain/kotlin/com/vickbt/shared/di/CommonModule.kt b/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/di/CommonModule.kt
similarity index 63%
rename from composeApp/src/commonMain/kotlin/com/vickbt/shared/di/CommonModule.kt
rename to composeApp/src/commonMain/kotlin/com/vickbt/composeApp/di/CommonModule.kt
index e6a843d1..7b8e517b 100644
--- a/composeApp/src/commonMain/kotlin/com/vickbt/shared/di/CommonModule.kt
+++ b/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/di/CommonModule.kt
@@ -1,25 +1,24 @@
-package com.vickbt.shared.di
+package com.vickbt.composeApp.di
+import com.vickbt.composeApp.data.datasources.FavoritesRepositoryImpl
+import com.vickbt.composeApp.data.datasources.MovieDetailsRepositoryImpl
+import com.vickbt.composeApp.data.datasources.MoviesRepositoryImpl
+import com.vickbt.composeApp.data.datasources.SearchRepositoryImpl
+import com.vickbt.composeApp.data.datasources.SettingsRepositoryImpl
+import com.vickbt.composeApp.domain.repositories.FavoritesRepository
+import com.vickbt.composeApp.domain.repositories.MovieDetailsRepository
+import com.vickbt.composeApp.domain.repositories.MoviesRepository
+import com.vickbt.composeApp.domain.repositories.SearchRepository
+import com.vickbt.composeApp.domain.repositories.SettingsRepository
+import com.vickbt.composeApp.domain.utils.Constants.BASE_URL
+import com.vickbt.composeApp.domain.utils.Constants.URL_PATH
+import com.vickbt.composeApp.ui.screens.details.DetailsViewModel
+import com.vickbt.composeApp.ui.screens.favorites.FavoritesViewModel
+import com.vickbt.composeApp.ui.screens.home.HomeViewModel
+import com.vickbt.composeApp.ui.screens.main.MainViewModel
+import com.vickbt.composeApp.ui.screens.search.SearchViewModel
+import com.vickbt.composeApp.ui.screens.settings.SettingsViewModel
import com.vickbt.shared.BuildKonfig
-import com.vickbt.shared.data.cache.sqldelight.daos.FavoriteMovieDao
-import com.vickbt.shared.data.datasources.FavoritesRepositoryImpl
-import com.vickbt.shared.data.datasources.MovieDetailsRepositoryImpl
-import com.vickbt.shared.data.datasources.MoviesRepositoryImpl
-import com.vickbt.shared.data.datasources.SearchRepositoryImpl
-import com.vickbt.shared.data.datasources.SettingsRepositoryImpl
-import com.vickbt.shared.domain.repositories.FavoritesRepository
-import com.vickbt.shared.domain.repositories.MovieDetailsRepository
-import com.vickbt.shared.domain.repositories.MoviesRepository
-import com.vickbt.shared.domain.repositories.SearchRepository
-import com.vickbt.shared.domain.repositories.SettingsRepository
-import com.vickbt.shared.domain.utils.Constants.BASE_URL
-import com.vickbt.shared.domain.utils.Constants.URL_PATH
-import com.vickbt.shared.ui.screens.details.DetailsViewModel
-import com.vickbt.shared.ui.screens.favorites.FavoritesViewModel
-import com.vickbt.shared.ui.screens.home.HomeViewModel
-import com.vickbt.shared.ui.screens.main.MainViewModel
-import com.vickbt.shared.ui.screens.search.SearchViewModel
-import com.vickbt.shared.ui.screens.settings.SettingsViewModel
import io.github.aakira.napier.DebugAntilog
import io.github.aakira.napier.Napier
import io.ktor.client.HttpClient
@@ -80,13 +79,11 @@ fun commonModule(enableNetworkLogs: Boolean) = module {
}
}
- single { FavoriteMovieDao(databaseDriverFactory = get()) }
-
single { MoviesRepositoryImpl(httpClient = get()) }
single {
- MovieDetailsRepositoryImpl(httpClient = get(), favoriteMovieDao = get())
+ MovieDetailsRepositoryImpl(httpClient = get(), appDatabase = get())
}
- single { FavoritesRepositoryImpl(favoriteMovieDao = get()) }
+ single { FavoritesRepositoryImpl(appDatabase = get()) }
single { SearchRepositoryImpl(httpClient = get()) }
single { SettingsRepositoryImpl(dataStore = get()) }
diff --git a/composeApp/src/commonMain/kotlin/com/vickbt/shared/di/Koin.kt b/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/di/Koin.kt
similarity index 93%
rename from composeApp/src/commonMain/kotlin/com/vickbt/shared/di/Koin.kt
rename to composeApp/src/commonMain/kotlin/com/vickbt/composeApp/di/Koin.kt
index b1224854..281eca0e 100644
--- a/composeApp/src/commonMain/kotlin/com/vickbt/shared/di/Koin.kt
+++ b/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/di/Koin.kt
@@ -1,4 +1,4 @@
-package com.vickbt.shared.di
+package com.vickbt.composeApp.di
import org.koin.core.KoinApplication
import org.koin.core.context.startKoin
diff --git a/composeApp/src/commonMain/kotlin/com/vickbt/shared/domain/models/Actor.kt b/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/domain/models/Actor.kt
similarity index 82%
rename from composeApp/src/commonMain/kotlin/com/vickbt/shared/domain/models/Actor.kt
rename to composeApp/src/commonMain/kotlin/com/vickbt/composeApp/domain/models/Actor.kt
index 8cec87ee..f659672d 100644
--- a/composeApp/src/commonMain/kotlin/com/vickbt/shared/domain/models/Actor.kt
+++ b/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/domain/models/Actor.kt
@@ -1,4 +1,4 @@
-package com.vickbt.shared.domain.models
+package com.vickbt.composeApp.domain.models
data class Actor(
diff --git a/composeApp/src/commonMain/kotlin/com/vickbt/shared/domain/models/Cast.kt b/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/domain/models/Cast.kt
similarity index 62%
rename from composeApp/src/commonMain/kotlin/com/vickbt/shared/domain/models/Cast.kt
rename to composeApp/src/commonMain/kotlin/com/vickbt/composeApp/domain/models/Cast.kt
index 2920bf53..4cf0760c 100644
--- a/composeApp/src/commonMain/kotlin/com/vickbt/shared/domain/models/Cast.kt
+++ b/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/domain/models/Cast.kt
@@ -1,4 +1,4 @@
-package com.vickbt.shared.domain.models
+package com.vickbt.composeApp.domain.models
data class Cast(
diff --git a/composeApp/src/commonMain/kotlin/com/vickbt/shared/domain/models/Dates.kt b/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/domain/models/Dates.kt
similarity index 62%
rename from composeApp/src/commonMain/kotlin/com/vickbt/shared/domain/models/Dates.kt
rename to composeApp/src/commonMain/kotlin/com/vickbt/composeApp/domain/models/Dates.kt
index 816b54c4..0ed7123b 100644
--- a/composeApp/src/commonMain/kotlin/com/vickbt/shared/domain/models/Dates.kt
+++ b/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/domain/models/Dates.kt
@@ -1,4 +1,4 @@
-package com.vickbt.shared.domain.models
+package com.vickbt.composeApp.domain.models
data class Dates(
val maximum: String?,
diff --git a/composeApp/src/commonMain/kotlin/com/vickbt/shared/domain/models/ErrorResponse.kt b/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/domain/models/ErrorResponse.kt
similarity index 73%
rename from composeApp/src/commonMain/kotlin/com/vickbt/shared/domain/models/ErrorResponse.kt
rename to composeApp/src/commonMain/kotlin/com/vickbt/composeApp/domain/models/ErrorResponse.kt
index dbf02b63..34140670 100644
--- a/composeApp/src/commonMain/kotlin/com/vickbt/shared/domain/models/ErrorResponse.kt
+++ b/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/domain/models/ErrorResponse.kt
@@ -1,4 +1,4 @@
-package com.vickbt.shared.domain.models
+package com.vickbt.composeApp.domain.models
data class ErrorResponse(
val success: Boolean,
diff --git a/composeApp/src/commonMain/kotlin/com/vickbt/shared/domain/models/Genre.kt b/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/domain/models/Genre.kt
similarity index 63%
rename from composeApp/src/commonMain/kotlin/com/vickbt/shared/domain/models/Genre.kt
rename to composeApp/src/commonMain/kotlin/com/vickbt/composeApp/domain/models/Genre.kt
index 5b4bbbc8..81dac66a 100644
--- a/composeApp/src/commonMain/kotlin/com/vickbt/shared/domain/models/Genre.kt
+++ b/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/domain/models/Genre.kt
@@ -1,4 +1,4 @@
-package com.vickbt.shared.domain.models
+package com.vickbt.composeApp.domain.models
data class Genre(
diff --git a/composeApp/src/commonMain/kotlin/com/vickbt/shared/domain/models/Movie.kt b/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/domain/models/Movie.kt
similarity index 63%
rename from composeApp/src/commonMain/kotlin/com/vickbt/shared/domain/models/Movie.kt
rename to composeApp/src/commonMain/kotlin/com/vickbt/composeApp/domain/models/Movie.kt
index f25be479..85b4f1aa 100644
--- a/composeApp/src/commonMain/kotlin/com/vickbt/shared/domain/models/Movie.kt
+++ b/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/domain/models/Movie.kt
@@ -1,25 +1,25 @@
-package com.vickbt.shared.domain.models
+package com.vickbt.composeApp.domain.models
data class Movie(
val adult: Boolean? = null,
- val backdropPath: String? = null,
+ val backdropPath: String,
- val id: Int? = null,
+ val id: Int,
val originalLanguage: String? = null,
- val originalTitle: String? = null,
+ val originalTitle: String,
- val overview: String? = null,
+ val overview: String,
val popularity: Double? = null,
- val posterPath: String? = null,
+ val posterPath: String,
val releaseDate: String? = null,
- val title: String? = null,
+ val title: String,
val video: Boolean? = null,
diff --git a/composeApp/src/commonMain/kotlin/com/vickbt/shared/domain/models/MovieDetails.kt b/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/domain/models/MovieDetails.kt
similarity index 68%
rename from composeApp/src/commonMain/kotlin/com/vickbt/shared/domain/models/MovieDetails.kt
rename to composeApp/src/commonMain/kotlin/com/vickbt/composeApp/domain/models/MovieDetails.kt
index f410d5f0..416f2562 100644
--- a/composeApp/src/commonMain/kotlin/com/vickbt/shared/domain/models/MovieDetails.kt
+++ b/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/domain/models/MovieDetails.kt
@@ -1,10 +1,10 @@
-package com.vickbt.shared.domain.models
+package com.vickbt.composeApp.domain.models
data class MovieDetails(
val adult: Boolean? = null,
- val backdropPath: String? = null,
+ val backdropPath: String,
val homepage: String? = null,
@@ -14,13 +14,13 @@ data class MovieDetails(
val originalLanguage: String? = null,
- val originalTitle: String? = null,
+ val originalTitle: String,
- val overview: String? = null,
+ val overview: String,
val popularity: Double? = null,
- val posterPath: String? = null,
+ val posterPath: String,
val releaseDate: String? = null,
@@ -30,7 +30,7 @@ data class MovieDetails(
val tagline: String? = null,
- val title: String? = null,
+ val title: String,
val video: Boolean? = null,
diff --git a/composeApp/src/commonMain/kotlin/com/vickbt/shared/domain/models/MovieResults.kt b/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/domain/models/MovieResults.kt
similarity index 78%
rename from composeApp/src/commonMain/kotlin/com/vickbt/shared/domain/models/MovieResults.kt
rename to composeApp/src/commonMain/kotlin/com/vickbt/composeApp/domain/models/MovieResults.kt
index ea2cbdf4..4c3eac16 100644
--- a/composeApp/src/commonMain/kotlin/com/vickbt/shared/domain/models/MovieResults.kt
+++ b/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/domain/models/MovieResults.kt
@@ -1,4 +1,4 @@
-package com.vickbt.shared.domain.models
+package com.vickbt.composeApp.domain.models
data class MovieResults(
diff --git a/composeApp/src/commonMain/kotlin/com/vickbt/shared/domain/models/MovieVideo.kt b/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/domain/models/MovieVideo.kt
similarity index 66%
rename from composeApp/src/commonMain/kotlin/com/vickbt/shared/domain/models/MovieVideo.kt
rename to composeApp/src/commonMain/kotlin/com/vickbt/composeApp/domain/models/MovieVideo.kt
index 04bbd8cb..97c8610c 100644
--- a/composeApp/src/commonMain/kotlin/com/vickbt/shared/domain/models/MovieVideo.kt
+++ b/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/domain/models/MovieVideo.kt
@@ -1,4 +1,4 @@
-package com.vickbt.shared.domain.models
+package com.vickbt.composeApp.domain.models
data class MovieVideo(
val id: Int? = null,
diff --git a/composeApp/src/commonMain/kotlin/com/vickbt/shared/domain/models/PopularMovies.kt b/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/domain/models/PopularMovies.kt
similarity index 78%
rename from composeApp/src/commonMain/kotlin/com/vickbt/shared/domain/models/PopularMovies.kt
rename to composeApp/src/commonMain/kotlin/com/vickbt/composeApp/domain/models/PopularMovies.kt
index 7766a1ac..12dc8d66 100644
--- a/composeApp/src/commonMain/kotlin/com/vickbt/shared/domain/models/PopularMovies.kt
+++ b/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/domain/models/PopularMovies.kt
@@ -1,4 +1,4 @@
-package com.vickbt.shared.domain.models
+package com.vickbt.composeApp.domain.models
data class PopularMovies(
diff --git a/composeApp/src/commonMain/kotlin/com/vickbt/shared/domain/models/SpokenLanguage.kt b/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/domain/models/SpokenLanguage.kt
similarity index 75%
rename from composeApp/src/commonMain/kotlin/com/vickbt/shared/domain/models/SpokenLanguage.kt
rename to composeApp/src/commonMain/kotlin/com/vickbt/composeApp/domain/models/SpokenLanguage.kt
index 875698fa..1fd685cb 100644
--- a/composeApp/src/commonMain/kotlin/com/vickbt/shared/domain/models/SpokenLanguage.kt
+++ b/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/domain/models/SpokenLanguage.kt
@@ -1,4 +1,4 @@
-package com.vickbt.shared.domain.models
+package com.vickbt.composeApp.domain.models
data class SpokenLanguage(
diff --git a/composeApp/src/commonMain/kotlin/com/vickbt/shared/domain/models/TrendingMovies.kt b/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/domain/models/TrendingMovies.kt
similarity index 78%
rename from composeApp/src/commonMain/kotlin/com/vickbt/shared/domain/models/TrendingMovies.kt
rename to composeApp/src/commonMain/kotlin/com/vickbt/composeApp/domain/models/TrendingMovies.kt
index 4779c06e..a57fb96b 100644
--- a/composeApp/src/commonMain/kotlin/com/vickbt/shared/domain/models/TrendingMovies.kt
+++ b/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/domain/models/TrendingMovies.kt
@@ -1,4 +1,4 @@
-package com.vickbt.shared.domain.models
+package com.vickbt.composeApp.domain.models
data class TrendingMovies(
val page: Int? = null,
diff --git a/composeApp/src/commonMain/kotlin/com/vickbt/shared/domain/models/UpcomingMovies.kt b/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/domain/models/UpcomingMovies.kt
similarity index 81%
rename from composeApp/src/commonMain/kotlin/com/vickbt/shared/domain/models/UpcomingMovies.kt
rename to composeApp/src/commonMain/kotlin/com/vickbt/composeApp/domain/models/UpcomingMovies.kt
index fec2e99b..6104a2d9 100644
--- a/composeApp/src/commonMain/kotlin/com/vickbt/shared/domain/models/UpcomingMovies.kt
+++ b/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/domain/models/UpcomingMovies.kt
@@ -1,4 +1,4 @@
-package com.vickbt.shared.domain.models
+package com.vickbt.composeApp.domain.models
data class UpcomingMovies(
diff --git a/composeApp/src/commonMain/kotlin/com/vickbt/shared/domain/models/Video.kt b/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/domain/models/Video.kt
similarity index 86%
rename from composeApp/src/commonMain/kotlin/com/vickbt/shared/domain/models/Video.kt
rename to composeApp/src/commonMain/kotlin/com/vickbt/composeApp/domain/models/Video.kt
index 879e333f..371bb935 100644
--- a/composeApp/src/commonMain/kotlin/com/vickbt/shared/domain/models/Video.kt
+++ b/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/domain/models/Video.kt
@@ -1,4 +1,4 @@
-package com.vickbt.shared.domain.models
+package com.vickbt.composeApp.domain.models
data class Video(
diff --git a/composeApp/src/commonMain/kotlin/com/vickbt/shared/domain/repositories/FavoritesRepository.kt b/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/domain/repositories/FavoritesRepository.kt
similarity index 66%
rename from composeApp/src/commonMain/kotlin/com/vickbt/shared/domain/repositories/FavoritesRepository.kt
rename to composeApp/src/commonMain/kotlin/com/vickbt/composeApp/domain/repositories/FavoritesRepository.kt
index e96f442c..3f8cec02 100644
--- a/composeApp/src/commonMain/kotlin/com/vickbt/shared/domain/repositories/FavoritesRepository.kt
+++ b/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/domain/repositories/FavoritesRepository.kt
@@ -1,6 +1,6 @@
-package com.vickbt.shared.domain.repositories
+package com.vickbt.composeApp.domain.repositories
-import com.vickbt.shared.domain.models.MovieDetails
+import com.vickbt.composeApp.domain.models.MovieDetails
import kotlinx.coroutines.flow.Flow
interface FavoritesRepository {
diff --git a/composeApp/src/commonMain/kotlin/com/vickbt/shared/domain/repositories/MovieDetailsRepository.kt b/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/domain/repositories/MovieDetailsRepository.kt
similarity index 66%
rename from composeApp/src/commonMain/kotlin/com/vickbt/shared/domain/repositories/MovieDetailsRepository.kt
rename to composeApp/src/commonMain/kotlin/com/vickbt/composeApp/domain/repositories/MovieDetailsRepository.kt
index 00d9534b..08939adc 100644
--- a/composeApp/src/commonMain/kotlin/com/vickbt/shared/domain/repositories/MovieDetailsRepository.kt
+++ b/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/domain/repositories/MovieDetailsRepository.kt
@@ -1,10 +1,10 @@
-package com.vickbt.shared.domain.repositories
+package com.vickbt.composeApp.domain.repositories
-import com.vickbt.shared.domain.models.Cast
-import com.vickbt.shared.domain.models.Movie
-import com.vickbt.shared.domain.models.MovieDetails
-import com.vickbt.shared.domain.utils.Constants.STARTING_PAGE_INDEX
-import com.vickbt.shared.utils.ResultState
+import com.vickbt.composeApp.domain.models.Cast
+import com.vickbt.composeApp.domain.models.Movie
+import com.vickbt.composeApp.domain.models.MovieDetails
+import com.vickbt.composeApp.domain.utils.Constants.STARTING_PAGE_INDEX
+import com.vickbt.composeApp.utils.ResultState
import kotlinx.coroutines.flow.Flow
interface MovieDetailsRepository {
@@ -25,11 +25,11 @@ interface MovieDetailsRepository {
suspend fun saveFavoriteMovie(movie: MovieDetails)
/**Retrieve cached movie details from local cache based on its ID*/
- suspend fun getFavoriteMovie(movieId: Int): MovieDetails
+ suspend fun getFavoriteMovie(movieId: Int): MovieDetails?
/**Delete previously saved movie details from local cache*/
suspend fun deleteFavoriteMovie(movieId: Int)
/**Check if movie details record is available in the local cache*/
- suspend fun isMovieFavorite(movieId: Int): Boolean?
+ suspend fun isMovieFavorite(movieId: Int): Flow
}
diff --git a/composeApp/src/commonMain/kotlin/com/vickbt/shared/domain/repositories/MoviesRepository.kt b/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/domain/repositories/MoviesRepository.kt
similarity index 77%
rename from composeApp/src/commonMain/kotlin/com/vickbt/shared/domain/repositories/MoviesRepository.kt
rename to composeApp/src/commonMain/kotlin/com/vickbt/composeApp/domain/repositories/MoviesRepository.kt
index fc6dd524..8081f071 100644
--- a/composeApp/src/commonMain/kotlin/com/vickbt/shared/domain/repositories/MoviesRepository.kt
+++ b/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/domain/repositories/MoviesRepository.kt
@@ -1,8 +1,8 @@
-package com.vickbt.shared.domain.repositories
+package com.vickbt.composeApp.domain.repositories
-import com.vickbt.shared.domain.models.Movie
-import com.vickbt.shared.domain.utils.Constants.STARTING_PAGE_INDEX
-import com.vickbt.shared.utils.ResultState
+import com.vickbt.composeApp.domain.models.Movie
+import com.vickbt.composeApp.domain.utils.Constants.STARTING_PAGE_INDEX
+import com.vickbt.composeApp.utils.ResultState
import kotlinx.coroutines.flow.Flow
interface MoviesRepository {
diff --git a/composeApp/src/commonMain/kotlin/com/vickbt/shared/domain/repositories/SearchRepository.kt b/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/domain/repositories/SearchRepository.kt
similarity index 52%
rename from composeApp/src/commonMain/kotlin/com/vickbt/shared/domain/repositories/SearchRepository.kt
rename to composeApp/src/commonMain/kotlin/com/vickbt/composeApp/domain/repositories/SearchRepository.kt
index 5c970341..ae0d7b62 100644
--- a/composeApp/src/commonMain/kotlin/com/vickbt/shared/domain/repositories/SearchRepository.kt
+++ b/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/domain/repositories/SearchRepository.kt
@@ -1,8 +1,8 @@
-package com.vickbt.shared.domain.repositories
+package com.vickbt.composeApp.domain.repositories
-import com.vickbt.shared.domain.models.Movie
-import com.vickbt.shared.domain.utils.Constants.STARTING_PAGE_INDEX
-import com.vickbt.shared.utils.ResultState
+import com.vickbt.composeApp.domain.models.Movie
+import com.vickbt.composeApp.domain.utils.Constants.STARTING_PAGE_INDEX
+import com.vickbt.composeApp.utils.ResultState
import kotlinx.coroutines.flow.Flow
interface SearchRepository {
diff --git a/composeApp/src/commonMain/kotlin/com/vickbt/shared/domain/repositories/SettingsRepository.kt b/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/domain/repositories/SettingsRepository.kt
similarity index 83%
rename from composeApp/src/commonMain/kotlin/com/vickbt/shared/domain/repositories/SettingsRepository.kt
rename to composeApp/src/commonMain/kotlin/com/vickbt/composeApp/domain/repositories/SettingsRepository.kt
index 341e7da7..3233cd6d 100644
--- a/composeApp/src/commonMain/kotlin/com/vickbt/shared/domain/repositories/SettingsRepository.kt
+++ b/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/domain/repositories/SettingsRepository.kt
@@ -1,4 +1,4 @@
-package com.vickbt.shared.domain.repositories
+package com.vickbt.composeApp.domain.repositories
import kotlinx.coroutines.flow.Flow
diff --git a/composeApp/src/commonMain/kotlin/com/vickbt/shared/domain/utils/Constants.kt b/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/domain/utils/Constants.kt
similarity index 76%
rename from composeApp/src/commonMain/kotlin/com/vickbt/shared/domain/utils/Constants.kt
rename to composeApp/src/commonMain/kotlin/com/vickbt/composeApp/domain/utils/Constants.kt
index 70848c56..367ce14f 100644
--- a/composeApp/src/commonMain/kotlin/com/vickbt/shared/domain/utils/Constants.kt
+++ b/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/domain/utils/Constants.kt
@@ -1,4 +1,4 @@
-package com.vickbt.shared.domain.utils
+package com.vickbt.composeApp.domain.utils
object Constants {
@@ -17,5 +17,7 @@ object Constants {
const val KEY_LANGUAGE = "language"
const val KEY_IMAGE_QUALITY = "image_quality"
- internal const val dataStoreFileName = "notflix.preferences_pb"
+ const val DATABASE_NAME = "notflix.db"
+
+ internal const val DATASTORE_FILE_NAME = "notflix.preferences_pb"
}
diff --git a/composeApp/src/commonMain/kotlin/com/vickbt/shared/domain/utils/Enums.kt b/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/domain/utils/Enums.kt
similarity index 71%
rename from composeApp/src/commonMain/kotlin/com/vickbt/shared/domain/utils/Enums.kt
rename to composeApp/src/commonMain/kotlin/com/vickbt/composeApp/domain/utils/Enums.kt
index f61c13b1..3222fa87 100644
--- a/composeApp/src/commonMain/kotlin/com/vickbt/shared/domain/utils/Enums.kt
+++ b/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/domain/utils/Enums.kt
@@ -1,4 +1,4 @@
-package com.vickbt.shared.domain.utils
+package com.vickbt.composeApp.domain.utils
object Enums {
enum class MovieCategories {
diff --git a/composeApp/src/commonMain/kotlin/com/vickbt/shared/ui/components/BottomNavBar.kt b/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/ui/components/BottomNavBar.kt
similarity index 93%
rename from composeApp/src/commonMain/kotlin/com/vickbt/shared/ui/components/BottomNavBar.kt
rename to composeApp/src/commonMain/kotlin/com/vickbt/composeApp/ui/components/BottomNavBar.kt
index 68ef0ebe..e8f369e3 100644
--- a/composeApp/src/commonMain/kotlin/com/vickbt/shared/ui/components/BottomNavBar.kt
+++ b/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/ui/components/BottomNavBar.kt
@@ -1,4 +1,4 @@
-package com.vickbt.shared.ui.components
+package com.vickbt.composeApp.ui.components
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.material3.Icon
@@ -11,8 +11,8 @@ import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.navigation.NavHostController
import androidx.navigation.compose.currentBackStackEntryAsState
-import com.vickbt.shared.ui.navigation.NavigationItem
-import com.vickbt.shared.ui.theme.Gray
+import com.vickbt.composeApp.ui.navigation.NavigationItem
+import com.vickbt.composeApp.ui.theme.Gray
import org.jetbrains.compose.resources.stringResource
@Composable
diff --git a/composeApp/src/commonMain/kotlin/com/vickbt/shared/ui/components/ExpandedText.kt b/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/ui/components/ExpandedText.kt
similarity index 98%
rename from composeApp/src/commonMain/kotlin/com/vickbt/shared/ui/components/ExpandedText.kt
rename to composeApp/src/commonMain/kotlin/com/vickbt/composeApp/ui/components/ExpandedText.kt
index e4c279dc..17c65ad3 100644
--- a/composeApp/src/commonMain/kotlin/com/vickbt/shared/ui/components/ExpandedText.kt
+++ b/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/ui/components/ExpandedText.kt
@@ -1,4 +1,4 @@
-package com.vickbt.shared.ui.components
+package com.vickbt.composeApp.ui.components
import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.Box
diff --git a/composeApp/src/commonMain/kotlin/com/vickbt/shared/ui/components/ItemMovieCast.kt b/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/ui/components/ItemMovieCast.kt
similarity index 91%
rename from composeApp/src/commonMain/kotlin/com/vickbt/shared/ui/components/ItemMovieCast.kt
rename to composeApp/src/commonMain/kotlin/com/vickbt/composeApp/ui/components/ItemMovieCast.kt
index 4f0f4495..88f7f168 100644
--- a/composeApp/src/commonMain/kotlin/com/vickbt/shared/ui/components/ItemMovieCast.kt
+++ b/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/ui/components/ItemMovieCast.kt
@@ -1,4 +1,4 @@
-package com.vickbt.shared.ui.components
+package com.vickbt.composeApp.ui.components
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Column
@@ -17,9 +17,9 @@ import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
import coil3.compose.AsyncImage
-import com.vickbt.shared.domain.models.Actor
-import com.vickbt.shared.ui.theme.TextSecondary
-import com.vickbt.shared.utils.loadImage
+import com.vickbt.composeApp.domain.models.Actor
+import com.vickbt.composeApp.ui.theme.TextSecondary
+import com.vickbt.composeApp.utils.loadImage
@Composable
fun ItemMovieCast(modifier: Modifier = Modifier, actor: Actor) {
diff --git a/composeApp/src/commonMain/kotlin/com/vickbt/shared/ui/components/MovieCardDescription.kt b/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/ui/components/MovieCardDescription.kt
similarity index 94%
rename from composeApp/src/commonMain/kotlin/com/vickbt/shared/ui/components/MovieCardDescription.kt
rename to composeApp/src/commonMain/kotlin/com/vickbt/composeApp/ui/components/MovieCardDescription.kt
index 180e9c1f..aa9c01c8 100644
--- a/composeApp/src/commonMain/kotlin/com/vickbt/shared/ui/components/MovieCardDescription.kt
+++ b/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/ui/components/MovieCardDescription.kt
@@ -1,4 +1,4 @@
-package com.vickbt.shared.ui.components
+package com.vickbt.composeApp.ui.components
import androidx.compose.foundation.background
import androidx.compose.foundation.clickable
@@ -26,8 +26,8 @@ import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
import coil3.compose.AsyncImage
-import com.vickbt.shared.domain.models.MovieDetails
-import com.vickbt.shared.utils.loadImage
+import com.vickbt.composeApp.domain.models.MovieDetails
+import com.vickbt.composeApp.utils.loadImage
@Composable
fun MovieCardDescription(
@@ -76,7 +76,7 @@ fun MovieCardDescription(
) {
Text(
modifier = Modifier,
- text = movie.title ?: "Unknown movie",
+ text = movie.title,
fontSize = 24.sp,
maxLines = 1,
style = MaterialTheme.typography.titleMedium,
diff --git a/composeApp/src/commonMain/kotlin/com/vickbt/shared/ui/components/MovieCardLandscape.kt b/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/ui/components/MovieCardLandscape.kt
similarity index 91%
rename from composeApp/src/commonMain/kotlin/com/vickbt/shared/ui/components/MovieCardLandscape.kt
rename to composeApp/src/commonMain/kotlin/com/vickbt/composeApp/ui/components/MovieCardLandscape.kt
index 72fd30e5..c8960738 100644
--- a/composeApp/src/commonMain/kotlin/com/vickbt/shared/ui/components/MovieCardLandscape.kt
+++ b/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/ui/components/MovieCardLandscape.kt
@@ -1,4 +1,4 @@
-package com.vickbt.shared.ui.components
+package com.vickbt.composeApp.ui.components
import androidx.compose.foundation.background
import androidx.compose.foundation.clickable
@@ -33,14 +33,14 @@ import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
import coil3.compose.AsyncImage
-import com.vickbt.shared.domain.models.Movie
-import com.vickbt.shared.ui.components.ratingbar.RatingBar
-import com.vickbt.shared.ui.components.ratingbar.RatingBarStyle
-import com.vickbt.shared.ui.components.ratingbar.StepSize
-import com.vickbt.shared.utils.capitalizeEachWord
-import com.vickbt.shared.utils.getRating
-import com.vickbt.shared.utils.getReleaseDate
-import com.vickbt.shared.utils.loadImage
+import com.vickbt.composeApp.domain.models.Movie
+import com.vickbt.composeApp.ui.components.ratingbar.RatingBar
+import com.vickbt.composeApp.ui.components.ratingbar.RatingBarStyle
+import com.vickbt.composeApp.ui.components.ratingbar.StepSize
+import com.vickbt.composeApp.utils.capitalizeEachWord
+import com.vickbt.composeApp.utils.getRating
+import com.vickbt.composeApp.utils.getReleaseDate
+import com.vickbt.composeApp.utils.loadImage
@Composable
fun MovieCardLandscape(
@@ -94,7 +94,7 @@ fun MovieCardLandscape(
//region Movie Title
Text(
modifier = Modifier,
- text = movie.title ?: "Unknown movie",
+ text = movie.title,
fontSize = 18.sp,
maxLines = 2,
style = MaterialTheme.typography.titleMedium,
diff --git a/composeApp/src/commonMain/kotlin/com/vickbt/shared/ui/components/MovieCardPager.kt b/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/ui/components/MovieCardPager.kt
similarity index 92%
rename from composeApp/src/commonMain/kotlin/com/vickbt/shared/ui/components/MovieCardPager.kt
rename to composeApp/src/commonMain/kotlin/com/vickbt/composeApp/ui/components/MovieCardPager.kt
index dc189fd1..45a1c586 100644
--- a/composeApp/src/commonMain/kotlin/com/vickbt/shared/ui/components/MovieCardPager.kt
+++ b/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/ui/components/MovieCardPager.kt
@@ -1,4 +1,4 @@
-package com.vickbt.shared.ui.components
+package com.vickbt.composeApp.ui.components
import androidx.compose.foundation.Canvas
import androidx.compose.foundation.ExperimentalFoundationApi
@@ -33,12 +33,12 @@ import androidx.compose.ui.unit.Dp
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
import coil3.compose.AsyncImage
-import com.vickbt.shared.domain.models.Movie
-import com.vickbt.shared.ui.components.ratingbar.RatingBar
-import com.vickbt.shared.ui.components.ratingbar.RatingBarStyle
-import com.vickbt.shared.ui.components.ratingbar.StepSize
-import com.vickbt.shared.utils.getRating
-import com.vickbt.shared.utils.loadImage
+import com.vickbt.composeApp.domain.models.Movie
+import com.vickbt.composeApp.ui.components.ratingbar.RatingBar
+import com.vickbt.composeApp.ui.components.ratingbar.RatingBarStyle
+import com.vickbt.composeApp.ui.components.ratingbar.StepSize
+import com.vickbt.composeApp.utils.getRating
+import com.vickbt.composeApp.utils.loadImage
@Composable
fun MovieCardPager(
@@ -86,7 +86,7 @@ fun MovieCardPager(
) {
Text(
modifier = Modifier,
- text = movie.title ?: "Unknown movie",
+ text = movie.title,
fontSize = 28.sp,
maxLines = 2,
style = MaterialTheme.typography.titleMedium,
diff --git a/composeApp/src/commonMain/kotlin/com/vickbt/shared/ui/components/MovieCardPortrait.kt b/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/ui/components/MovieCardPortrait.kt
similarity index 73%
rename from composeApp/src/commonMain/kotlin/com/vickbt/shared/ui/components/MovieCardPortrait.kt
rename to composeApp/src/commonMain/kotlin/com/vickbt/composeApp/ui/components/MovieCardPortrait.kt
index b2fa1803..bbf32a7b 100644
--- a/composeApp/src/commonMain/kotlin/com/vickbt/shared/ui/components/MovieCardPortrait.kt
+++ b/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/ui/components/MovieCardPortrait.kt
@@ -1,4 +1,4 @@
-package com.vickbt.shared.ui.components
+package com.vickbt.composeApp.ui.components
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Column
@@ -6,11 +6,11 @@ import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.unit.dp
-import com.vickbt.shared.domain.models.Movie
-import com.vickbt.shared.ui.components.ratingbar.RatingBar
-import com.vickbt.shared.ui.components.ratingbar.RatingBarStyle
-import com.vickbt.shared.ui.components.ratingbar.StepSize
-import com.vickbt.shared.utils.getRating
+import com.vickbt.composeApp.domain.models.Movie
+import com.vickbt.composeApp.ui.components.ratingbar.RatingBar
+import com.vickbt.composeApp.ui.components.ratingbar.RatingBarStyle
+import com.vickbt.composeApp.ui.components.ratingbar.StepSize
+import com.vickbt.composeApp.utils.getRating
@Composable
fun MovieCardPortrait(modifier: Modifier = Modifier, movie: Movie, onItemClick: (Movie) -> Unit) {
diff --git a/composeApp/src/commonMain/kotlin/com/vickbt/shared/ui/components/MovieCardPortraitCompact.kt b/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/ui/components/MovieCardPortraitCompact.kt
similarity index 89%
rename from composeApp/src/commonMain/kotlin/com/vickbt/shared/ui/components/MovieCardPortraitCompact.kt
rename to composeApp/src/commonMain/kotlin/com/vickbt/composeApp/ui/components/MovieCardPortraitCompact.kt
index 4d6b0e6e..a838289e 100644
--- a/composeApp/src/commonMain/kotlin/com/vickbt/shared/ui/components/MovieCardPortraitCompact.kt
+++ b/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/ui/components/MovieCardPortraitCompact.kt
@@ -1,4 +1,4 @@
-package com.vickbt.shared.ui.components
+package com.vickbt.composeApp.ui.components
import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.Arrangement
@@ -22,8 +22,8 @@ import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
import coil3.compose.AsyncImage
-import com.vickbt.shared.domain.models.Movie
-import com.vickbt.shared.utils.loadImage
+import com.vickbt.composeApp.domain.models.Movie
+import com.vickbt.composeApp.utils.loadImage
@Composable
fun MovieCardPortraitCompact(
@@ -57,7 +57,7 @@ fun MovieCardPortraitCompact(
Text(
modifier = Modifier.width(145.dp),
- text = movie.title ?: "Unknown movie",
+ text = movie.title,
style = MaterialTheme.typography.bodyLarge,
color = MaterialTheme.colorScheme.onSurface,
fontSize = 14.sp,
@@ -70,5 +70,5 @@ fun MovieCardPortraitCompact(
@Composable
private fun Preview() {
- MovieCardPortraitCompact(movie = Movie(title = "Cocaine Bear"), onItemClick = {})
+ // MovieCardPortraitCompact(movie = Movie(title = "Cocaine Bear"), onItemClick = {})
}
diff --git a/composeApp/src/commonMain/kotlin/com/vickbt/shared/ui/components/MovieRatingSection.kt b/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/ui/components/MovieRatingSection.kt
similarity index 97%
rename from composeApp/src/commonMain/kotlin/com/vickbt/shared/ui/components/MovieRatingSection.kt
rename to composeApp/src/commonMain/kotlin/com/vickbt/composeApp/ui/components/MovieRatingSection.kt
index 65fdcdbe..e901201f 100644
--- a/composeApp/src/commonMain/kotlin/com/vickbt/shared/ui/components/MovieRatingSection.kt
+++ b/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/ui/components/MovieRatingSection.kt
@@ -1,4 +1,4 @@
-package com.vickbt.shared.ui.components
+package com.vickbt.composeApp.ui.components
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Column
@@ -22,7 +22,7 @@ import androidx.compose.ui.unit.sp
import com.vickbt.shared.resources.Res
import com.vickbt.shared.resources.popularity
import com.vickbt.shared.resources.rating
-import com.vickbt.shared.ui.theme.Golden
+import com.vickbt.composeApp.ui.theme.Golden
import org.jetbrains.compose.resources.stringResource
@Composable
diff --git a/composeApp/src/commonMain/kotlin/com/vickbt/shared/ui/components/NavRailBar.kt b/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/ui/components/NavRailBar.kt
similarity index 91%
rename from composeApp/src/commonMain/kotlin/com/vickbt/shared/ui/components/NavRailBar.kt
rename to composeApp/src/commonMain/kotlin/com/vickbt/composeApp/ui/components/NavRailBar.kt
index 07260167..0f211392 100644
--- a/composeApp/src/commonMain/kotlin/com/vickbt/shared/ui/components/NavRailBar.kt
+++ b/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/ui/components/NavRailBar.kt
@@ -1,4 +1,4 @@
-package com.vickbt.shared.ui.components
+package com.vickbt.composeApp.ui.components
import androidx.compose.foundation.layout.fillMaxHeight
import androidx.compose.material3.Icon
@@ -12,9 +12,9 @@ import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.alpha
import androidx.navigation.NavHostController
import androidx.navigation.compose.currentBackStackEntryAsState
-import com.vickbt.shared.ui.navigation.NavigationItem
-import com.vickbt.shared.ui.theme.Gray
-import com.vickbt.shared.ui.theme.PrimaryColor
+import com.vickbt.composeApp.ui.navigation.NavigationItem
+import com.vickbt.composeApp.ui.theme.Gray
+import com.vickbt.composeApp.ui.theme.PrimaryColor
import org.jetbrains.compose.resources.stringResource
@Composable
diff --git a/composeApp/src/commonMain/kotlin/com/vickbt/shared/ui/components/SectionSeparator.kt b/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/ui/components/SectionSeparator.kt
similarity index 95%
rename from composeApp/src/commonMain/kotlin/com/vickbt/shared/ui/components/SectionSeparator.kt
rename to composeApp/src/commonMain/kotlin/com/vickbt/composeApp/ui/components/SectionSeparator.kt
index e9fea660..a1574278 100644
--- a/composeApp/src/commonMain/kotlin/com/vickbt/shared/ui/components/SectionSeparator.kt
+++ b/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/ui/components/SectionSeparator.kt
@@ -1,4 +1,4 @@
-package com.vickbt.shared.ui.components
+package com.vickbt.composeApp.ui.components
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Row
diff --git a/composeApp/src/commonMain/kotlin/com/vickbt/shared/ui/components/appbars/DetailsAppBar.kt b/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/ui/components/appbars/DetailsAppBar.kt
similarity index 89%
rename from composeApp/src/commonMain/kotlin/com/vickbt/shared/ui/components/appbars/DetailsAppBar.kt
rename to composeApp/src/commonMain/kotlin/com/vickbt/composeApp/ui/components/appbars/DetailsAppBar.kt
index 759875ed..b2668a00 100644
--- a/composeApp/src/commonMain/kotlin/com/vickbt/shared/ui/components/appbars/DetailsAppBar.kt
+++ b/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/ui/components/appbars/DetailsAppBar.kt
@@ -1,4 +1,4 @@
-package com.vickbt.shared.ui.components.appbars
+package com.vickbt.composeApp.ui.components.appbars
import androidx.compose.animation.animateColorAsState
import androidx.compose.foundation.background
@@ -39,18 +39,21 @@ import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
import coil3.compose.AsyncImage
-import com.vickbt.shared.domain.models.MovieDetails
-import com.vickbt.shared.ui.components.collapsingToolbar.CollapsingToolbarScaffoldState
-import com.vickbt.shared.utils.DetailsUiState
-import com.vickbt.shared.utils.getMovieDuration
-import com.vickbt.shared.utils.loadImage
+import com.vickbt.composeApp.domain.models.MovieDetails
+import com.vickbt.composeApp.ui.components.collapsingToolbar.CollapsingToolbarScaffoldState
+import com.vickbt.composeApp.utils.DetailsUiState
+import com.vickbt.composeApp.utils.getMovieDuration
+import com.vickbt.composeApp.utils.loadImage
+import com.vickbt.shared.resources.Res
+import com.vickbt.shared.resources.unknown_movie
+import org.jetbrains.compose.resources.stringResource
@OptIn(ExperimentalMaterial3Api::class)
@Composable
fun DetailsAppBar(
modifier: Modifier = Modifier,
collapsingScrollState: CollapsingToolbarScaffoldState,
- movieDetailsState: DetailsUiState?,
+ movieDetailsState: DetailsUiState,
onNavigationIconClick: () -> Unit,
onShareIconClick: () -> Unit,
onFavoriteIconClick: (MovieDetails, Boolean?) -> Unit
@@ -63,8 +66,8 @@ fun DetailsAppBar(
var dominantColor by remember { mutableStateOf(defaultDominantColor) }
var dominantTextColor by remember { mutableStateOf(defaultDominantTextColor) }
- val movieDetails by remember { mutableStateOf(movieDetailsState?.movieDetails) }
- var isFavourite by remember { mutableStateOf(movieDetailsState?.isFavorite) }
+ val movieDetails by remember { mutableStateOf(movieDetailsState.movieDetails) }
+ var isFavourite by remember { mutableStateOf(movieDetailsState.isFavorite) }
val backgroundColor by animateColorAsState(
targetValue = MaterialTheme.colorScheme.surface.copy(1 - scrollProgress)
@@ -110,7 +113,7 @@ fun DetailsAppBar(
) {
Text(
modifier = Modifier.fillMaxWidth(),
- text = movieDetails?.title ?: "Unknown movie",
+ text = movieDetails?.title ?: stringResource(Res.string.unknown_movie),
style = MaterialTheme.typography.titleMedium,
maxLines = 2,
overflow = TextOverflow.Ellipsis,
@@ -135,7 +138,7 @@ fun DetailsAppBar(
title = {
Text(
modifier = Modifier.graphicsLayer { alpha = 1 - scrollProgress },
- text = movieDetails?.title ?: "Unknown movie",
+ text = movieDetails?.title ?: stringResource(Res.string.unknown_movie),
style = MaterialTheme.typography.titleMedium,
fontSize = 20.sp,
overflow = TextOverflow.Ellipsis,
diff --git a/composeApp/src/commonMain/kotlin/com/vickbt/shared/ui/components/appbars/TopAppBar.kt b/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/ui/components/appbars/TopAppBar.kt
similarity index 95%
rename from composeApp/src/commonMain/kotlin/com/vickbt/shared/ui/components/appbars/TopAppBar.kt
rename to composeApp/src/commonMain/kotlin/com/vickbt/composeApp/ui/components/appbars/TopAppBar.kt
index 52fd942d..5e79f386 100644
--- a/composeApp/src/commonMain/kotlin/com/vickbt/shared/ui/components/appbars/TopAppBar.kt
+++ b/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/ui/components/appbars/TopAppBar.kt
@@ -1,4 +1,4 @@
-package com.vickbt.shared.ui.components.appbars
+package com.vickbt.composeApp.ui.components.appbars
import androidx.compose.foundation.layout.padding
import androidx.compose.material3.ExperimentalMaterial3Api
diff --git a/composeApp/src/commonMain/kotlin/com/vickbt/shared/ui/components/collapsingToolbar/AppBarContainer.kt b/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/ui/components/collapsingToolbar/AppBarContainer.kt
similarity index 98%
rename from composeApp/src/commonMain/kotlin/com/vickbt/shared/ui/components/collapsingToolbar/AppBarContainer.kt
rename to composeApp/src/commonMain/kotlin/com/vickbt/composeApp/ui/components/collapsingToolbar/AppBarContainer.kt
index 78259a84..839d8aaa 100644
--- a/composeApp/src/commonMain/kotlin/com/vickbt/shared/ui/components/collapsingToolbar/AppBarContainer.kt
+++ b/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/ui/components/collapsingToolbar/AppBarContainer.kt
@@ -1,4 +1,4 @@
-package com.vickbt.shared.ui.components.collapsingToolbar
+package com.vickbt.composeApp.ui.components.collapsingToolbar
import androidx.compose.foundation.gestures.ScrollableDefaults
import androidx.compose.runtime.Composable
diff --git a/composeApp/src/commonMain/kotlin/com/vickbt/shared/ui/components/collapsingToolbar/CollapsingToolbar.kt b/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/ui/components/collapsingToolbar/CollapsingToolbar.kt
similarity index 99%
rename from composeApp/src/commonMain/kotlin/com/vickbt/shared/ui/components/collapsingToolbar/CollapsingToolbar.kt
rename to composeApp/src/commonMain/kotlin/com/vickbt/composeApp/ui/components/collapsingToolbar/CollapsingToolbar.kt
index b5e44cfa..26e6567f 100644
--- a/composeApp/src/commonMain/kotlin/com/vickbt/shared/ui/components/collapsingToolbar/CollapsingToolbar.kt
+++ b/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/ui/components/collapsingToolbar/CollapsingToolbar.kt
@@ -1,4 +1,4 @@
-package com.vickbt.shared.ui.components.collapsingToolbar
+package com.vickbt.composeApp.ui.components.collapsingToolbar
import androidx.compose.animation.core.AnimationState
import androidx.compose.animation.core.animateTo
diff --git a/composeApp/src/commonMain/kotlin/com/vickbt/shared/ui/components/collapsingToolbar/CollapsingToolbarScaffold.kt b/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/ui/components/collapsingToolbar/CollapsingToolbarScaffold.kt
similarity index 98%
rename from composeApp/src/commonMain/kotlin/com/vickbt/shared/ui/components/collapsingToolbar/CollapsingToolbarScaffold.kt
rename to composeApp/src/commonMain/kotlin/com/vickbt/composeApp/ui/components/collapsingToolbar/CollapsingToolbarScaffold.kt
index 81a9d3b2..03043c63 100644
--- a/composeApp/src/commonMain/kotlin/com/vickbt/shared/ui/components/collapsingToolbar/CollapsingToolbarScaffold.kt
+++ b/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/ui/components/collapsingToolbar/CollapsingToolbarScaffold.kt
@@ -1,4 +1,4 @@
-package com.vickbt.shared.ui.components.collapsingToolbar
+package com.vickbt.composeApp.ui.components.collapsingToolbar
import androidx.compose.foundation.gestures.ScrollableDefaults
import androidx.compose.runtime.Composable
diff --git a/composeApp/src/commonMain/kotlin/com/vickbt/shared/ui/components/collapsingToolbar/ExperimentalToolbarApi.kt b/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/ui/components/collapsingToolbar/ExperimentalToolbarApi.kt
similarity index 87%
rename from composeApp/src/commonMain/kotlin/com/vickbt/shared/ui/components/collapsingToolbar/ExperimentalToolbarApi.kt
rename to composeApp/src/commonMain/kotlin/com/vickbt/composeApp/ui/components/collapsingToolbar/ExperimentalToolbarApi.kt
index 5c038cc5..b153a8d6 100644
--- a/composeApp/src/commonMain/kotlin/com/vickbt/shared/ui/components/collapsingToolbar/ExperimentalToolbarApi.kt
+++ b/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/ui/components/collapsingToolbar/ExperimentalToolbarApi.kt
@@ -1,4 +1,4 @@
-package com.vickbt.shared.ui.components.collapsingToolbar
+package com.vickbt.composeApp.ui.components.collapsingToolbar
@RequiresOptIn(
message = "This is an experimental API of compose-collapsing-toolbar. Any declarations with " +
diff --git a/composeApp/src/commonMain/kotlin/com/vickbt/shared/ui/components/collapsingToolbar/ScrollStrategy.kt b/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/ui/components/collapsingToolbar/ScrollStrategy.kt
similarity index 99%
rename from composeApp/src/commonMain/kotlin/com/vickbt/shared/ui/components/collapsingToolbar/ScrollStrategy.kt
rename to composeApp/src/commonMain/kotlin/com/vickbt/composeApp/ui/components/collapsingToolbar/ScrollStrategy.kt
index 2066b489..7d4bcd9c 100644
--- a/composeApp/src/commonMain/kotlin/com/vickbt/shared/ui/components/collapsingToolbar/ScrollStrategy.kt
+++ b/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/ui/components/collapsingToolbar/ScrollStrategy.kt
@@ -1,4 +1,4 @@
-package com.vickbt.shared.ui.components.collapsingToolbar
+package com.vickbt.composeApp.ui.components.collapsingToolbar
import androidx.compose.foundation.gestures.FlingBehavior
import androidx.compose.runtime.MutableState
diff --git a/composeApp/src/commonMain/kotlin/com/vickbt/shared/ui/components/preferences/DialogPreferenceSelection.kt b/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/ui/components/preferences/DialogPreferenceSelection.kt
similarity index 98%
rename from composeApp/src/commonMain/kotlin/com/vickbt/shared/ui/components/preferences/DialogPreferenceSelection.kt
rename to composeApp/src/commonMain/kotlin/com/vickbt/composeApp/ui/components/preferences/DialogPreferenceSelection.kt
index 97c7b945..6bab3182 100644
--- a/composeApp/src/commonMain/kotlin/com/vickbt/shared/ui/components/preferences/DialogPreferenceSelection.kt
+++ b/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/ui/components/preferences/DialogPreferenceSelection.kt
@@ -1,4 +1,4 @@
-package com.vickbt.shared.ui.components.preferences
+package com.vickbt.composeApp.ui.components.preferences
import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.Arrangement
diff --git a/composeApp/src/commonMain/kotlin/com/vickbt/shared/ui/components/preferences/ItemPreferenceOption.kt b/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/ui/components/preferences/ItemPreferenceOption.kt
similarity index 96%
rename from composeApp/src/commonMain/kotlin/com/vickbt/shared/ui/components/preferences/ItemPreferenceOption.kt
rename to composeApp/src/commonMain/kotlin/com/vickbt/composeApp/ui/components/preferences/ItemPreferenceOption.kt
index ce811142..eb05c9eb 100644
--- a/composeApp/src/commonMain/kotlin/com/vickbt/shared/ui/components/preferences/ItemPreferenceOption.kt
+++ b/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/ui/components/preferences/ItemPreferenceOption.kt
@@ -1,4 +1,4 @@
-package com.vickbt.shared.ui.components.preferences
+package com.vickbt.composeApp.ui.components.preferences
import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.Arrangement
diff --git a/composeApp/src/commonMain/kotlin/com/vickbt/shared/ui/components/preferences/PreferencesGroup.kt b/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/ui/components/preferences/PreferencesGroup.kt
similarity index 97%
rename from composeApp/src/commonMain/kotlin/com/vickbt/shared/ui/components/preferences/PreferencesGroup.kt
rename to composeApp/src/commonMain/kotlin/com/vickbt/composeApp/ui/components/preferences/PreferencesGroup.kt
index ec278e7f..9d66514a 100644
--- a/composeApp/src/commonMain/kotlin/com/vickbt/shared/ui/components/preferences/PreferencesGroup.kt
+++ b/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/ui/components/preferences/PreferencesGroup.kt
@@ -1,4 +1,4 @@
-package com.vickbt.shared.ui.components.preferences
+package com.vickbt.composeApp.ui.components.preferences
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Column
diff --git a/composeApp/src/commonMain/kotlin/com/vickbt/shared/ui/components/preferences/TextPreference.kt b/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/ui/components/preferences/TextPreference.kt
similarity index 98%
rename from composeApp/src/commonMain/kotlin/com/vickbt/shared/ui/components/preferences/TextPreference.kt
rename to composeApp/src/commonMain/kotlin/com/vickbt/composeApp/ui/components/preferences/TextPreference.kt
index 67351efc..84752aa6 100644
--- a/composeApp/src/commonMain/kotlin/com/vickbt/shared/ui/components/preferences/TextPreference.kt
+++ b/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/ui/components/preferences/TextPreference.kt
@@ -1,4 +1,4 @@
-package com.vickbt.shared.ui.components.preferences
+package com.vickbt.composeApp.ui.components.preferences
import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.Arrangement
diff --git a/composeApp/src/commonMain/kotlin/com/vickbt/shared/ui/components/ratingbar/FractionalRectangleShape.kt b/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/ui/components/ratingbar/FractionalRectangleShape.kt
similarity index 94%
rename from composeApp/src/commonMain/kotlin/com/vickbt/shared/ui/components/ratingbar/FractionalRectangleShape.kt
rename to composeApp/src/commonMain/kotlin/com/vickbt/composeApp/ui/components/ratingbar/FractionalRectangleShape.kt
index c348f03b..2f2af65b 100644
--- a/composeApp/src/commonMain/kotlin/com/vickbt/shared/ui/components/ratingbar/FractionalRectangleShape.kt
+++ b/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/ui/components/ratingbar/FractionalRectangleShape.kt
@@ -1,4 +1,4 @@
-package com.vickbt.shared.ui.components.ratingbar
+package com.vickbt.composeApp.ui.components.ratingbar
import androidx.compose.runtime.Stable
import androidx.compose.ui.geometry.Rect
diff --git a/composeApp/src/commonMain/kotlin/com/vickbt/shared/ui/components/ratingbar/PathExtensions.kt b/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/ui/components/ratingbar/PathExtensions.kt
similarity index 96%
rename from composeApp/src/commonMain/kotlin/com/vickbt/shared/ui/components/ratingbar/PathExtensions.kt
rename to composeApp/src/commonMain/kotlin/com/vickbt/composeApp/ui/components/ratingbar/PathExtensions.kt
index 2830e837..3a3e876c 100644
--- a/composeApp/src/commonMain/kotlin/com/vickbt/shared/ui/components/ratingbar/PathExtensions.kt
+++ b/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/ui/components/ratingbar/PathExtensions.kt
@@ -1,4 +1,4 @@
-package com.vickbt.shared.ui.components.ratingbar
+package com.vickbt.composeApp.ui.components.ratingbar
import androidx.compose.ui.geometry.Size
import androidx.compose.ui.graphics.Path
diff --git a/composeApp/src/commonMain/kotlin/com/vickbt/shared/ui/components/ratingbar/RatingBar.kt b/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/ui/components/ratingbar/RatingBar.kt
similarity index 99%
rename from composeApp/src/commonMain/kotlin/com/vickbt/shared/ui/components/ratingbar/RatingBar.kt
rename to composeApp/src/commonMain/kotlin/com/vickbt/composeApp/ui/components/ratingbar/RatingBar.kt
index 3c6edc32..7a702c39 100644
--- a/composeApp/src/commonMain/kotlin/com/vickbt/shared/ui/components/ratingbar/RatingBar.kt
+++ b/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/ui/components/ratingbar/RatingBar.kt
@@ -1,4 +1,4 @@
-package com.vickbt.shared.ui.components.ratingbar
+package com.vickbt.composeApp.ui.components.ratingbar
import androidx.compose.foundation.gestures.detectHorizontalDragGestures
import androidx.compose.foundation.layout.Row
diff --git a/composeApp/src/commonMain/kotlin/com/vickbt/shared/ui/components/ratingbar/RatingBarUtils.kt b/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/ui/components/ratingbar/RatingBarUtils.kt
similarity index 94%
rename from composeApp/src/commonMain/kotlin/com/vickbt/shared/ui/components/ratingbar/RatingBarUtils.kt
rename to composeApp/src/commonMain/kotlin/com/vickbt/composeApp/ui/components/ratingbar/RatingBarUtils.kt
index e6948153..982cf09b 100644
--- a/composeApp/src/commonMain/kotlin/com/vickbt/shared/ui/components/ratingbar/RatingBarUtils.kt
+++ b/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/ui/components/ratingbar/RatingBarUtils.kt
@@ -1,4 +1,4 @@
-package com.vickbt.shared.ui.components.ratingbar
+package com.vickbt.composeApp.ui.components.ratingbar
object RatingBarUtils {
diff --git a/composeApp/src/commonMain/kotlin/com/vickbt/shared/ui/components/ratingbar/RatingStar.kt b/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/ui/components/ratingbar/RatingStar.kt
similarity index 98%
rename from composeApp/src/commonMain/kotlin/com/vickbt/shared/ui/components/ratingbar/RatingStar.kt
rename to composeApp/src/commonMain/kotlin/com/vickbt/composeApp/ui/components/ratingbar/RatingStar.kt
index aec7be2b..3b0f1282 100644
--- a/composeApp/src/commonMain/kotlin/com/vickbt/shared/ui/components/ratingbar/RatingStar.kt
+++ b/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/ui/components/ratingbar/RatingStar.kt
@@ -1,4 +1,4 @@
-package com.vickbt.shared.ui.components.ratingbar
+package com.vickbt.composeApp.ui.components.ratingbar
import androidx.compose.foundation.Canvas
import androidx.compose.foundation.layout.Box
diff --git a/composeApp/src/commonMain/kotlin/com/vickbt/shared/ui/navigation/Navigation.kt b/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/ui/navigation/Navigation.kt
similarity index 82%
rename from composeApp/src/commonMain/kotlin/com/vickbt/shared/ui/navigation/Navigation.kt
rename to composeApp/src/commonMain/kotlin/com/vickbt/composeApp/ui/navigation/Navigation.kt
index ce8163c8..d5d5c4e9 100644
--- a/composeApp/src/commonMain/kotlin/com/vickbt/shared/ui/navigation/Navigation.kt
+++ b/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/ui/navigation/Navigation.kt
@@ -1,4 +1,4 @@
-package com.vickbt.shared.ui.navigation
+package com.vickbt.composeApp.ui.navigation
import androidx.compose.foundation.layout.PaddingValues
import androidx.compose.runtime.Composable
@@ -7,12 +7,12 @@ import androidx.navigation.NavType
import androidx.navigation.compose.NavHost
import androidx.navigation.compose.composable
import androidx.navigation.navArgument
-import com.vickbt.shared.ui.screens.details.DetailsScreen
-import com.vickbt.shared.ui.screens.favorites.FavoritesScreen
-import com.vickbt.shared.ui.screens.home.HomeScreen
-import com.vickbt.shared.ui.screens.search.SearchScreen
-import com.vickbt.shared.ui.screens.settings.SettingsScreen
-import com.vickbt.shared.utils.WindowSize
+import com.vickbt.composeApp.ui.screens.details.DetailsScreen
+import com.vickbt.composeApp.ui.screens.favorites.FavoritesScreen
+import com.vickbt.composeApp.ui.screens.home.HomeScreen
+import com.vickbt.composeApp.ui.screens.search.SearchScreen
+import com.vickbt.composeApp.ui.screens.settings.SettingsScreen
+import com.vickbt.composeApp.utils.WindowSize
import io.github.aakira.napier.Napier
@Composable
diff --git a/composeApp/src/commonMain/kotlin/com/vickbt/shared/ui/navigation/NavigationItem.kt b/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/ui/navigation/NavigationItem.kt
similarity index 96%
rename from composeApp/src/commonMain/kotlin/com/vickbt/shared/ui/navigation/NavigationItem.kt
rename to composeApp/src/commonMain/kotlin/com/vickbt/composeApp/ui/navigation/NavigationItem.kt
index 6a1e6ba1..c9e149b9 100644
--- a/composeApp/src/commonMain/kotlin/com/vickbt/shared/ui/navigation/NavigationItem.kt
+++ b/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/ui/navigation/NavigationItem.kt
@@ -1,4 +1,4 @@
-package com.vickbt.shared.ui.navigation
+package com.vickbt.composeApp.ui.navigation
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.rounded.Favorite
diff --git a/composeApp/src/commonMain/kotlin/com/vickbt/shared/ui/screens/details/DetailsScreen.kt b/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/ui/screens/details/DetailsScreen.kt
similarity index 90%
rename from composeApp/src/commonMain/kotlin/com/vickbt/shared/ui/screens/details/DetailsScreen.kt
rename to composeApp/src/commonMain/kotlin/com/vickbt/composeApp/ui/screens/details/DetailsScreen.kt
index a62aba0e..71165fbe 100644
--- a/composeApp/src/commonMain/kotlin/com/vickbt/shared/ui/screens/details/DetailsScreen.kt
+++ b/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/ui/screens/details/DetailsScreen.kt
@@ -1,6 +1,6 @@
@file:OptIn(KoinExperimentalAPI::class)
-package com.vickbt.shared.ui.screens.details
+package com.vickbt.composeApp.ui.screens.details
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Box
@@ -26,16 +26,16 @@ import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
import androidx.navigation.NavHostController
-import com.vickbt.shared.ui.components.ItemMovieCast
-import com.vickbt.shared.ui.components.MovieCardPortrait
-import com.vickbt.shared.ui.components.MovieRatingSection
-import com.vickbt.shared.ui.components.appbars.DetailsAppBar
-import com.vickbt.shared.ui.components.collapsingToolbar.CollapsingToolbarScaffold
-import com.vickbt.shared.ui.components.collapsingToolbar.ScrollStrategy
-import com.vickbt.shared.ui.components.collapsingToolbar.rememberCollapsingToolbarScaffoldState
-import com.vickbt.shared.utils.WindowSize
-import com.vickbt.shared.utils.getPopularity
-import com.vickbt.shared.utils.getRating
+import com.vickbt.composeApp.ui.components.ItemMovieCast
+import com.vickbt.composeApp.ui.components.MovieCardPortrait
+import com.vickbt.composeApp.ui.components.MovieRatingSection
+import com.vickbt.composeApp.ui.components.appbars.DetailsAppBar
+import com.vickbt.composeApp.ui.components.collapsingToolbar.CollapsingToolbarScaffold
+import com.vickbt.composeApp.ui.components.collapsingToolbar.ScrollStrategy
+import com.vickbt.composeApp.ui.components.collapsingToolbar.rememberCollapsingToolbarScaffoldState
+import com.vickbt.composeApp.utils.WindowSize
+import com.vickbt.composeApp.utils.getPopularity
+import com.vickbt.composeApp.utils.getRating
import com.vickbt.shared.resources.Res
import com.vickbt.shared.resources.cast
import com.vickbt.shared.resources.overview
@@ -64,7 +64,7 @@ fun DetailsScreen(
val collapsingScrollState = rememberCollapsingToolbarScaffoldState()
Box(modifier = Modifier.fillMaxSize()) {
- if (movieDetailsState.isLoading) {
+ if (movieDetailsState.isLoading && movieDetailsState.movieDetails == null) {
CircularProgressIndicator(modifier = Modifier.align(Alignment.Center))
} else if (!movieDetailsState.error.isNullOrEmpty()) {
Text(
diff --git a/composeApp/src/commonMain/kotlin/com/vickbt/shared/ui/screens/details/DetailsViewModel.kt b/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/ui/screens/details/DetailsViewModel.kt
similarity index 84%
rename from composeApp/src/commonMain/kotlin/com/vickbt/shared/ui/screens/details/DetailsViewModel.kt
rename to composeApp/src/commonMain/kotlin/com/vickbt/composeApp/ui/screens/details/DetailsViewModel.kt
index 0bba50df..67a604e9 100644
--- a/composeApp/src/commonMain/kotlin/com/vickbt/shared/ui/screens/details/DetailsViewModel.kt
+++ b/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/ui/screens/details/DetailsViewModel.kt
@@ -1,17 +1,18 @@
-package com.vickbt.shared.ui.screens.details
+package com.vickbt.composeApp.ui.screens.details
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
-import com.vickbt.shared.domain.models.MovieDetails
-import com.vickbt.shared.domain.repositories.MovieDetailsRepository
-import com.vickbt.shared.utils.DetailsUiState
-import com.vickbt.shared.utils.isLoading
-import com.vickbt.shared.utils.onFailure
-import com.vickbt.shared.utils.onSuccess
+import com.vickbt.composeApp.domain.models.MovieDetails
+import com.vickbt.composeApp.domain.repositories.MovieDetailsRepository
+import com.vickbt.composeApp.utils.DetailsUiState
+import com.vickbt.composeApp.utils.isLoading
+import com.vickbt.composeApp.utils.onFailure
+import com.vickbt.composeApp.utils.onSuccess
import io.github.aakira.napier.Napier
import kotlinx.coroutines.CoroutineExceptionHandler
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.asStateFlow
+import kotlinx.coroutines.flow.collectLatest
import kotlinx.coroutines.flow.update
import kotlinx.coroutines.launch
@@ -82,8 +83,9 @@ class DetailsViewModel(
fun isMovieFavorite(movieId: Int) = viewModelScope.launch(coroutineExceptionHandler) {
try {
- val isFavorite = movieDetailsRepository.isMovieFavorite(movieId = movieId)
- _movieDetailsState.update { it.copy(isFavorite = isFavorite) }
+ movieDetailsRepository.isMovieFavorite(movieId = movieId).collectLatest { isFavorite ->
+ _movieDetailsState.update { it.copy(isFavorite = isFavorite) }
+ }
} catch (e: Exception) {
Napier.e("Error removing movie: ${e.message}")
}
diff --git a/composeApp/src/commonMain/kotlin/com/vickbt/shared/ui/screens/favorites/FavoritesScreen.kt b/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/ui/screens/favorites/FavoritesScreen.kt
similarity index 92%
rename from composeApp/src/commonMain/kotlin/com/vickbt/shared/ui/screens/favorites/FavoritesScreen.kt
rename to composeApp/src/commonMain/kotlin/com/vickbt/composeApp/ui/screens/favorites/FavoritesScreen.kt
index e12a9ee1..fc0a5d53 100644
--- a/composeApp/src/commonMain/kotlin/com/vickbt/shared/ui/screens/favorites/FavoritesScreen.kt
+++ b/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/ui/screens/favorites/FavoritesScreen.kt
@@ -1,6 +1,6 @@
@file:OptIn(KoinExperimentalAPI::class)
-package com.vickbt.shared.ui.screens.favorites
+package com.vickbt.composeApp.ui.screens.favorites
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.PaddingValues
@@ -16,8 +16,8 @@ import androidx.compose.runtime.collectAsState
import androidx.compose.ui.Modifier
import androidx.compose.ui.unit.dp
import androidx.navigation.NavHostController
-import com.vickbt.shared.ui.components.MovieCardDescription
-import com.vickbt.shared.ui.components.appbars.AppBar
+import com.vickbt.composeApp.ui.components.MovieCardDescription
+import com.vickbt.composeApp.ui.components.appbars.AppBar
import com.vickbt.shared.resources.Res
import com.vickbt.shared.resources.title_favorites
import org.jetbrains.compose.resources.stringResource
diff --git a/composeApp/src/commonMain/kotlin/com/vickbt/shared/ui/screens/favorites/FavoritesViewModel.kt b/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/ui/screens/favorites/FavoritesViewModel.kt
similarity index 85%
rename from composeApp/src/commonMain/kotlin/com/vickbt/shared/ui/screens/favorites/FavoritesViewModel.kt
rename to composeApp/src/commonMain/kotlin/com/vickbt/composeApp/ui/screens/favorites/FavoritesViewModel.kt
index d4d749a5..1b64a726 100644
--- a/composeApp/src/commonMain/kotlin/com/vickbt/shared/ui/screens/favorites/FavoritesViewModel.kt
+++ b/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/ui/screens/favorites/FavoritesViewModel.kt
@@ -1,9 +1,9 @@
-package com.vickbt.shared.ui.screens.favorites
+package com.vickbt.composeApp.ui.screens.favorites
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
-import com.vickbt.shared.domain.repositories.FavoritesRepository
-import com.vickbt.shared.utils.FavouritesUiState
+import com.vickbt.composeApp.domain.repositories.FavoritesRepository
+import com.vickbt.composeApp.utils.FavouritesUiState
import kotlinx.coroutines.CoroutineExceptionHandler
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.asStateFlow
diff --git a/composeApp/src/commonMain/kotlin/com/vickbt/shared/ui/screens/home/HomeScreen.kt b/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/ui/screens/home/HomeScreen.kt
similarity index 94%
rename from composeApp/src/commonMain/kotlin/com/vickbt/shared/ui/screens/home/HomeScreen.kt
rename to composeApp/src/commonMain/kotlin/com/vickbt/composeApp/ui/screens/home/HomeScreen.kt
index 71b25fcf..c3ff85fe 100644
--- a/composeApp/src/commonMain/kotlin/com/vickbt/shared/ui/screens/home/HomeScreen.kt
+++ b/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/ui/screens/home/HomeScreen.kt
@@ -1,4 +1,4 @@
-package com.vickbt.shared.ui.screens.home
+package com.vickbt.composeApp.ui.screens.home
import androidx.compose.foundation.ExperimentalFoundationApi
import androidx.compose.foundation.layout.Arrangement
@@ -33,14 +33,14 @@ import com.vickbt.shared.resources.Res
import com.vickbt.shared.resources.popular_movies
import com.vickbt.shared.resources.trending_movies
import com.vickbt.shared.resources.upcoming_movies
-import com.vickbt.shared.ui.components.MovieCardLandscape
-import com.vickbt.shared.ui.components.MovieCardPager
-import com.vickbt.shared.ui.components.MovieCardPagerIndicator
-import com.vickbt.shared.ui.components.MovieCardPortraitCompact
-import com.vickbt.shared.ui.components.SectionSeparator
-import com.vickbt.shared.ui.components.appbars.AppBar
-import com.vickbt.shared.ui.theme.DarkPrimaryColor
-import com.vickbt.shared.utils.WindowSize
+import com.vickbt.composeApp.ui.components.MovieCardLandscape
+import com.vickbt.composeApp.ui.components.MovieCardPager
+import com.vickbt.composeApp.ui.components.MovieCardPagerIndicator
+import com.vickbt.composeApp.ui.components.MovieCardPortraitCompact
+import com.vickbt.composeApp.ui.components.SectionSeparator
+import com.vickbt.composeApp.ui.components.appbars.AppBar
+import com.vickbt.composeApp.ui.theme.DarkPrimaryColor
+import com.vickbt.composeApp.utils.WindowSize
import org.jetbrains.compose.resources.stringResource
import org.koin.compose.viewmodel.koinViewModel
diff --git a/composeApp/src/commonMain/kotlin/com/vickbt/shared/ui/screens/home/HomeViewModel.kt b/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/ui/screens/home/HomeViewModel.kt
similarity index 91%
rename from composeApp/src/commonMain/kotlin/com/vickbt/shared/ui/screens/home/HomeViewModel.kt
rename to composeApp/src/commonMain/kotlin/com/vickbt/composeApp/ui/screens/home/HomeViewModel.kt
index 371ae935..446d88ad 100644
--- a/composeApp/src/commonMain/kotlin/com/vickbt/shared/ui/screens/home/HomeViewModel.kt
+++ b/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/ui/screens/home/HomeViewModel.kt
@@ -1,12 +1,12 @@
-package com.vickbt.shared.ui.screens.home
+package com.vickbt.composeApp.ui.screens.home
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
-import com.vickbt.shared.domain.repositories.MoviesRepository
-import com.vickbt.shared.utils.HomeUiState
-import com.vickbt.shared.utils.isLoading
-import com.vickbt.shared.utils.onFailure
-import com.vickbt.shared.utils.onSuccess
+import com.vickbt.composeApp.domain.repositories.MoviesRepository
+import com.vickbt.composeApp.utils.HomeUiState
+import com.vickbt.composeApp.utils.isLoading
+import com.vickbt.composeApp.utils.onFailure
+import com.vickbt.composeApp.utils.onSuccess
import kotlinx.coroutines.CoroutineExceptionHandler
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.asStateFlow
diff --git a/composeApp/src/commonMain/kotlin/com/vickbt/shared/ui/screens/main/MainScreen.kt b/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/ui/screens/main/MainScreen.kt
similarity index 87%
rename from composeApp/src/commonMain/kotlin/com/vickbt/shared/ui/screens/main/MainScreen.kt
rename to composeApp/src/commonMain/kotlin/com/vickbt/composeApp/ui/screens/main/MainScreen.kt
index 5c3d2841..14bd88a8 100644
--- a/composeApp/src/commonMain/kotlin/com/vickbt/shared/ui/screens/main/MainScreen.kt
+++ b/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/ui/screens/main/MainScreen.kt
@@ -1,4 +1,4 @@
-package com.vickbt.shared.ui.screens.main
+package com.vickbt.composeApp.ui.screens.main
import androidx.compose.foundation.layout.BoxWithConstraints
import androidx.compose.foundation.layout.Row
@@ -13,12 +13,12 @@ import androidx.compose.runtime.setValue
import androidx.compose.ui.Modifier
import androidx.navigation.compose.currentBackStackEntryAsState
import androidx.navigation.compose.rememberNavController
-import com.vickbt.shared.ui.components.BottomNavBar
-import com.vickbt.shared.ui.components.NavRailBar
-import com.vickbt.shared.ui.navigation.Navigation
-import com.vickbt.shared.ui.navigation.NavigationItem
-import com.vickbt.shared.ui.theme.NotflixTheme
-import com.vickbt.shared.utils.WindowSize
+import com.vickbt.composeApp.ui.components.BottomNavBar
+import com.vickbt.composeApp.ui.components.NavRailBar
+import com.vickbt.composeApp.ui.navigation.Navigation
+import com.vickbt.composeApp.ui.navigation.NavigationItem
+import com.vickbt.composeApp.ui.theme.NotflixTheme
+import com.vickbt.composeApp.utils.WindowSize
import org.koin.compose.viewmodel.koinViewModel
@Composable
diff --git a/composeApp/src/commonMain/kotlin/com/vickbt/shared/ui/screens/main/MainViewModel.kt b/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/ui/screens/main/MainViewModel.kt
similarity index 86%
rename from composeApp/src/commonMain/kotlin/com/vickbt/shared/ui/screens/main/MainViewModel.kt
rename to composeApp/src/commonMain/kotlin/com/vickbt/composeApp/ui/screens/main/MainViewModel.kt
index d956b212..06b54a7e 100644
--- a/composeApp/src/commonMain/kotlin/com/vickbt/shared/ui/screens/main/MainViewModel.kt
+++ b/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/ui/screens/main/MainViewModel.kt
@@ -1,9 +1,9 @@
-package com.vickbt.shared.ui.screens.main
+package com.vickbt.composeApp.ui.screens.main
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
-import com.vickbt.shared.domain.repositories.SettingsRepository
-import com.vickbt.shared.utils.MainUiState
+import com.vickbt.composeApp.domain.repositories.SettingsRepository
+import com.vickbt.composeApp.utils.MainUiState
import io.github.aakira.napier.Napier
import kotlinx.coroutines.CoroutineExceptionHandler
import kotlinx.coroutines.flow.MutableStateFlow
diff --git a/composeApp/src/commonMain/kotlin/com/vickbt/shared/ui/screens/search/SearchScreen.kt b/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/ui/screens/search/SearchScreen.kt
similarity index 97%
rename from composeApp/src/commonMain/kotlin/com/vickbt/shared/ui/screens/search/SearchScreen.kt
rename to composeApp/src/commonMain/kotlin/com/vickbt/composeApp/ui/screens/search/SearchScreen.kt
index f3c029d6..b4df5572 100644
--- a/composeApp/src/commonMain/kotlin/com/vickbt/shared/ui/screens/search/SearchScreen.kt
+++ b/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/ui/screens/search/SearchScreen.kt
@@ -1,6 +1,6 @@
@file:OptIn(KoinExperimentalAPI::class, ExperimentalMaterial3Api::class)
-package com.vickbt.shared.ui.screens.search
+package com.vickbt.composeApp.ui.screens.search
import androidx.compose.foundation.background
import androidx.compose.foundation.layout.Arrangement
@@ -40,8 +40,8 @@ import androidx.compose.ui.unit.sp
import androidx.navigation.NavHostController
import com.vickbt.shared.resources.Res
import com.vickbt.shared.resources.title_search
-import com.vickbt.shared.ui.components.MovieCardPortrait
-import com.vickbt.shared.utils.WindowSize
+import com.vickbt.composeApp.ui.components.MovieCardPortrait
+import com.vickbt.composeApp.utils.WindowSize
import org.jetbrains.compose.resources.stringResource
import org.koin.compose.viewmodel.koinViewModel
import org.koin.core.annotation.KoinExperimentalAPI
diff --git a/composeApp/src/commonMain/kotlin/com/vickbt/shared/ui/screens/search/SearchViewModel.kt b/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/ui/screens/search/SearchViewModel.kt
similarity index 84%
rename from composeApp/src/commonMain/kotlin/com/vickbt/shared/ui/screens/search/SearchViewModel.kt
rename to composeApp/src/commonMain/kotlin/com/vickbt/composeApp/ui/screens/search/SearchViewModel.kt
index 5563fcd5..c298a98f 100644
--- a/composeApp/src/commonMain/kotlin/com/vickbt/shared/ui/screens/search/SearchViewModel.kt
+++ b/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/ui/screens/search/SearchViewModel.kt
@@ -1,12 +1,12 @@
-package com.vickbt.shared.ui.screens.search
+package com.vickbt.composeApp.ui.screens.search
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
-import com.vickbt.shared.domain.repositories.SearchRepository
-import com.vickbt.shared.utils.SearchUiState
-import com.vickbt.shared.utils.isLoading
-import com.vickbt.shared.utils.onFailure
-import com.vickbt.shared.utils.onSuccess
+import com.vickbt.composeApp.domain.repositories.SearchRepository
+import com.vickbt.composeApp.utils.SearchUiState
+import com.vickbt.composeApp.utils.isLoading
+import com.vickbt.composeApp.utils.onFailure
+import com.vickbt.composeApp.utils.onSuccess
import kotlinx.coroutines.CoroutineExceptionHandler
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.asStateFlow
diff --git a/composeApp/src/commonMain/kotlin/com/vickbt/shared/ui/screens/settings/SettingsScreen.kt b/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/ui/screens/settings/SettingsScreen.kt
similarity index 90%
rename from composeApp/src/commonMain/kotlin/com/vickbt/shared/ui/screens/settings/SettingsScreen.kt
rename to composeApp/src/commonMain/kotlin/com/vickbt/composeApp/ui/screens/settings/SettingsScreen.kt
index 6340a00e..5dbc5551 100644
--- a/composeApp/src/commonMain/kotlin/com/vickbt/shared/ui/screens/settings/SettingsScreen.kt
+++ b/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/ui/screens/settings/SettingsScreen.kt
@@ -1,6 +1,6 @@
@file:OptIn(KoinExperimentalAPI::class)
-package com.vickbt.shared.ui.screens.settings
+package com.vickbt.composeApp.ui.screens.settings
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.PaddingValues
@@ -15,12 +15,12 @@ import androidx.compose.runtime.collectAsState
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.ui.Modifier
-import com.vickbt.shared.domain.utils.Constants.KEY_IMAGE_QUALITY
-import com.vickbt.shared.domain.utils.Constants.KEY_THEME
-import com.vickbt.shared.ui.components.appbars.AppBar
-import com.vickbt.shared.ui.components.preferences.DialogPreferenceSelection
-import com.vickbt.shared.ui.components.preferences.PreferencesGroup
-import com.vickbt.shared.ui.components.preferences.TextPreference
+import com.vickbt.composeApp.domain.utils.Constants.KEY_IMAGE_QUALITY
+import com.vickbt.composeApp.domain.utils.Constants.KEY_THEME
+import com.vickbt.composeApp.ui.components.appbars.AppBar
+import com.vickbt.composeApp.ui.components.preferences.DialogPreferenceSelection
+import com.vickbt.composeApp.ui.components.preferences.PreferencesGroup
+import com.vickbt.composeApp.ui.components.preferences.TextPreference
import com.vickbt.shared.resources.Res
import com.vickbt.shared.resources.change_image_quality
import com.vickbt.shared.resources.change_theme
diff --git a/composeApp/src/commonMain/kotlin/com/vickbt/shared/ui/screens/settings/SettingsViewModel.kt b/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/ui/screens/settings/SettingsViewModel.kt
similarity index 90%
rename from composeApp/src/commonMain/kotlin/com/vickbt/shared/ui/screens/settings/SettingsViewModel.kt
rename to composeApp/src/commonMain/kotlin/com/vickbt/composeApp/ui/screens/settings/SettingsViewModel.kt
index 7b2218d7..597f318a 100644
--- a/composeApp/src/commonMain/kotlin/com/vickbt/shared/ui/screens/settings/SettingsViewModel.kt
+++ b/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/ui/screens/settings/SettingsViewModel.kt
@@ -1,9 +1,9 @@
-package com.vickbt.shared.ui.screens.settings
+package com.vickbt.composeApp.ui.screens.settings
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
-import com.vickbt.shared.domain.repositories.SettingsRepository
-import com.vickbt.shared.utils.SettingsUiState
+import com.vickbt.composeApp.domain.repositories.SettingsRepository
+import com.vickbt.composeApp.utils.SettingsUiState
import kotlinx.coroutines.CoroutineExceptionHandler
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.asStateFlow
diff --git a/composeApp/src/commonMain/kotlin/com/vickbt/shared/ui/theme/Color.kt b/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/ui/theme/Color.kt
similarity index 92%
rename from composeApp/src/commonMain/kotlin/com/vickbt/shared/ui/theme/Color.kt
rename to composeApp/src/commonMain/kotlin/com/vickbt/composeApp/ui/theme/Color.kt
index 60e806f6..9e5bd485 100644
--- a/composeApp/src/commonMain/kotlin/com/vickbt/shared/ui/theme/Color.kt
+++ b/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/ui/theme/Color.kt
@@ -1,4 +1,4 @@
-package com.vickbt.shared.ui.theme
+package com.vickbt.composeApp.ui.theme
import androidx.compose.ui.graphics.Color
diff --git a/composeApp/src/commonMain/kotlin/com/vickbt/shared/ui/theme/Shape.kt b/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/ui/theme/Shape.kt
similarity index 87%
rename from composeApp/src/commonMain/kotlin/com/vickbt/shared/ui/theme/Shape.kt
rename to composeApp/src/commonMain/kotlin/com/vickbt/composeApp/ui/theme/Shape.kt
index c4cce329..7afbaa8a 100644
--- a/composeApp/src/commonMain/kotlin/com/vickbt/shared/ui/theme/Shape.kt
+++ b/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/ui/theme/Shape.kt
@@ -1,4 +1,4 @@
-package com.vickbt.shared.ui.theme
+package com.vickbt.composeApp.ui.theme
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material3.Shapes
diff --git a/composeApp/src/commonMain/kotlin/com/vickbt/shared/ui/theme/Theme.kt b/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/ui/theme/Theme.kt
similarity index 92%
rename from composeApp/src/commonMain/kotlin/com/vickbt/shared/ui/theme/Theme.kt
rename to composeApp/src/commonMain/kotlin/com/vickbt/composeApp/ui/theme/Theme.kt
index 70548c54..ef164d24 100644
--- a/composeApp/src/commonMain/kotlin/com/vickbt/shared/ui/theme/Theme.kt
+++ b/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/ui/theme/Theme.kt
@@ -1,6 +1,6 @@
@file:OptIn(ExperimentalCoilApi::class)
-package com.vickbt.shared.ui.theme
+package com.vickbt.composeApp.ui.theme
import androidx.compose.foundation.isSystemInDarkTheme
import androidx.compose.material3.MaterialTheme
@@ -9,7 +9,7 @@ import androidx.compose.material3.lightColorScheme
import androidx.compose.runtime.Composable
import coil3.annotation.ExperimentalCoilApi
import coil3.compose.setSingletonImageLoaderFactory
-import com.vickbt.shared.utils.getAsyncImageLoader
+import com.vickbt.composeApp.utils.getAsyncImageLoader
private val DarkColorPalette = darkColorScheme(
primary = DarkPrimaryColor,
diff --git a/composeApp/src/commonMain/kotlin/com/vickbt/shared/ui/theme/Type.kt b/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/ui/theme/Type.kt
similarity index 97%
rename from composeApp/src/commonMain/kotlin/com/vickbt/shared/ui/theme/Type.kt
rename to composeApp/src/commonMain/kotlin/com/vickbt/composeApp/ui/theme/Type.kt
index 47802282..27da4c14 100644
--- a/composeApp/src/commonMain/kotlin/com/vickbt/shared/ui/theme/Type.kt
+++ b/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/ui/theme/Type.kt
@@ -1,4 +1,4 @@
-package com.vickbt.shared.ui.theme
+package com.vickbt.composeApp.ui.theme
import androidx.compose.material3.Typography
import androidx.compose.runtime.Composable
diff --git a/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/utils/DatabaseFactory.kt b/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/utils/DatabaseFactory.kt
new file mode 100644
index 00000000..efc98a6e
--- /dev/null
+++ b/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/utils/DatabaseFactory.kt
@@ -0,0 +1,8 @@
+package com.vickbt.composeApp.utils
+
+import com.vickbt.composeApp.data.cache.AppDatabase
+
+expect class DatabaseFactory {
+
+ fun createDatabase(): AppDatabase
+}
diff --git a/composeApp/src/commonMain/kotlin/com/vickbt/shared/utils/DatastoreFactory.kt b/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/utils/DatastoreFactory.kt
similarity index 92%
rename from composeApp/src/commonMain/kotlin/com/vickbt/shared/utils/DatastoreFactory.kt
rename to composeApp/src/commonMain/kotlin/com/vickbt/composeApp/utils/DatastoreFactory.kt
index dfa2ffb9..13f54b75 100644
--- a/composeApp/src/commonMain/kotlin/com/vickbt/shared/utils/DatastoreFactory.kt
+++ b/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/utils/DatastoreFactory.kt
@@ -1,4 +1,4 @@
-package com.vickbt.shared.utils
+package com.vickbt.composeApp.utils
import androidx.datastore.core.DataStore
import androidx.datastore.preferences.core.PreferenceDataStoreFactory
diff --git a/composeApp/src/commonMain/kotlin/com/vickbt/shared/utils/Extensions.kt b/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/utils/Extensions.kt
similarity index 90%
rename from composeApp/src/commonMain/kotlin/com/vickbt/shared/utils/Extensions.kt
rename to composeApp/src/commonMain/kotlin/com/vickbt/composeApp/utils/Extensions.kt
index a474bcdd..c71432d8 100644
--- a/composeApp/src/commonMain/kotlin/com/vickbt/shared/utils/Extensions.kt
+++ b/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/utils/Extensions.kt
@@ -1,4 +1,4 @@
-package com.vickbt.shared.utils
+package com.vickbt.composeApp.utils
import androidx.compose.runtime.Composable
import androidx.compose.runtime.collectAsState
@@ -8,7 +8,7 @@ import coil3.memory.MemoryCache
import coil3.request.CachePolicy
import coil3.request.crossfade
import coil3.util.DebugLogger
-import com.vickbt.shared.ui.screens.settings.SettingsViewModel
+import com.vickbt.composeApp.ui.screens.settings.SettingsViewModel
import org.koin.compose.koinInject
/**
diff --git a/composeApp/src/commonMain/kotlin/com/vickbt/shared/utils/ResultState.kt b/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/utils/ResultState.kt
similarity index 95%
rename from composeApp/src/commonMain/kotlin/com/vickbt/shared/utils/ResultState.kt
rename to composeApp/src/commonMain/kotlin/com/vickbt/composeApp/utils/ResultState.kt
index 44ff5a0a..28ddf419 100644
--- a/composeApp/src/commonMain/kotlin/com/vickbt/shared/utils/ResultState.kt
+++ b/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/utils/ResultState.kt
@@ -1,4 +1,4 @@
-package com.vickbt.shared.utils
+package com.vickbt.composeApp.utils
sealed class ResultState {
data class Success(val data: T) : ResultState()
diff --git a/composeApp/src/commonMain/kotlin/com/vickbt/shared/utils/SharedExtensions.kt b/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/utils/SharedExtensions.kt
similarity index 94%
rename from composeApp/src/commonMain/kotlin/com/vickbt/shared/utils/SharedExtensions.kt
rename to composeApp/src/commonMain/kotlin/com/vickbt/composeApp/utils/SharedExtensions.kt
index 0a751eaf..283c468a 100644
--- a/composeApp/src/commonMain/kotlin/com/vickbt/shared/utils/SharedExtensions.kt
+++ b/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/utils/SharedExtensions.kt
@@ -1,4 +1,4 @@
-package com.vickbt.shared.utils
+package com.vickbt.composeApp.utils
import kotlinx.datetime.toLocalDate
@@ -52,6 +52,6 @@ fun Double.getRating(): String {
return "$before.$after"
}
-fun Long.toBoolean(): Boolean {
- return this != 0L
+fun Int.toBoolean(): Boolean {
+ return this != 0
}
diff --git a/composeApp/src/commonMain/kotlin/com/vickbt/shared/utils/UiStates.kt b/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/utils/UiStates.kt
similarity index 85%
rename from composeApp/src/commonMain/kotlin/com/vickbt/shared/utils/UiStates.kt
rename to composeApp/src/commonMain/kotlin/com/vickbt/composeApp/utils/UiStates.kt
index 69419d3a..a45b4059 100644
--- a/composeApp/src/commonMain/kotlin/com/vickbt/shared/utils/UiStates.kt
+++ b/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/utils/UiStates.kt
@@ -1,8 +1,8 @@
-package com.vickbt.shared.utils
+package com.vickbt.composeApp.utils
-import com.vickbt.shared.domain.models.Actor
-import com.vickbt.shared.domain.models.Movie
-import com.vickbt.shared.domain.models.MovieDetails
+import com.vickbt.composeApp.domain.models.Actor
+import com.vickbt.composeApp.domain.models.Movie
+import com.vickbt.composeApp.domain.models.MovieDetails
data class MainUiState(
val selectedTheme: Int? = 0
diff --git a/composeApp/src/commonMain/kotlin/com/vickbt/shared/utils/WindowSize.kt b/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/utils/WindowSize.kt
similarity index 95%
rename from composeApp/src/commonMain/kotlin/com/vickbt/shared/utils/WindowSize.kt
rename to composeApp/src/commonMain/kotlin/com/vickbt/composeApp/utils/WindowSize.kt
index 61a014a2..3b68448c 100644
--- a/composeApp/src/commonMain/kotlin/com/vickbt/shared/utils/WindowSize.kt
+++ b/composeApp/src/commonMain/kotlin/com/vickbt/composeApp/utils/WindowSize.kt
@@ -1,4 +1,4 @@
-package com.vickbt.shared.utils
+package com.vickbt.composeApp.utils
import androidx.compose.foundation.layout.BoxWithConstraintsScope
import androidx.compose.runtime.Composable
diff --git a/composeApp/src/commonMain/kotlin/com/vickbt/shared/data/cache/sqldelight/AppDatabase.sq b/composeApp/src/commonMain/kotlin/com/vickbt/shared/data/cache/sqldelight/AppDatabase.sq
deleted file mode 100644
index 6bb3d4c2..00000000
--- a/composeApp/src/commonMain/kotlin/com/vickbt/shared/data/cache/sqldelight/AppDatabase.sq
+++ /dev/null
@@ -1,42 +0,0 @@
-CREATE TABLE FavoriteMovieEntity(
-id INTEGER PRIMARY KEY NOT NULL,
-imdbId TEXT DEFAULT NULL,
-backdropPath TEXT DEFAULT NULL,
-posterPath TEXT DEFAULT NULL,
-originalLanguage TEXT DEFAULT NULL,
-originalTitle TEXT DEFAULT NULL,
-overview TEXT DEFAULT NULL,
-popularity REAL DEFAULT NULL,
-releaseDate TEXT DEFAULT NULL,
-runTime INTEGER DEFAULT NULL,
-status TEXT DEFAULT NULL,
-tagLine TEXT DEFAULT NULL,
-title TEXT DEFAULT NULL,
-voteAverage REAL DEFAULT NULL,
-voteCount INTEGER DEFAULT NULL,
-createdAt TEXT NOT NULL
-);
-
-insertFavoriteMovie:
-INSERT OR REPLACE INTO FavoriteMovieEntity(id, imdbId,backdropPath,posterPath,originalLanguage,originalTitle, overview, popularity, releaseDate, runTime,status, tagLine,title,voteAverage,voteCount, createdAt)
-VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?);
-
-getAllFavoriteMovies:
-SELECT * FROM FavoriteMovieEntity
-ORDER BY createdAt DESC;
-
-getFavoriteMovie:
-SELECT * FROM FavoriteMovieEntity
-WHERE id=?;
-
-deleteFavoriteMovie:
-DELETE FROM FavoriteMovieEntity
-WHERE id=?;
-
-deleteAllFavoriteMovies:
-DELETE FROM FavoriteMovieEntity;
-
-isMovieFavorite:
-SELECT COUNT(1)
-FROM FavoriteMovieEntity
-WHERE id=?;
\ No newline at end of file
diff --git a/composeApp/src/commonMain/kotlin/com/vickbt/shared/data/cache/sqldelight/daos/FavoriteMovieDao.kt b/composeApp/src/commonMain/kotlin/com/vickbt/shared/data/cache/sqldelight/daos/FavoriteMovieDao.kt
deleted file mode 100644
index 2424c8d1..00000000
--- a/composeApp/src/commonMain/kotlin/com/vickbt/shared/data/cache/sqldelight/daos/FavoriteMovieDao.kt
+++ /dev/null
@@ -1,60 +0,0 @@
-package com.vickbt.shared.data.cache.sqldelight.daos
-
-import app.cash.sqldelight.coroutines.asFlow
-import app.cash.sqldelight.coroutines.mapToList
-import com.vickbt.shared.data.cache.sqldelight.AppDatabase
-import com.vickbt.shared.domain.models.MovieDetails
-import com.vickbt.shared.utils.DatabaseDriverFactory
-import kotlinx.coroutines.Dispatchers
-import kotlinx.coroutines.IO
-import kotlinx.datetime.Clock
-import kotlinx.datetime.TimeZone
-import kotlinx.datetime.toLocalDateTime
-
-class FavoriteMovieDao(private val databaseDriverFactory: DatabaseDriverFactory) {
-
- val appDatabase = AppDatabase(driver = databaseDriverFactory.createDriver())
- val dbQuery = appDatabase.appDatabaseQueries
-
- /**Save movie details in FavoriteMovie table*/
- fun saveFavoriteMovie(movie: MovieDetails) {
- dbQuery.transaction {
- dbQuery.insertFavoriteMovie(
- id = movie.id.toLong(),
- imdbId = movie.imdbId,
- backdropPath = movie.backdropPath,
- posterPath = movie.posterPath,
- originalLanguage = movie.originalLanguage,
- originalTitle = movie.originalTitle,
- overview = movie.overview,
- popularity = movie.popularity,
- releaseDate = movie.releaseDate,
- runTime = movie.runtime?.toLong(),
- status = movie.status,
- tagLine = movie.tagline,
- title = movie.title,
- voteAverage = movie.voteAverage,
- voteCount = movie.voteCount?.toLong(),
- createdAt = Clock.System.now().toLocalDateTime(TimeZone.currentSystemDefault())
- .toString()
- )
- }
- }
-
- /**Returns a list of all movie details in FavoriteMovie table*/
- fun getAllFavoriteMovies() = dbQuery.getAllFavoriteMovies().asFlow().mapToList(Dispatchers.IO)
-
- /**Get single movies from FavoriteMovie table based on its ID*/
- fun getFavoriteMovie(movieId: Int) =
- dbQuery.getFavoriteMovie(id = movieId.toLong()).executeAsOne()
-
- /**Delete favorite movie details based on its ID*/
- fun deleteFavouriteMovie(movieId: Int) = dbQuery.deleteFavoriteMovie(id = movieId.toLong())
-
- /**Delete all favorite movie details in FavoriteMovie table*/
- fun deleteAllFavouriteMovies() = dbQuery.deleteAllFavoriteMovies()
-
- /**Return value depending on whether movie details is in FavoriteMovie table*/
- fun isMovieFavorite(movieId: Int) =
- dbQuery.isMovieFavorite(id = movieId.toLong()).executeAsOneOrNull()
-}
diff --git a/composeApp/src/commonMain/kotlin/com/vickbt/shared/data/datasources/FavoritesRepositoryImpl.kt b/composeApp/src/commonMain/kotlin/com/vickbt/shared/data/datasources/FavoritesRepositoryImpl.kt
deleted file mode 100644
index 602cfb86..00000000
--- a/composeApp/src/commonMain/kotlin/com/vickbt/shared/data/datasources/FavoritesRepositoryImpl.kt
+++ /dev/null
@@ -1,17 +0,0 @@
-package com.vickbt.shared.data.datasources
-
-import com.vickbt.shared.data.cache.sqldelight.daos.FavoriteMovieDao
-import com.vickbt.shared.data.mappers.toDomain
-import com.vickbt.shared.domain.models.MovieDetails
-import com.vickbt.shared.domain.repositories.FavoritesRepository
-import kotlinx.coroutines.flow.Flow
-import kotlinx.coroutines.flow.map
-
-class FavoritesRepositoryImpl(private val favoriteMovieDao: FavoriteMovieDao) :
- FavoritesRepository {
-
- override suspend fun getFavouriteMovies(): Flow> {
- return favoriteMovieDao.getAllFavoriteMovies()
- .map { it.map { movieDetail -> movieDetail.toDomain() } }
- }
-}
diff --git a/composeApp/src/commonMain/kotlin/com/vickbt/shared/utils/DatabaseDriverFactory.kt b/composeApp/src/commonMain/kotlin/com/vickbt/shared/utils/DatabaseDriverFactory.kt
deleted file mode 100644
index c0dc2bd7..00000000
--- a/composeApp/src/commonMain/kotlin/com/vickbt/shared/utils/DatabaseDriverFactory.kt
+++ /dev/null
@@ -1,7 +0,0 @@
-package com.vickbt.shared.utils
-
-import app.cash.sqldelight.db.SqlDriver
-
-expect class DatabaseDriverFactory {
- fun createDriver(): SqlDriver
-}
diff --git a/composeApp/src/desktopMain/kotlin/com/vickbt/composeApp/di/Module.desktop.kt b/composeApp/src/desktopMain/kotlin/com/vickbt/composeApp/di/Module.desktop.kt
new file mode 100644
index 00000000..ec107997
--- /dev/null
+++ b/composeApp/src/desktopMain/kotlin/com/vickbt/composeApp/di/Module.desktop.kt
@@ -0,0 +1,11 @@
+package com.vickbt.composeApp.di
+
+import com.vickbt.composeApp.utils.DatabaseFactory
+import com.vickbt.composeApp.utils.DatastoreFactory
+import org.koin.core.module.Module
+import org.koin.dsl.module
+
+actual fun platformModule(): Module = module {
+ single { DatastoreFactory().createDatastore() }
+ single { DatabaseFactory().createDatabase() }
+}
diff --git a/composeApp/src/desktopMain/kotlin/com/vickbt/shared/ui/windows/MainWindow.kt b/composeApp/src/desktopMain/kotlin/com/vickbt/composeApp/ui/windows/MainWindow.kt
similarity index 85%
rename from composeApp/src/desktopMain/kotlin/com/vickbt/shared/ui/windows/MainWindow.kt
rename to composeApp/src/desktopMain/kotlin/com/vickbt/composeApp/ui/windows/MainWindow.kt
index 1e69fe98..598f2d27 100644
--- a/composeApp/src/desktopMain/kotlin/com/vickbt/shared/ui/windows/MainWindow.kt
+++ b/composeApp/src/desktopMain/kotlin/com/vickbt/composeApp/ui/windows/MainWindow.kt
@@ -1,4 +1,4 @@
-package com.vickbt.shared.ui.windows
+package com.vickbt.composeApp.ui.windows
import androidx.compose.ui.Alignment
import androidx.compose.ui.unit.dp
@@ -6,8 +6,8 @@ import androidx.compose.ui.window.Window
import androidx.compose.ui.window.WindowPosition
import androidx.compose.ui.window.application
import androidx.compose.ui.window.rememberWindowState
-import com.vickbt.shared.di.initKoin
-import com.vickbt.shared.ui.screens.main.MainScreen
+import com.vickbt.composeApp.di.initKoin
+import com.vickbt.composeApp.ui.screens.main.MainScreen
import org.koin.core.Koin
lateinit var koin: Koin
diff --git a/composeApp/src/desktopMain/kotlin/com/vickbt/composeApp/utils/DatabaseFactory.desktop.kt b/composeApp/src/desktopMain/kotlin/com/vickbt/composeApp/utils/DatabaseFactory.desktop.kt
new file mode 100644
index 00000000..84efdb0d
--- /dev/null
+++ b/composeApp/src/desktopMain/kotlin/com/vickbt/composeApp/utils/DatabaseFactory.desktop.kt
@@ -0,0 +1,17 @@
+package com.vickbt.composeApp.utils
+
+import androidx.room.Room
+import androidx.sqlite.driver.bundled.BundledSQLiteDriver
+import com.vickbt.composeApp.data.cache.AppDatabase
+import kotlinx.coroutines.Dispatchers
+import java.io.File
+
+actual class DatabaseFactory {
+ actual fun createDatabase(): AppDatabase {
+ val dbFile = File(System.getProperty("java.io.tmpdir"), "notflix.db")
+ return Room.databaseBuilder(
+ name = dbFile.absolutePath,
+ ).setQueryCoroutineContext(Dispatchers.IO).fallbackToDestructiveMigration(true)
+ .setDriver(BundledSQLiteDriver()).build()
+ }
+}
diff --git a/composeApp/src/desktopMain/kotlin/com/vickbt/shared/utils/DatastoreFactory.desktop.kt b/composeApp/src/desktopMain/kotlin/com/vickbt/composeApp/utils/DatastoreFactory.desktop.kt
similarity index 64%
rename from composeApp/src/desktopMain/kotlin/com/vickbt/shared/utils/DatastoreFactory.desktop.kt
rename to composeApp/src/desktopMain/kotlin/com/vickbt/composeApp/utils/DatastoreFactory.desktop.kt
index d3420a93..2e69142c 100644
--- a/composeApp/src/desktopMain/kotlin/com/vickbt/shared/utils/DatastoreFactory.desktop.kt
+++ b/composeApp/src/desktopMain/kotlin/com/vickbt/composeApp/utils/DatastoreFactory.desktop.kt
@@ -1,13 +1,13 @@
-package com.vickbt.shared.utils
+package com.vickbt.composeApp.utils
import androidx.datastore.core.DataStore
import androidx.datastore.preferences.core.Preferences
-import com.vickbt.shared.domain.utils.Constants
+import com.vickbt.composeApp.domain.utils.Constants
actual class DatastoreFactory {
actual fun createDatastore(): DataStore {
return initDataStore {
- Constants.dataStoreFileName
+ Constants.DATASTORE_FILE_NAME
}
}
}
diff --git a/composeApp/src/desktopMain/kotlin/com/vickbt/shared/di/Module.kt b/composeApp/src/desktopMain/kotlin/com/vickbt/shared/di/Module.kt
deleted file mode 100644
index 9a6c3113..00000000
--- a/composeApp/src/desktopMain/kotlin/com/vickbt/shared/di/Module.kt
+++ /dev/null
@@ -1,11 +0,0 @@
-package com.vickbt.shared.di
-
-import com.vickbt.shared.utils.DatabaseDriverFactory
-import com.vickbt.shared.utils.DatastoreFactory
-import org.koin.core.module.Module
-import org.koin.dsl.module
-
-actual fun platformModule(): Module = module {
- single { DatabaseDriverFactory() }
- single { DatastoreFactory().createDatastore() }
-}
diff --git a/composeApp/src/desktopMain/kotlin/com/vickbt/shared/utils/DatabaseDriverFactory.kt b/composeApp/src/desktopMain/kotlin/com/vickbt/shared/utils/DatabaseDriverFactory.kt
deleted file mode 100644
index f9df2948..00000000
--- a/composeApp/src/desktopMain/kotlin/com/vickbt/shared/utils/DatabaseDriverFactory.kt
+++ /dev/null
@@ -1,13 +0,0 @@
-package com.vickbt.shared.utils
-
-import app.cash.sqldelight.db.SqlDriver
-import app.cash.sqldelight.driver.jdbc.sqlite.JdbcSqliteDriver
-import com.vickbt.shared.data.cache.sqldelight.AppDatabase
-
-actual class DatabaseDriverFactory {
- actual fun createDriver(): SqlDriver {
- return JdbcSqliteDriver(JdbcSqliteDriver.IN_MEMORY).also {
- AppDatabase.Schema.create(it)
- }
- }
-}
diff --git a/composeApp/src/iosMain/kotlin/com/vickbt/composeApp/di/Module.ios.kt b/composeApp/src/iosMain/kotlin/com/vickbt/composeApp/di/Module.ios.kt
new file mode 100644
index 00000000..ec107997
--- /dev/null
+++ b/composeApp/src/iosMain/kotlin/com/vickbt/composeApp/di/Module.ios.kt
@@ -0,0 +1,11 @@
+package com.vickbt.composeApp.di
+
+import com.vickbt.composeApp.utils.DatabaseFactory
+import com.vickbt.composeApp.utils.DatastoreFactory
+import org.koin.core.module.Module
+import org.koin.dsl.module
+
+actual fun platformModule(): Module = module {
+ single { DatastoreFactory().createDatastore() }
+ single { DatabaseFactory().createDatabase() }
+}
diff --git a/composeApp/src/iosMain/kotlin/com/vickbt/composeApp/utils/DatabaseFactory.ios.kt b/composeApp/src/iosMain/kotlin/com/vickbt/composeApp/utils/DatabaseFactory.ios.kt
new file mode 100644
index 00000000..e2ad8ee3
--- /dev/null
+++ b/composeApp/src/iosMain/kotlin/com/vickbt/composeApp/utils/DatabaseFactory.ios.kt
@@ -0,0 +1,31 @@
+@file:OptIn(ExperimentalForeignApi::class)
+
+package com.vickbt.composeApp.utils
+
+import androidx.room.Room
+import androidx.sqlite.driver.bundled.BundledSQLiteDriver
+import com.vickbt.composeApp.data.cache.AppDatabase
+import kotlinx.cinterop.ExperimentalForeignApi
+import kotlinx.coroutines.Dispatchers
+import kotlinx.coroutines.IO
+import platform.Foundation.NSDocumentDirectory
+import platform.Foundation.NSFileManager
+import platform.Foundation.NSUserDomainMask
+
+actual class DatabaseFactory {
+ actual fun createDatabase(): AppDatabase {
+ val documentDirectory = NSFileManager.defaultManager.URLForDirectory(
+ directory = NSDocumentDirectory,
+ inDomain = NSUserDomainMask,
+ appropriateForURL = null,
+ create = false,
+ error = null,
+ )
+
+ val dbFilePath = requireNotNull(documentDirectory?.path) + "/notflix.db"
+ return Room.databaseBuilder(
+ name = dbFilePath,
+ ).setQueryCoroutineContext(Dispatchers.IO).fallbackToDestructiveMigration(true)
+ .setDriver(BundledSQLiteDriver()).build()
+ }
+}
diff --git a/composeApp/src/iosMain/kotlin/com/vickbt/shared/utils/DatastoreFactory.ios.kt b/composeApp/src/iosMain/kotlin/com/vickbt/composeApp/utils/DatastoreFactory.ios.kt
similarity index 81%
rename from composeApp/src/iosMain/kotlin/com/vickbt/shared/utils/DatastoreFactory.ios.kt
rename to composeApp/src/iosMain/kotlin/com/vickbt/composeApp/utils/DatastoreFactory.ios.kt
index c5d8535f..3294d887 100644
--- a/composeApp/src/iosMain/kotlin/com/vickbt/shared/utils/DatastoreFactory.ios.kt
+++ b/composeApp/src/iosMain/kotlin/com/vickbt/composeApp/utils/DatastoreFactory.ios.kt
@@ -1,10 +1,10 @@
@file:OptIn(ExperimentalForeignApi::class)
-package com.vickbt.shared.utils
+package com.vickbt.composeApp.utils
import androidx.datastore.core.DataStore
import androidx.datastore.preferences.core.Preferences
-import com.vickbt.shared.domain.utils.Constants
+import com.vickbt.composeApp.domain.utils.Constants
import kotlinx.cinterop.ExperimentalForeignApi
import platform.Foundation.NSDocumentDirectory
import platform.Foundation.NSFileManager
@@ -20,7 +20,7 @@ actual class DatastoreFactory {
create = false,
error = null
)
- requireNotNull(directory).path() + "/${Constants.dataStoreFileName}"
+ requireNotNull(directory).path() + "/${Constants.DATASTORE_FILE_NAME}"
}
}
}
diff --git a/composeApp/src/iosMain/kotlin/com/vickbt/shared/utils/MainViewController.kt b/composeApp/src/iosMain/kotlin/com/vickbt/composeApp/utils/MainViewController.kt
similarity index 58%
rename from composeApp/src/iosMain/kotlin/com/vickbt/shared/utils/MainViewController.kt
rename to composeApp/src/iosMain/kotlin/com/vickbt/composeApp/utils/MainViewController.kt
index 4029c5cf..e2d4ed3a 100644
--- a/composeApp/src/iosMain/kotlin/com/vickbt/shared/utils/MainViewController.kt
+++ b/composeApp/src/iosMain/kotlin/com/vickbt/composeApp/utils/MainViewController.kt
@@ -1,6 +1,6 @@
-package com.vickbt.shared.utils
+package com.vickbt.composeApp.utils
import androidx.compose.ui.window.ComposeUIViewController
-import com.vickbt.shared.ui.screens.main.MainScreen
+import com.vickbt.composeApp.ui.screens.main.MainScreen
fun MainViewController() = ComposeUIViewController { MainScreen() }
diff --git a/composeApp/src/iosMain/kotlin/com/vickbt/shared/di/Module.kt b/composeApp/src/iosMain/kotlin/com/vickbt/shared/di/Module.kt
deleted file mode 100644
index 9a6c3113..00000000
--- a/composeApp/src/iosMain/kotlin/com/vickbt/shared/di/Module.kt
+++ /dev/null
@@ -1,11 +0,0 @@
-package com.vickbt.shared.di
-
-import com.vickbt.shared.utils.DatabaseDriverFactory
-import com.vickbt.shared.utils.DatastoreFactory
-import org.koin.core.module.Module
-import org.koin.dsl.module
-
-actual fun platformModule(): Module = module {
- single { DatabaseDriverFactory() }
- single { DatastoreFactory().createDatastore() }
-}
diff --git a/composeApp/src/iosMain/kotlin/com/vickbt/shared/utils/DatabaseDriverFactory.kt b/composeApp/src/iosMain/kotlin/com/vickbt/shared/utils/DatabaseDriverFactory.kt
deleted file mode 100644
index 184b28e4..00000000
--- a/composeApp/src/iosMain/kotlin/com/vickbt/shared/utils/DatabaseDriverFactory.kt
+++ /dev/null
@@ -1,11 +0,0 @@
-package com.vickbt.shared.utils
-
-import app.cash.sqldelight.db.SqlDriver
-import app.cash.sqldelight.driver.native.NativeSqliteDriver
-import com.vickbt.shared.data.cache.sqldelight.AppDatabase
-
-actual class DatabaseDriverFactory {
- actual fun createDriver(): SqlDriver {
- return NativeSqliteDriver(AppDatabase.Schema, "Notflix.db")
- }
-}
diff --git a/gradle.properties b/gradle.properties
index eb3f6301..35615e1c 100644
--- a/gradle.properties
+++ b/gradle.properties
@@ -35,3 +35,5 @@ kotlin.native.cocoapods.generate.wrapper=true
org.jetbrains.compose.experimental.jscanvas.enabled=true
org.jetbrains.compose.experimental.macos.enabled=true
kotlin.native.useEmbeddableCompilerJar=true
+
+kotlin.native.disableCompilerDaemon=true
\ No newline at end of file
diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml
index 1067c136..4a734f32 100644
--- a/gradle/libs.versions.toml
+++ b/gradle/libs.versions.toml
@@ -1,5 +1,5 @@
[versions]
-kotlin = "2.0.0"
+kotlin = "2.0.20"
gradle = "8.1.4"
ktLint = "11.6.0"
detekt = "1.23.6"
@@ -26,6 +26,9 @@ materialWindowSizeClass = "0.3.0"
navigation = "2.7.0-alpha07"
coil = "3.0.0-alpha06"
datastore = "1.1.1"
+ksp = "2.0.20-1.0.24"
+sqlite = "2.5.0-SNAPSHOT"
+room = "2.7.0-alpha08"
#Android Versions
androidxActivity = "1.8.2"
@@ -50,7 +53,8 @@ kotlinX-serialization-plugin = { id = "org.jetbrains.kotlin.plugin.serialization
buildKonfig = { id = "com.codingfeline.buildkonfig", version.ref = "buildKonfig" }
compose = { id = "org.jetbrains.compose", version.ref = "composeMultiplatform" }
compose-compiler = { id = "org.jetbrains.kotlin.plugin.compose", version.ref = "kotlin" }
-sqlDelight = { id = "app.cash.sqldelight", version.ref = "sqlDelight" }
+ksp = { id = "com.google.devtools.ksp", version.ref = "ksp" }
+room = { id = "androidx.room", version.ref = "room" }
googleServices-plugin = { id = "com.google.gms.google-services", version.ref = "googleServices" }
@@ -73,11 +77,6 @@ ktor-mock = { module = "io.ktor:ktor-client-mock", version.ref = "ktor" }
ktor-android = { module = "io.ktor:ktor-client-android", version.ref = "ktor" }
ktor-java = { module = "io.ktor:ktor-client-java", version.ref = "ktor" }
ktor-darwin = { module = "io.ktor:ktor-client-darwin", version.ref = "ktor" }
-sqlDelight = { module = "app.cash.sqldelight:runtime", version.ref = "sqlDelight" }
-sqlDelight-coroutine = { module = "app.cash.sqldelight:coroutines-extensions", version.ref = "sqlDelight" }
-sqlDelight-android = { module = "app.cash.sqldelight:android-driver", version.ref = "sqlDelight" }
-sqlDelight-native = { module = "app.cash.sqldelight:native-driver", version.ref = "sqlDelight" }
-sqlDelight-JVM = { module = "app.cash.sqldelight:sqlite-driver", version.ref = "sqlDelight" }
napier = { module = "io.github.aakira:napier", version.ref = "napier" }
kotlinX-dateTime = { module = "org.jetbrains.kotlinx:kotlinx-datetime", version.ref = "kotlinxDateTime" }
material-windowSizeClass = { module = "dev.chrisbanes.material3:material3-window-size-class-multiplatform", version.ref = "materialWindowSizeClass" }
@@ -86,6 +85,9 @@ coil-compose = { module = "io.coil-kt.coil3:coil-compose", version.ref = "coil"
coil-compose-core = { module = "io.coil-kt.coil3:coil-compose-core", version.ref = "coil" }
coil-ktor = { module = "io.coil-kt.coil3:coil-network-ktor", version.ref = "coil" }
coil-multiplatform = { module = "io.coil-kt.coil3:coil", version.ref = "coil" }
+room-compiler = { group = "androidx.room", name = "room-compiler", version.ref = "room" }
+room-runtime = { group = "androidx.room", name = "room-runtime", version.ref = "room" }
+sqlite-bundled = { module = "androidx.sqlite:sqlite-bundled", version.ref = "sqlite" }
#Android Lib Dependencies
androidX-core = { module = "androidx.core:core-ktx", version.ref = "androidxCore" }
diff --git a/shared/schemas/com.vickbt.shared.data.cache.room.AppDatabase/1.json b/shared/schemas/com.vickbt.shared.data.cache.room.AppDatabase/1.json
new file mode 100644
index 00000000..cbfc3d4d
--- /dev/null
+++ b/shared/schemas/com.vickbt.shared.data.cache.room.AppDatabase/1.json
@@ -0,0 +1,106 @@
+{
+ "formatVersion": 1,
+ "database": {
+ "version": 1,
+ "identityHash": "f42990db2e9e1c5e1da7e5ccde59dfdf",
+ "entities": [
+ {
+ "tableName": "Favorite Movie Table",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER NOT NULL, `imdbId` TEXT, `backdropPath` TEXT, `posterPath` TEXT, `originalLanguage` TEXT, `originalTitle` TEXT, `overview` TEXT, `popularity` REAL, `releaseDate` TEXT, `runTime` INTEGER, `status` TEXT, `tagLine` TEXT, `title` TEXT, `voteAverage` REAL, `voteCount` INTEGER, `createdAt` TEXT, PRIMARY KEY(`id`))",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "id",
+ "affinity": "INTEGER",
+ "notNull": true
+ },
+ {
+ "fieldPath": "imdbId",
+ "columnName": "imdbId",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "backdropPath",
+ "columnName": "backdropPath",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "posterPath",
+ "columnName": "posterPath",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "originalLanguage",
+ "columnName": "originalLanguage",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "originalTitle",
+ "columnName": "originalTitle",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "overview",
+ "columnName": "overview",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "popularity",
+ "columnName": "popularity",
+ "affinity": "REAL"
+ },
+ {
+ "fieldPath": "releaseDate",
+ "columnName": "releaseDate",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "runTime",
+ "columnName": "runTime",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "status",
+ "columnName": "status",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "tagLine",
+ "columnName": "tagLine",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "title",
+ "columnName": "title",
+ "affinity": "TEXT"
+ },
+ {
+ "fieldPath": "voteAverage",
+ "columnName": "voteAverage",
+ "affinity": "REAL"
+ },
+ {
+ "fieldPath": "voteCount",
+ "columnName": "voteCount",
+ "affinity": "INTEGER"
+ },
+ {
+ "fieldPath": "createdAt",
+ "columnName": "createdAt",
+ "affinity": "TEXT"
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": false,
+ "columnNames": [
+ "id"
+ ]
+ }
+ }
+ ],
+ "setupQueries": [
+ "CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)",
+ "INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, 'f42990db2e9e1c5e1da7e5ccde59dfdf')"
+ ]
+ }
+}
\ No newline at end of file
diff --git a/shared/src/commonMain/kotlin/com/vickbt/shared/data/cache/room/RoomAppDatabase.kt b/shared/src/commonMain/kotlin/com/vickbt/shared/data/cache/room/RoomAppDatabase.kt
new file mode 100644
index 00000000..15a6d08d
--- /dev/null
+++ b/shared/src/commonMain/kotlin/com/vickbt/shared/data/cache/room/RoomAppDatabase.kt
@@ -0,0 +1,14 @@
+package com.vickbt.shared.data.cache.room
+
+import androidx.room.Database
+import androidx.room.RoomDatabase
+import androidx.sqlite.driver.bundled.BundledSQLiteDriver
+import com.vickbt.shared.data.cache.room.daos.FavoriteMovieDao
+import com.vickbt.shared.data.cache.room.entities.FavoriteMovieEntity
+import kotlinx.coroutines.Dispatchers
+import kotlinx.coroutines.IO
+
+@Database(entities = [FavoriteMovieEntity::class], version = 1)
+abstract class RoomAppDatabase : RoomDatabase() {
+ abstract fun favoriteMovieDao(): FavoriteMovieDao
+}
diff --git a/shared/src/commonMain/kotlin/com/vickbt/shared/data/cache/room/daos/FavoriteMovieDao.kt b/shared/src/commonMain/kotlin/com/vickbt/shared/data/cache/room/daos/FavoriteMovieDao.kt
new file mode 100644
index 00000000..dafb2c75
--- /dev/null
+++ b/shared/src/commonMain/kotlin/com/vickbt/shared/data/cache/room/daos/FavoriteMovieDao.kt
@@ -0,0 +1,31 @@
+package com.vickbt.shared.data.cache.room.daos
+
+import androidx.room.Dao
+import androidx.room.Insert
+import androidx.room.OnConflictStrategy
+import androidx.room.Query
+import com.vickbt.shared.data.cache.room.entities.FavoriteMovieEntity
+import kotlinx.coroutines.flow.Flow
+
+@Dao
+interface FavoriteMovieDao {
+
+ @Insert(onConflict = OnConflictStrategy.REPLACE)
+ suspend fun insertFavoriteMovie(favoriteMovie: FavoriteMovieEntity)
+
+ @Query("SELECT * FROM `Favorite Movie Table` ORDER BY createdAt DESC")
+ fun getAllFavoriteMovies(): Flow>
+
+ @Query("SELECT * FROM `Favorite Movie Table` WHERE id = :id")
+ suspend fun getFavoriteMovie(id: Int): FavoriteMovieEntity?
+
+ @Query("DELETE FROM `Favorite Movie Table` WHERE id = :id")
+ suspend fun deleteFavoriteMovie(id: Int): Int
+
+ @Query("DELETE FROM `Favorite Movie Table`")
+ suspend fun deleteAllFavoriteMovies()
+
+ @Query("SELECT count(1) FROM `Favorite Movie Table` WHERE id = :id")
+ suspend fun isMovieFavorite(id: Int): Int
+}
+
diff --git a/shared/src/commonMain/kotlin/com/vickbt/shared/data/cache/room/entities/FavoriteMovieEntity.kt b/shared/src/commonMain/kotlin/com/vickbt/shared/data/cache/room/entities/FavoriteMovieEntity.kt
new file mode 100644
index 00000000..4e821843
--- /dev/null
+++ b/shared/src/commonMain/kotlin/com/vickbt/shared/data/cache/room/entities/FavoriteMovieEntity.kt
@@ -0,0 +1,26 @@
+package com.vickbt.shared.data.cache.room.entities
+
+import androidx.room.Entity
+import androidx.room.PrimaryKey
+
+@Entity(tableName = "Favorite Movie Table")
+data class FavoriteMovieEntity(
+ @PrimaryKey(autoGenerate = false)
+ val id: Int,
+
+ val imdbId: String?,
+ val backdropPath: String?,
+ val posterPath: String?,
+ val originalLanguage: String?,
+ val originalTitle: String?,
+ val overview: String?,
+ val popularity: Double?,
+ val releaseDate: String?,
+ val runTime: Int?,
+ val status: String?,
+ val tagLine: String?,
+ val title: String?,
+ val voteAverage: Double?,
+ val voteCount: Int?,
+ val createdAt: String?
+)