From fd95dd9713cdeffcacf5eaf9466e76e74f8544ea Mon Sep 17 00:00:00 2001 From: Hieu Vu Date: Tue, 19 Dec 2023 22:06:27 +0700 Subject: [PATCH 1/7] Uplift change for kotlin --- .../groceriesstore/data/database/dao/CategoryDao.kt | 2 +- .../groceriesstore/data/database/dao/LineItemDao.kt | 6 +++--- .../groceriesstore/data/database/dao/OrderDao.kt | 5 ++--- .../groceriesstore/data/database/dao/ProductDao.kt | 4 +--- .../groceriesstore/data/database/dao/RecipeDao.kt | 2 +- .../groceriesstore/data/database/dao/UserDao.kt | 6 +++--- .../data/database/entities/LineItem.kt | 12 ++---------- 7 files changed, 13 insertions(+), 24 deletions(-) diff --git a/app/src/main/java/com/hieuwu/groceriesstore/data/database/dao/CategoryDao.kt b/app/src/main/java/com/hieuwu/groceriesstore/data/database/dao/CategoryDao.kt index 4a740d93..6923de02 100644 --- a/app/src/main/java/com/hieuwu/groceriesstore/data/database/dao/CategoryDao.kt +++ b/app/src/main/java/com/hieuwu/groceriesstore/data/database/dao/CategoryDao.kt @@ -14,7 +14,7 @@ interface CategoryDao { fun insert(category: Category) @Insert(onConflict = OnConflictStrategy.REPLACE) - suspend fun insertAll(category: List) + fun insertAll(category: List) @Query("SELECT * FROM $CATEGORY_TABLE") fun getAll(): Flow> diff --git a/app/src/main/java/com/hieuwu/groceriesstore/data/database/dao/LineItemDao.kt b/app/src/main/java/com/hieuwu/groceriesstore/data/database/dao/LineItemDao.kt index 7a7c64ea..78e5a774 100644 --- a/app/src/main/java/com/hieuwu/groceriesstore/data/database/dao/LineItemDao.kt +++ b/app/src/main/java/com/hieuwu/groceriesstore/data/database/dao/LineItemDao.kt @@ -15,7 +15,7 @@ import kotlinx.coroutines.flow.Flow @Dao interface LineItemDao { @Insert(onConflict = OnConflictStrategy.REPLACE) - suspend fun insert(lineItem: LineItem) + fun insert(lineItem: LineItem) @Query("SELECT * FROM $LINE_ITEM_TABLE WHERE lineItemId = :id") fun getById(id: Long): Flow @@ -24,10 +24,10 @@ interface LineItemDao { fun updateQuantityById(quantity: Int, id: Long) @Delete - suspend fun remove(lineItem: LineItem) + fun remove(lineItem: LineItem) @Update - suspend fun update(lineItem: LineItem) + fun update(lineItem: LineItem) @Transaction @Query("SELECT * FROM $LINE_ITEM_TABLE ") diff --git a/app/src/main/java/com/hieuwu/groceriesstore/data/database/dao/OrderDao.kt b/app/src/main/java/com/hieuwu/groceriesstore/data/database/dao/OrderDao.kt index 10df8d13..3f685fe0 100644 --- a/app/src/main/java/com/hieuwu/groceriesstore/data/database/dao/OrderDao.kt +++ b/app/src/main/java/com/hieuwu/groceriesstore/data/database/dao/OrderDao.kt @@ -1,6 +1,5 @@ package com.hieuwu.groceriesstore.data.database.dao -import androidx.lifecycle.LiveData import androidx.room.Dao import androidx.room.Insert import androidx.room.Query @@ -20,7 +19,7 @@ interface OrderDao { fun update(order: Order) @Query("DELETE FROM `$ORDER_TABLE`") - suspend fun clear() + fun clear() @Transaction @Query("SELECT * FROM `$ORDER_TABLE` WHERE orderId = :id") @@ -38,4 +37,4 @@ interface OrderDao { @Transaction @Query("SELECT * FROM `$ORDER_TABLE` WHERE status = :status LIMIT 1 ") fun getCartWithLineItems(status: String): Flow -} +} \ No newline at end of file diff --git a/app/src/main/java/com/hieuwu/groceriesstore/data/database/dao/ProductDao.kt b/app/src/main/java/com/hieuwu/groceriesstore/data/database/dao/ProductDao.kt index 213f9141..f2be8898 100644 --- a/app/src/main/java/com/hieuwu/groceriesstore/data/database/dao/ProductDao.kt +++ b/app/src/main/java/com/hieuwu/groceriesstore/data/database/dao/ProductDao.kt @@ -11,11 +11,9 @@ import kotlinx.coroutines.flow.Flow @Dao interface ProductDao { - @Insert(onConflict = OnConflictStrategy.REPLACE) - suspend fun insert(product: Product) @Insert(onConflict = OnConflictStrategy.REPLACE) - suspend fun insertAll(products: List) + fun insertAll(products: List) @Update fun update(product: Product) diff --git a/app/src/main/java/com/hieuwu/groceriesstore/data/database/dao/RecipeDao.kt b/app/src/main/java/com/hieuwu/groceriesstore/data/database/dao/RecipeDao.kt index 3d39fb43..94598764 100644 --- a/app/src/main/java/com/hieuwu/groceriesstore/data/database/dao/RecipeDao.kt +++ b/app/src/main/java/com/hieuwu/groceriesstore/data/database/dao/RecipeDao.kt @@ -11,7 +11,7 @@ import kotlinx.coroutines.flow.Flow @Dao interface RecipeDao { @Insert(onConflict = OnConflictStrategy.REPLACE) - suspend fun insertAll(recipes: List) + fun insertAll(recipes: List) @Query("SELECT * FROM $RECIPE_TABLE") fun getAll(): Flow> diff --git a/app/src/main/java/com/hieuwu/groceriesstore/data/database/dao/UserDao.kt b/app/src/main/java/com/hieuwu/groceriesstore/data/database/dao/UserDao.kt index b92d7986..b4da1079 100644 --- a/app/src/main/java/com/hieuwu/groceriesstore/data/database/dao/UserDao.kt +++ b/app/src/main/java/com/hieuwu/groceriesstore/data/database/dao/UserDao.kt @@ -12,7 +12,7 @@ import kotlinx.coroutines.flow.Flow interface UserDao { @Insert(onConflict = OnConflictStrategy.REPLACE) - suspend fun insert(user: User) + fun insert(user: User) @Query("SELECT * FROM $USER_TABLE WHERE id = :id") fun getById(id: String): Flow @@ -21,10 +21,10 @@ interface UserDao { fun getCurrentUser(): Flow @Query("DELETE FROM $USER_TABLE") - suspend fun clear() + fun clearUser() @Query("UPDATE $USER_TABLE SET isOrderCreatedNotiEnabled = :isOrderCreatedEnabled, isDataRefreshedNotiEnabled =:isDatabaseRefreshedEnabled, isPromotionNotiEnabled =:isPromotionEnabled WHERE id = :id") - suspend fun updateUserSettings( + fun updateUserSettings( id: String, isOrderCreatedEnabled: Boolean, isDatabaseRefreshedEnabled: Boolean, diff --git a/app/src/main/java/com/hieuwu/groceriesstore/data/database/entities/LineItem.kt b/app/src/main/java/com/hieuwu/groceriesstore/data/database/entities/LineItem.kt index 4ace06f0..0dc32516 100644 --- a/app/src/main/java/com/hieuwu/groceriesstore/data/database/entities/LineItem.kt +++ b/app/src/main/java/com/hieuwu/groceriesstore/data/database/entities/LineItem.kt @@ -9,7 +9,7 @@ import com.hieuwu.groceriesstore.utilities.LINE_ITEM_TABLE data class LineItem( @PrimaryKey(autoGenerate = true) @ColumnInfo(name = "lineItemId") - val id: Long, + val id: Long = 0, @ColumnInfo(name = "productId") val productId: String, @@ -23,12 +23,4 @@ data class LineItem( @ColumnInfo(name = "subtotal") var subtotal: Double -) { - constructor(productId: String, orderId: String, quantity: Int, subtotal: Double) : this( - 0, - productId, - orderId, - quantity, - subtotal - ) -} +) \ No newline at end of file From 748129f378441bfec5132325da606d5d05e27715 Mon Sep 17 00:00:00 2001 From: Hieu Vu Date: Tue, 19 Dec 2023 22:06:34 +0700 Subject: [PATCH 2/7] Remove unused annotation --- .../com/hieuwu/groceriesstore/data/database/entities/Product.kt | 1 - 1 file changed, 1 deletion(-) diff --git a/app/src/main/java/com/hieuwu/groceriesstore/data/database/entities/Product.kt b/app/src/main/java/com/hieuwu/groceriesstore/data/database/entities/Product.kt index 1496dc78..7aec336a 100644 --- a/app/src/main/java/com/hieuwu/groceriesstore/data/database/entities/Product.kt +++ b/app/src/main/java/com/hieuwu/groceriesstore/data/database/entities/Product.kt @@ -10,7 +10,6 @@ import com.hieuwu.groceriesstore.utilities.PRODUCT_TABLE @Entity(tableName = PRODUCT_TABLE) data class Product( @PrimaryKey - @NonNull @ColumnInfo(name = "productId") val id: String, From 62789cd95b5913b12f336acf54aa91355dfa8794 Mon Sep 17 00:00:00 2001 From: Hieu Vu Date: Tue, 19 Dec 2023 22:06:46 +0700 Subject: [PATCH 3/7] Remove view binding --- .../hieuwu/groceriesstore/presentation/MainFragment.kt | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/app/src/main/java/com/hieuwu/groceriesstore/presentation/MainFragment.kt b/app/src/main/java/com/hieuwu/groceriesstore/presentation/MainFragment.kt index 1fea52d7..bc5fc97a 100644 --- a/app/src/main/java/com/hieuwu/groceriesstore/presentation/MainFragment.kt +++ b/app/src/main/java/com/hieuwu/groceriesstore/presentation/MainFragment.kt @@ -4,13 +4,10 @@ import android.os.Bundle import android.view.LayoutInflater import android.view.View import android.view.ViewGroup -import androidx.databinding.DataBindingUtil import androidx.fragment.app.Fragment import com.hieuwu.groceriesstore.R -import com.hieuwu.groceriesstore.databinding.FragmentMainBinding class MainFragment : Fragment() { - private lateinit var binding: FragmentMainBinding override fun onCreateView( inflater: LayoutInflater, @@ -18,10 +15,8 @@ class MainFragment : Fragment() { savedInstanceState: Bundle? ): View? { - binding = DataBindingUtil.inflate( - inflater, R.layout.fragment_main, container, false + return inflater.inflate( + R.layout.fragment_main, container, false ) - - return binding.root } } From 0da1c1d4ffd93129e3a927316fe5bbd4f97f117b Mon Sep 17 00:00:00 2001 From: Hieu Vu Date: Tue, 19 Dec 2023 22:07:01 +0700 Subject: [PATCH 4/7] Remove unused methods and data binding --- .../presentation/utils/Converter.kt | 25 ------------------- 1 file changed, 25 deletions(-) diff --git a/app/src/main/java/com/hieuwu/groceriesstore/presentation/utils/Converter.kt b/app/src/main/java/com/hieuwu/groceriesstore/presentation/utils/Converter.kt index 02bc8585..7270c3f9 100644 --- a/app/src/main/java/com/hieuwu/groceriesstore/presentation/utils/Converter.kt +++ b/app/src/main/java/com/hieuwu/groceriesstore/presentation/utils/Converter.kt @@ -1,35 +1,10 @@ package com.hieuwu.groceriesstore.presentation.utils -import androidx.databinding.InverseMethod object Converter { - @InverseMethod("intToString") - @JvmStatic - fun intToString( - value: Int - ): String { - return value.toString() - } - - @JvmStatic - fun stringToInt( - value: String - ): Int { - return value.toInt() - } - @InverseMethod("stringToEmpTy") - @JvmStatic fun stringToEmpTy(value: String?): String { return if (value.isNullOrEmpty()) return "Not signed in" else value } - @InverseMethod("booleanToChecked") - @JvmStatic - fun booleanToChecked( - value: Boolean? - ): String? { - return value.toString() - } - } From 8967dbb1eb72f0ba64cafd398c600919d847bc1b Mon Sep 17 00:00:00 2001 From: Hieu Vu Date: Tue, 19 Dec 2023 22:07:10 +0700 Subject: [PATCH 5/7] Uplift libraries --- gradle/libs.versions.toml | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index e79e4fdd..4c18bff6 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -5,18 +5,18 @@ cardViewVersion = "1.0.0" carUiLibVersion = "2.0.0" constraintLayoutVersion = "2.1.4" coordinatorLayoutVersion = "1.2.0" -coreTestingVersion = "2.1.0" -coreVersion = "1.8.0" -firebaseBomVersion = "30.3.2" -fireStoreVersion = "24.2.2" -firebaseVersion = "23.0.6" +coreTestingVersion = "2.2.0" +coreVersion = "1.12.0" +firebaseBomVersion = "32.7.0" +fireStoreVersion = "24.10.0" +firebaseVersion = "23.4.0" glideVersion = "4.13.2" glideComposeVersion = "1.0.0-beta01" googleServicesVersion = "4.3.13" gsonVersion = "2.9.0" -hiltVersion = '2.42' +hiltVersion = '2.48' jUnitVersion = "4.13.2" -kotlinVersion = "1.7.0" +kotlinVersion = "1.9.0" kotlinCoroutineAdapter = "0.9.2" kotlinCoroutinePlayServicesVersion = "1.6.4" kotlinxImmutable = "0.3.5" @@ -30,7 +30,6 @@ moshiVersion = "1.12.0" navigationVersion = "2.5.0" retrofitVersion = "2.9.0" roomVersion = "2.5.0" -rxJavaVersion = "3.1.5" spotlessVersion = "6.8.0" testRunnerVersion = "1.4.0" timberVersion = "5.0.1" @@ -74,7 +73,6 @@ navigation-ui = { module = "androidx.navigation:navigation-ui-ktx", version.ref retrofit = { module = "com.squareup.retrofit2:retrofit", version.ref = "retrofitVersion" } retrofit-converter-moshi = { module = "com.squareup.retrofit2:converter-moshi", version.ref = "moshiConverterVersion" } retrofit-coroutines-adapter = { module = "com.jakewharton.retrofit:retrofit2-kotlin-coroutines-adapter", version.ref = "kotlinCoroutineAdapter" } -rxjava = { module = "io.reactivex.rxjava3:rxjava", version.ref = "rxJavaVersion" } room = { module = "androidx.room:room-ktx", version.ref = "roomVersion" } room-compiler = { module = "androidx.room:room-compiler", version.ref = "roomVersion" } room-runtime = { module = "androidx.room:room-runtime", version.ref = "roomVersion" } From ee37836dee22924a9ce13b289264cf1f5e863677 Mon Sep 17 00:00:00 2001 From: Hieu Vu Date: Tue, 19 Dec 2023 22:07:36 +0700 Subject: [PATCH 6/7] Replace gotrue with auth --- app/build.gradle | 7 ++---- .../repository/impl/UserRepositoryImpl.kt | 16 ++++++++------ .../groceriesstore/di/SupabaseModule.kt | 10 ++++----- .../presentation/explore/ExploreViewModel.kt | 13 ++++++++--- .../presentation/shop/ShopViewModel.kt | 22 ++++++++++++------- 5 files changed, 40 insertions(+), 28 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 1038cb92..b7fa6e93 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -49,13 +49,11 @@ android { } buildFeatures { - dataBinding true - viewBinding true compose true } composeOptions { - kotlinCompilerExtensionVersion "1.2.0" + kotlinCompilerExtensionVersion "1.5.2" } namespace 'com.hieuwu.groceriesstore' } @@ -69,7 +67,6 @@ dependencies { implementation libs.kotlin.stdlib implementation libs.legacy.support.v4 - implementation libs.rxjava implementation libs.timber @@ -97,7 +94,7 @@ dependencies { // implementation("io.github.jan-tennert.supabase:postgrest-kt:0.2.0") implementation("io.ktor:ktor-client-cio:1.6.0") - implementation("io.github.jan-tennert.supabase:postgrest-kt-android:0.9.0-alpha-4") + implementation("io.github.jan-tennert.supabase:postgrest-kt-android:2.0.0") implementation "io.ktor:ktor-client-android:2.2.1" implementation "io.ktor:ktor-utils-jvm:1.6.0" implementation "io.ktor:ktor-client-logging-jvm:1.6.0" diff --git a/app/src/main/java/com/hieuwu/groceriesstore/data/repository/impl/UserRepositoryImpl.kt b/app/src/main/java/com/hieuwu/groceriesstore/data/repository/impl/UserRepositoryImpl.kt index 6c05df33..738b33c9 100644 --- a/app/src/main/java/com/hieuwu/groceriesstore/data/repository/impl/UserRepositoryImpl.kt +++ b/app/src/main/java/com/hieuwu/groceriesstore/data/repository/impl/UserRepositoryImpl.kt @@ -7,7 +7,7 @@ import com.hieuwu.groceriesstore.data.network.dto.UserDto import com.hieuwu.groceriesstore.data.repository.UserRepository import com.hieuwu.groceriesstore.utilities.CollectionNames import com.hieuwu.groceriesstore.utilities.SupabaseMapper -import io.github.jan.supabase.gotrue.GoTrue +import io.github.jan.supabase.gotrue.Auth import io.github.jan.supabase.gotrue.providers.builtin.Email import io.github.jan.supabase.postgrest.Postgrest import java.util.* @@ -17,7 +17,7 @@ import javax.inject.Inject class UserRepositoryImpl @Inject constructor( private val userDao: UserDao, - private val authService: GoTrue, + private val authService: Auth, private val postgrest: Postgrest, ) : UserRepository { @@ -37,7 +37,7 @@ class UserRepositoryImpl @Inject constructor( isPromotionNotiEnabled = false, isDataRefreshedNotiEnabled = false ) - postgrest[CollectionNames.users].insert(value = userDto, upsert = true) + postgrest[CollectionNames.users].upsert(value = userDto) val user = SupabaseMapper.mapDtoToEntity(userDto) userDao.insert(user) true @@ -49,7 +49,7 @@ class UserRepositoryImpl @Inject constructor( override suspend fun authenticate(email: String, password: String): Boolean { return try { - authService.loginWith(Email) { + authService.signInWith(Email) { this.email = email this.password = password } @@ -85,7 +85,7 @@ class UserRepositoryImpl @Inject constructor( UserDto::address setTo address } ) { - UserDto::id eq userId + UserDto::id to userId } userDao.insert(dbUser) } catch (e: Exception) { @@ -94,7 +94,7 @@ class UserRepositoryImpl @Inject constructor( } override suspend fun clearUser() { - userDao.clear() + userDao.clearUser() } override suspend fun updateUserSettings( @@ -111,7 +111,9 @@ class UserRepositoryImpl @Inject constructor( UserDto::isPromotionNotiEnabled setTo isPromotionEnabled } ) { - UserDto::id eq id + filter { + UserDto::id eq id + } } userDao.updateUserSettings( id, diff --git a/app/src/main/java/com/hieuwu/groceriesstore/di/SupabaseModule.kt b/app/src/main/java/com/hieuwu/groceriesstore/di/SupabaseModule.kt index 6067cd5f..5fa23f4a 100644 --- a/app/src/main/java/com/hieuwu/groceriesstore/di/SupabaseModule.kt +++ b/app/src/main/java/com/hieuwu/groceriesstore/di/SupabaseModule.kt @@ -7,8 +7,8 @@ import dagger.hilt.InstallIn import dagger.hilt.components.SingletonComponent import io.github.jan.supabase.SupabaseClient import io.github.jan.supabase.createSupabaseClient -import io.github.jan.supabase.gotrue.GoTrue -import io.github.jan.supabase.gotrue.gotrue +import io.github.jan.supabase.gotrue.Auth +import io.github.jan.supabase.gotrue.auth import io.github.jan.supabase.postgrest.Postgrest import io.github.jan.supabase.postgrest.postgrest import io.ktor.client.plugins.* @@ -26,7 +26,7 @@ object SupabaseModule { supabaseKey = BuildConfig.API_KEY ) { install(Postgrest) - install(GoTrue) + install(Auth) } } @@ -38,8 +38,8 @@ object SupabaseModule { @Provides @Singleton - fun provideSupabaseGoTrue(client: SupabaseClient): GoTrue { - return client.gotrue + fun provideSupabaseGoTrue(client: SupabaseClient): Auth { + return client.auth } } diff --git a/app/src/main/java/com/hieuwu/groceriesstore/presentation/explore/ExploreViewModel.kt b/app/src/main/java/com/hieuwu/groceriesstore/presentation/explore/ExploreViewModel.kt index a44af731..a5d2db54 100644 --- a/app/src/main/java/com/hieuwu/groceriesstore/presentation/explore/ExploreViewModel.kt +++ b/app/src/main/java/com/hieuwu/groceriesstore/presentation/explore/ExploreViewModel.kt @@ -66,7 +66,8 @@ class ExploreViewModel @Inject constructor( fun searchProduct(name: String) { if (name.isNotBlank()) { viewModelScope.launch { - val res = searchProductUseCase.execute(SearchProductUseCase.Input(name = name.trim())) + val res = + searchProductUseCase.execute(SearchProductUseCase.Input(name = name.trim())) res.result.collect { _productList.value = it } @@ -96,7 +97,10 @@ class ExploreViewModel @Inject constructor( val cartId = _currentCart.value!!.id viewModelScope.launch { val lineItem = LineItem( - product.id, cartId, 1, product.price!! + productId = product.id, + orderId = cartId, + quantity = 1, + subtotal = product.price!! ) addToCartUseCase.execute(AddToCartUseCase.Input(lineItem = lineItem)) } @@ -106,7 +110,10 @@ class ExploreViewModel @Inject constructor( viewModelScope.launch { createNewOrderUseCase.execute(CreateNewOrderUseCase.Input(order = newOrder)) val lineItem = LineItem( - product.id, id, 1, product.price!! + productId = product.id, + orderId = id, + quantity = 1, + subtotal = product.price!! ) addToCartUseCase.execute(AddToCartUseCase.Input(lineItem = lineItem)) } diff --git a/app/src/main/java/com/hieuwu/groceriesstore/presentation/shop/ShopViewModel.kt b/app/src/main/java/com/hieuwu/groceriesstore/presentation/shop/ShopViewModel.kt index cfed7ead..5507dedf 100644 --- a/app/src/main/java/com/hieuwu/groceriesstore/presentation/shop/ShopViewModel.kt +++ b/app/src/main/java/com/hieuwu/groceriesstore/presentation/shop/ShopViewModel.kt @@ -50,6 +50,7 @@ class ShopViewModel @Inject constructor( currentCart.collect {} } } + fun displayProductDetails(product: ProductModel) { _navigateToSelectedProperty.value = product } @@ -82,10 +83,10 @@ class ShopViewModel @Inject constructor( addToCartUseCase.execute( AddToCartUseCase.Input( LineItem( - product.id, - cartId, - 1, - product.price!! + productId = product.id, + orderId = cartId, + quantity = 1, + subtotal = product.price!! ) ) ) @@ -96,15 +97,20 @@ class ShopViewModel @Inject constructor( createNewOrderUseCase.execute( CreateNewOrderUseCase.Input( Order( - id, - OrderStatus.IN_CART.value, - "" + id = id, + status = OrderStatus.IN_CART.value, + address = "" ) ) ) addToCartUseCase.execute( AddToCartUseCase.Input( - LineItem(product.id, id, 1, product.price!!) + LineItem( + productId = product.id, + orderId = id, + quantity = 1, + subtotal = product.price!! + ) ) ) } From a860ca5c168f16f497c70cd71d88cb3076b3eb36 Mon Sep 17 00:00:00 2001 From: Hieu Vu Date: Tue, 19 Dec 2023 22:07:52 +0700 Subject: [PATCH 7/7] Update kotlin plugin --- .idea/kotlinc.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.idea/kotlinc.xml b/.idea/kotlinc.xml index ff9696e1..fdf8d994 100644 --- a/.idea/kotlinc.xml +++ b/.idea/kotlinc.xml @@ -1,6 +1,6 @@ - \ No newline at end of file