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
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/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
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,
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/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
}
}
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!!
+ )
)
)
}
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()
- }
-
}
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" }