diff --git a/app/build.gradle.kts b/app/build.gradle.kts
index dbe41cd..49c3638 100644
--- a/app/build.gradle.kts
+++ b/app/build.gradle.kts
@@ -1,3 +1,4 @@
+import java.util.Properties
plugins {
alias(libs.plugins.android.application)
alias(libs.plugins.jetbrains.kotlin.android)
@@ -7,6 +8,14 @@ plugins {
// id("com.google.dagger.hilt.android")
}
+val localProperties = Properties().apply {
+ val localPropertiesFile = rootProject.file("local.properties")
+ if (localPropertiesFile.exists()) {
+ load(localPropertiesFile.inputStream())
+ }
+}
+
+
android {
namespace = "com.alya.ecommerce_serang"
compileSdk = 34
@@ -23,7 +32,7 @@ android {
buildTypes {
release {
- buildConfigField("String", "BASE_URL", "\"http://192.168.1.5:3000/\"")
+ buildConfigField("String", "BASE_URL", "\"http://192.168.1.6:3000/\"")
isMinifyEnabled = false
proguardFiles(
getDefaultProguardFile("proguard-android-optimize.txt"),
@@ -31,7 +40,7 @@ android {
)
}
debug {
- buildConfigField("String", "BASE_URL", "\"http://192.168.1.5:3000/\"")
+ buildConfigField("String", "BASE_URL", "\"http://192.168.1.6:3000/\"")
}
}
compileOptions {
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index e5f107e..c1cfce9 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -19,6 +19,9 @@
android:theme="@style/Theme.Ecommerce_serang"
android:usesCleartextTraffic="true"
tools:targetApi="31">
+
diff --git a/app/src/main/java/com/alya/ecommerce_serang/data/api/response/CreateProductResponse.kt b/app/src/main/java/com/alya/ecommerce_serang/data/api/response/CreateProductResponse.kt
index e859cd6..f8fd202 100644
--- a/app/src/main/java/com/alya/ecommerce_serang/data/api/response/CreateProductResponse.kt
+++ b/app/src/main/java/com/alya/ecommerce_serang/data/api/response/CreateProductResponse.kt
@@ -1,5 +1,6 @@
package com.alya.ecommerce_serang.data.api.response
+import com.alya.ecommerce_serang.data.api.response.product.Product
import com.google.gson.annotations.SerializedName
data class CreateProductResponse(
diff --git a/app/src/main/java/com/alya/ecommerce_serang/data/api/response/cart/CartActivity.kt b/app/src/main/java/com/alya/ecommerce_serang/data/api/response/cart/CartActivity.kt
new file mode 100644
index 0000000..2f52e8a
--- /dev/null
+++ b/app/src/main/java/com/alya/ecommerce_serang/data/api/response/cart/CartActivity.kt
@@ -0,0 +1,21 @@
+package com.alya.ecommerce_serang.data.api.response.cart
+
+import android.os.Bundle
+import androidx.activity.enableEdgeToEdge
+import androidx.appcompat.app.AppCompatActivity
+import androidx.core.view.ViewCompat
+import androidx.core.view.WindowInsetsCompat
+import com.alya.ecommerce_serang.R
+
+class CartActivity : AppCompatActivity() {
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ enableEdgeToEdge()
+ setContentView(R.layout.activity_cart)
+ ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main)) { v, insets ->
+ val systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars())
+ v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom)
+ insets
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/alya/ecommerce_serang/data/api/response/product/StoreResponse.kt b/app/src/main/java/com/alya/ecommerce_serang/data/api/response/product/StoreResponse.kt
index cddabf6..8f6faf4 100644
--- a/app/src/main/java/com/alya/ecommerce_serang/data/api/response/product/StoreResponse.kt
+++ b/app/src/main/java/com/alya/ecommerce_serang/data/api/response/product/StoreResponse.kt
@@ -1,4 +1,4 @@
-package com.alya.ecommerce_serang.data.api.response
+package com.alya.ecommerce_serang.data.api.response.product
import com.alya.ecommerce_serang.data.api.dto.Store
import com.google.gson.annotations.SerializedName
diff --git a/app/src/main/java/com/alya/ecommerce_serang/data/api/retrofit/ApiService.kt b/app/src/main/java/com/alya/ecommerce_serang/data/api/retrofit/ApiService.kt
index 738dfd9..2367f28 100644
--- a/app/src/main/java/com/alya/ecommerce_serang/data/api/retrofit/ApiService.kt
+++ b/app/src/main/java/com/alya/ecommerce_serang/data/api/retrofit/ApiService.kt
@@ -9,6 +9,7 @@ import com.alya.ecommerce_serang.data.api.dto.OrderRequestBuy
import com.alya.ecommerce_serang.data.api.dto.OtpRequest
import com.alya.ecommerce_serang.data.api.dto.RegisterRequest
import com.alya.ecommerce_serang.data.api.dto.UpdateCart
+import com.alya.ecommerce_serang.data.api.response.ViewStoreProductsResponse
import com.alya.ecommerce_serang.data.api.response.auth.LoginResponse
import com.alya.ecommerce_serang.data.api.response.auth.OtpResponse
import com.alya.ecommerce_serang.data.api.response.auth.RegisterResponse
@@ -28,7 +29,6 @@ import com.alya.ecommerce_serang.data.api.response.product.StoreResponse
import com.alya.ecommerce_serang.data.api.response.profile.AddressResponse
import com.alya.ecommerce_serang.data.api.response.profile.CreateAddressResponse
import com.alya.ecommerce_serang.data.api.response.profile.ProfileResponse
-import com.alya.ecommerce_serang.data.api.response.ViewStoreProductsResponse
import retrofit2.Call
import retrofit2.Response
import retrofit2.http.Body
diff --git a/app/src/main/java/com/alya/ecommerce_serang/data/repository/MyStoreRepository.kt b/app/src/main/java/com/alya/ecommerce_serang/data/repository/MyStoreRepository.kt
index 003f772..71dd35c 100644
--- a/app/src/main/java/com/alya/ecommerce_serang/data/repository/MyStoreRepository.kt
+++ b/app/src/main/java/com/alya/ecommerce_serang/data/repository/MyStoreRepository.kt
@@ -2,7 +2,7 @@ package com.alya.ecommerce_serang.data.repository
import android.util.Log
import com.alya.ecommerce_serang.data.api.dto.Store
-import com.alya.ecommerce_serang.data.api.response.StoreResponse
+import com.alya.ecommerce_serang.data.api.response.product.StoreResponse
import com.alya.ecommerce_serang.data.api.retrofit.ApiService
import retrofit2.HttpException
import java.io.IOException
diff --git a/app/src/main/java/com/alya/ecommerce_serang/ui/order/CheckoutActivity.kt b/app/src/main/java/com/alya/ecommerce_serang/ui/order/CheckoutActivity.kt
index 3e71fcd..19cc599 100644
--- a/app/src/main/java/com/alya/ecommerce_serang/ui/order/CheckoutActivity.kt
+++ b/app/src/main/java/com/alya/ecommerce_serang/ui/order/CheckoutActivity.kt
@@ -11,7 +11,7 @@ import androidx.recyclerview.widget.LinearLayoutManager
import com.alya.ecommerce_serang.data.api.dto.CheckoutData
import com.alya.ecommerce_serang.data.api.dto.OrderRequest
import com.alya.ecommerce_serang.data.api.dto.OrderRequestBuy
-import com.alya.ecommerce_serang.data.api.response.product.PaymentItem
+import com.alya.ecommerce_serang.data.api.response.product.PaymentInfoItem
import com.alya.ecommerce_serang.data.api.retrofit.ApiConfig
import com.alya.ecommerce_serang.data.repository.OrderRepository
import com.alya.ecommerce_serang.databinding.ActivityCheckoutBinding
@@ -104,8 +104,10 @@ class CheckoutActivity : AppCompatActivity() {
// Observe payment details
viewModel.paymentDetails.observe(this) { payment ->
- // Update selected payment in adapter
- payment?.id?.let { paymentAdapter?.setSelectedPaymentId(it) }
+ if (payment != null) {
+ // Update selected payment in adapter by name instead of ID
+ paymentAdapter?.setSelectedPaymentName(payment.name)
+ }
}
// Observe loading state
@@ -145,10 +147,13 @@ class CheckoutActivity : AppCompatActivity() {
}
}
- private fun setupPaymentMethodsRecyclerView(paymentMethods: List) {
+ private fun setupPaymentMethodsRecyclerView(paymentMethods: List) {
paymentAdapter = PaymentMethodAdapter(paymentMethods) { payment ->
// When a payment method is selected
- viewModel.setPaymentMethod(payment.id)
+ // Since PaymentInfoItem doesn't have an id field, we'll use the name as identifier
+ // You might need to convert the name to an ID if your backend expects an integer
+ val paymentId = payment.name.toIntOrNull() ?: 0
+ viewModel.setPaymentMethod(paymentId)
}
binding.rvPaymentMethods.apply {
diff --git a/app/src/main/java/com/alya/ecommerce_serang/ui/order/CheckoutViewModel.kt b/app/src/main/java/com/alya/ecommerce_serang/ui/order/CheckoutViewModel.kt
index 8567bf1..e470bcf 100644
--- a/app/src/main/java/com/alya/ecommerce_serang/ui/order/CheckoutViewModel.kt
+++ b/app/src/main/java/com/alya/ecommerce_serang/ui/order/CheckoutViewModel.kt
@@ -10,7 +10,7 @@ import com.alya.ecommerce_serang.data.api.dto.OrderRequest
import com.alya.ecommerce_serang.data.api.dto.OrderRequestBuy
import com.alya.ecommerce_serang.data.api.response.cart.CartItemsItem
import com.alya.ecommerce_serang.data.api.response.cart.DataItem
-import com.alya.ecommerce_serang.data.api.response.product.PaymentItem
+import com.alya.ecommerce_serang.data.api.response.product.PaymentInfoItem
import com.alya.ecommerce_serang.data.api.response.profile.AddressesItem
import com.alya.ecommerce_serang.data.repository.OrderRepository
import com.alya.ecommerce_serang.data.repository.Result
@@ -24,8 +24,8 @@ class CheckoutViewModel(private val repository: OrderRepository) : ViewModel() {
private val _addressDetails = MutableLiveData()
val addressDetails: LiveData = _addressDetails
- private val _paymentDetails = MutableLiveData()
- val paymentDetails: LiveData = _paymentDetails
+ private val _paymentDetails = MutableLiveData()
+ val paymentDetails: LiveData = _paymentDetails
private val _isLoading = MutableLiveData()
val isLoading: LiveData = _isLoading
@@ -145,12 +145,16 @@ class CheckoutViewModel(private val repository: OrderRepository) : ViewModel() {
}
// Get payment methods from API
- fun getPaymentMethods(callback: (List) -> Unit) {
+ fun getPaymentMethods(callback: (List) -> Unit) {
viewModelScope.launch {
try {
- val storeResponse = repository.getStore()
- if (storeResponse != null && storeResponse.payment.isNotEmpty()) {
- callback(storeResponse.payment)
+ val storeId = _checkoutData.value?.sellerId ?: return@launch
+
+ // Use fetchStoreDetail instead of getStore
+ val storeResult = repository.fetchStoreDetail(storeId)
+
+ if (storeResult is Result.Success && storeResult.data != null) {
+ callback(storeResult.data.paymentInfo)
} else {
callback(emptyList())
}
@@ -227,12 +231,16 @@ class CheckoutViewModel(private val repository: OrderRepository) : ViewModel() {
fun setPaymentMethod(paymentId: Int) {
viewModelScope.launch {
try {
- val storeResponse = repository.getStore()
- if (storeResponse != null) {
- val payment = storeResponse.payment.find { it.id == paymentId }
+ val storeId = _checkoutData.value?.sellerId ?: return@launch
+
+ // Use fetchStoreDetail instead of getStore
+ val storeResult = repository.fetchStoreDetail(storeId)
+ if (storeResult is Result.Success && storeResult.data != null) {
+ // Find the selected payment in the payment info list
+ val payment = storeResult.data.paymentInfo.find { it.name == paymentId.toString() }
_paymentDetails.value = payment
- // Update order request only if payment isn't null
+ // Update order request if payment isn't null
if (payment != null) {
val currentData = _checkoutData.value ?: return@launch
if (currentData.isBuyNow) {
diff --git a/app/src/main/java/com/alya/ecommerce_serang/ui/order/PaymentMethodAdapter.kt b/app/src/main/java/com/alya/ecommerce_serang/ui/order/PaymentMethodAdapter.kt
index 0a84fc4..8621f0e 100644
--- a/app/src/main/java/com/alya/ecommerce_serang/ui/order/PaymentMethodAdapter.kt
+++ b/app/src/main/java/com/alya/ecommerce_serang/ui/order/PaymentMethodAdapter.kt
@@ -4,14 +4,14 @@ import android.view.LayoutInflater
import android.view.ViewGroup
import androidx.recyclerview.widget.RecyclerView
import com.alya.ecommerce_serang.R
-import com.alya.ecommerce_serang.data.api.response.product.PaymentItem
+import com.alya.ecommerce_serang.data.api.response.product.PaymentInfoItem
import com.alya.ecommerce_serang.databinding.ItemPaymentMethodBinding
import com.bumptech.glide.Glide
import com.bumptech.glide.request.RequestOptions
class PaymentMethodAdapter(
- private val paymentMethods: List,
- private val onPaymentSelected: (PaymentItem) -> Unit
+ private val paymentMethods: List,
+ private val onPaymentSelected: (PaymentInfoItem) -> Unit
) : RecyclerView.Adapter() {
// Track the selected position
@@ -36,7 +36,7 @@ class PaymentMethodAdapter(
with(holder.binding) {
// Set payment method name
- tvPaymentMethodName.text = payment.bankName
+ tvPaymentMethodName.text = payment.name
// Set radio button state
rbPaymentMethod.isChecked = selectedPosition == position
@@ -45,8 +45,7 @@ class PaymentMethodAdapter(
if (payment.qrisImage.isNotEmpty()) {
Glide.with(ivPaymentMethod.context)
.load(payment.qrisImage)
- .apply(
- RequestOptions()
+ .apply(RequestOptions()
.placeholder(R.drawable.outline_store_24)
.error(R.drawable.outline_store_24))
.into(ivPaymentMethod)
@@ -81,9 +80,9 @@ class PaymentMethodAdapter(
}
}
- // Select a payment method programmatically
- fun setSelectedPaymentId(paymentId: Int) {
- val position = paymentMethods.indexOfFirst { it.id == paymentId }
+ //selected by name
+ fun setSelectedPaymentName(paymentName: String) {
+ val position = paymentMethods.indexOfFirst { it.name == paymentName }
if (position != -1 && position != selectedPosition) {
selectPayment(position)
}
diff --git a/app/src/main/java/com/alya/ecommerce_serang/ui/product/DetailProductActivity.kt b/app/src/main/java/com/alya/ecommerce_serang/ui/product/DetailProductActivity.kt
index 0e0fd4b..bb10bdb 100644
--- a/app/src/main/java/com/alya/ecommerce_serang/ui/product/DetailProductActivity.kt
+++ b/app/src/main/java/com/alya/ecommerce_serang/ui/product/DetailProductActivity.kt
@@ -28,7 +28,6 @@ import com.alya.ecommerce_serang.ui.home.HorizontalProductAdapter
import com.alya.ecommerce_serang.ui.order.CheckoutActivity
import com.alya.ecommerce_serang.utils.BaseViewModelFactory
import com.alya.ecommerce_serang.utils.SessionManager
-import com.alya.ecommerce_serang.utils.viewmodel.ProductViewModel
import com.bumptech.glide.Glide
import com.google.android.material.bottomsheet.BottomSheetDialog
import java.text.NumberFormat
@@ -43,11 +42,11 @@ class DetailProductActivity : AppCompatActivity() {
private var currentQuantity = 1
- private val viewModel: ProductViewModel by viewModels {
+ private val viewModel: ProductUserViewModel by viewModels {
BaseViewModelFactory {
val apiService = ApiConfig.getApiService(sessionManager)
val productRepository = ProductRepository(apiService)
- ProductViewModel(productRepository)
+ ProductUserViewModel(productRepository)
}
}
override fun onCreate(savedInstanceState: Bundle?) {
diff --git a/app/src/main/java/com/alya/ecommerce_serang/ui/product/ProductViewModel.kt b/app/src/main/java/com/alya/ecommerce_serang/ui/product/ProductUserViewModel.kt
similarity index 98%
rename from app/src/main/java/com/alya/ecommerce_serang/ui/product/ProductViewModel.kt
rename to app/src/main/java/com/alya/ecommerce_serang/ui/product/ProductUserViewModel.kt
index 9fd7bce..9679488 100644
--- a/app/src/main/java/com/alya/ecommerce_serang/ui/product/ProductViewModel.kt
+++ b/app/src/main/java/com/alya/ecommerce_serang/ui/product/ProductUserViewModel.kt
@@ -15,7 +15,7 @@ import com.alya.ecommerce_serang.data.repository.ProductRepository
import com.alya.ecommerce_serang.data.repository.Result
import kotlinx.coroutines.launch
-class ProductViewModel(private val repository: ProductRepository) : ViewModel() {
+class ProductUserViewModel(private val repository: ProductRepository) : ViewModel() {
private val _productDetail = MutableLiveData()
val productDetail: LiveData get() = _productDetail
diff --git a/app/src/main/java/com/alya/ecommerce_serang/ui/product/ReviewProductActivity.kt b/app/src/main/java/com/alya/ecommerce_serang/ui/product/ReviewProductActivity.kt
index 9ca514d..2ed7679 100644
--- a/app/src/main/java/com/alya/ecommerce_serang/ui/product/ReviewProductActivity.kt
+++ b/app/src/main/java/com/alya/ecommerce_serang/ui/product/ReviewProductActivity.kt
@@ -13,18 +13,17 @@ import com.alya.ecommerce_serang.data.repository.ProductRepository
import com.alya.ecommerce_serang.databinding.ActivityReviewProductBinding
import com.alya.ecommerce_serang.utils.BaseViewModelFactory
import com.alya.ecommerce_serang.utils.SessionManager
-import com.alya.ecommerce_serang.utils.viewmodel.ProductViewModel
class ReviewProductActivity : AppCompatActivity() {
private lateinit var binding: ActivityReviewProductBinding
private lateinit var apiService: ApiService
private var reviewsAdapter: ReviewsAdapter? = null
private lateinit var sessionManager: SessionManager
- private val viewModel: ProductViewModel by viewModels {
+ private val viewModel: ProductUserViewModel by viewModels {
BaseViewModelFactory {
val apiService = ApiConfig.getApiService(sessionManager)
val productRepository = ProductRepository(apiService)
- ProductViewModel(productRepository)
+ ProductUserViewModel(productRepository)
}
}
diff --git a/app/src/main/java/com/alya/ecommerce_serang/utils/viewmodel/ProductViewModel.kt b/app/src/main/java/com/alya/ecommerce_serang/utils/viewmodel/ProductViewModel.kt
index 5f8e94f..d573936 100644
--- a/app/src/main/java/com/alya/ecommerce_serang/utils/viewmodel/ProductViewModel.kt
+++ b/app/src/main/java/com/alya/ecommerce_serang/utils/viewmodel/ProductViewModel.kt
@@ -7,9 +7,9 @@ import androidx.lifecycle.liveData
import androidx.lifecycle.viewModelScope
import com.alya.ecommerce_serang.data.api.dto.CategoryItem
import com.alya.ecommerce_serang.data.api.dto.ProductsItem
-import com.alya.ecommerce_serang.data.api.dto.Store
-import com.alya.ecommerce_serang.data.api.response.Product
-import com.alya.ecommerce_serang.data.api.response.ReviewsItem
+import com.alya.ecommerce_serang.data.api.response.product.Product
+import com.alya.ecommerce_serang.data.api.response.product.ReviewsItem
+import com.alya.ecommerce_serang.data.api.response.product.StoreProduct
import com.alya.ecommerce_serang.data.repository.ProductRepository
import com.alya.ecommerce_serang.data.repository.Result
import kotlinx.coroutines.launch
@@ -19,8 +19,8 @@ class ProductViewModel(private val repository: ProductRepository) : ViewModel()
private val _productDetail = MutableLiveData()
val productDetail: LiveData get() = _productDetail
- private val _storeDetail = MutableLiveData()
- val storeDetail : LiveData get() = _storeDetail
+ private val _storeDetail = MutableLiveData()
+ val storeDetail : LiveData get() = _storeDetail
private val _reviewProduct = MutableLiveData>()
val reviewProduct: LiveData> get() = _reviewProduct
diff --git a/app/src/main/res/layout/activity_cart.xml b/app/src/main/res/layout/activity_cart.xml
new file mode 100644
index 0000000..3735ec2
--- /dev/null
+++ b/app/src/main/res/layout/activity_cart.xml
@@ -0,0 +1,10 @@
+
+
+
+
\ No newline at end of file