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? +)