From ad6a67d5c511efaab8c31cc26afd31a94901914e Mon Sep 17 00:00:00 2001 From: shaulascr Date: Tue, 8 Apr 2025 11:25:16 +0700 Subject: [PATCH] ongoing checkout store --- app/src/main/AndroidManifest.xml | 6 ++++++ .../response/DetailStoreProductResponse.kt | 2 +- .../data/api/response/StoreResponse.kt | 2 +- .../data/api/retrofit/ApiService.kt | 7 +++---- .../data/repository/OrderRepository.kt | 7 +++++++ .../ui/order/AddressActivity.kt | 21 +++++++++++++++++++ .../ui/order/CheckoutViewModel.kt | 17 ++++++++++++--- .../ui/order/ShippingActivity.kt | 21 +++++++++++++++++++ app/src/main/res/layout/activity_address.xml | 10 +++++++++ app/src/main/res/layout/activity_shipping.xml | 10 +++++++++ 10 files changed, 94 insertions(+), 9 deletions(-) create mode 100644 app/src/main/java/com/alya/ecommerce_serang/ui/order/AddressActivity.kt create mode 100644 app/src/main/java/com/alya/ecommerce_serang/ui/order/ShippingActivity.kt create mode 100644 app/src/main/res/layout/activity_address.xml create mode 100644 app/src/main/res/layout/activity_shipping.xml diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 7b8f128..30df192 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -17,6 +17,12 @@ 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/DetailStoreProductResponse.kt b/app/src/main/java/com/alya/ecommerce_serang/data/api/response/DetailStoreProductResponse.kt index 4f83751..7380412 100644 --- a/app/src/main/java/com/alya/ecommerce_serang/data/api/response/DetailStoreProductResponse.kt +++ b/app/src/main/java/com/alya/ecommerce_serang/data/api/response/DetailStoreProductResponse.kt @@ -26,7 +26,7 @@ data class StoreProduct( val storeLocation: String, @field:SerializedName("store_image") - val storeImage: Any, + val storeImage: String? = null, @field:SerializedName("status") val status: String diff --git a/app/src/main/java/com/alya/ecommerce_serang/data/api/response/StoreResponse.kt b/app/src/main/java/com/alya/ecommerce_serang/data/api/response/StoreResponse.kt index 386de42..26f383e 100644 --- a/app/src/main/java/com/alya/ecommerce_serang/data/api/response/StoreResponse.kt +++ b/app/src/main/java/com/alya/ecommerce_serang/data/api/response/StoreResponse.kt @@ -62,7 +62,7 @@ data class Store( val email: String, @field:SerializedName("store_image") - val storeImage: Any, + val storeImage: String? = null, @field:SerializedName("longitude") val longitude: String, 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 08aaf3b..f1a0ed4 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 @@ -1,5 +1,6 @@ package com.alya.ecommerce_serang.data.api.retrofit +import com.alya.ecommerce_serang.data.api.dto.CreateAddressRequest import com.alya.ecommerce_serang.data.api.dto.LoginRequest import com.alya.ecommerce_serang.data.api.dto.OrderRequest import com.alya.ecommerce_serang.data.api.dto.OtpRequest @@ -16,7 +17,6 @@ import com.alya.ecommerce_serang.data.api.response.ProfileResponse import com.alya.ecommerce_serang.data.api.response.RegisterResponse import com.alya.ecommerce_serang.data.api.response.ReviewProductResponse import com.alya.ecommerce_serang.data.api.response.StoreResponse -import retrofit2.Call import retrofit2.Response import retrofit2.http.Body import retrofit2.http.GET @@ -71,10 +71,9 @@ interface ApiService { @GET("profile/address") suspend fun getAddress( - @Body addressRequest: AddressRequest + @Body addressRequest: CreateAddressRequest ): Response - @GET("mystore") - fun getStore (): Call + suspend fun getStore (): Response } \ No newline at end of file diff --git a/app/src/main/java/com/alya/ecommerce_serang/data/repository/OrderRepository.kt b/app/src/main/java/com/alya/ecommerce_serang/data/repository/OrderRepository.kt index b703b9d..3a0719e 100644 --- a/app/src/main/java/com/alya/ecommerce_serang/data/repository/OrderRepository.kt +++ b/app/src/main/java/com/alya/ecommerce_serang/data/repository/OrderRepository.kt @@ -4,6 +4,7 @@ import android.util.Log import com.alya.ecommerce_serang.data.api.dto.OrderRequest import com.alya.ecommerce_serang.data.api.response.OrderResponse import com.alya.ecommerce_serang.data.api.response.ProductResponse +import com.alya.ecommerce_serang.data.api.response.StoreResponse import com.alya.ecommerce_serang.data.api.retrofit.ApiService import retrofit2.Response @@ -27,6 +28,12 @@ class OrderRepository(private val apiService: ApiService) { return apiService.postOrder(orderRequest) } + suspend fun getStore(): StoreResponse? { + val response = apiService.getStore() + return if (response.isSuccessful) response.body() else null + } + + //not yet implement the api service address // suspend fun getAddressDetails(addressId: Int): AddressesItem { // // Simulate API call to get address details diff --git a/app/src/main/java/com/alya/ecommerce_serang/ui/order/AddressActivity.kt b/app/src/main/java/com/alya/ecommerce_serang/ui/order/AddressActivity.kt new file mode 100644 index 0000000..4475a96 --- /dev/null +++ b/app/src/main/java/com/alya/ecommerce_serang/ui/order/AddressActivity.kt @@ -0,0 +1,21 @@ +package com.alya.ecommerce_serang.ui.order + +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 AddressActivity : AppCompatActivity() { + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + enableEdgeToEdge() + setContentView(R.layout.activity_address) + 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/ui/order/CheckoutViewModel.kt b/app/src/main/java/com/alya/ecommerce_serang/ui/order/CheckoutViewModel.kt index bc7de41..7013cd0 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 @@ -9,6 +9,7 @@ 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.response.AddressesItem import com.alya.ecommerce_serang.data.api.response.OrderResponse +import com.alya.ecommerce_serang.data.api.response.PaymentItem import com.alya.ecommerce_serang.data.repository.OrderRepository import com.alya.ecommerce_serang.data.repository.Result import kotlinx.coroutines.launch @@ -21,6 +22,9 @@ class CheckoutViewModel(private val repository: OrderRepository) : ViewModel() { private val _addressDetails = MutableLiveData() val addressDetails: LiveData = _addressDetails + private val _storePayments = MutableLiveData>() + val storePayments: LiveData> = _storePayments + private val _isLoading = MutableLiveData() val isLoading: LiveData = _isLoading @@ -31,6 +35,8 @@ class CheckoutViewModel(private val repository: OrderRepository) : ViewModel() { try { // Load all necessary data val productDetails = repository.fetchProductDetail(orderRequest.productIdItem) + val storeDetails = repository.getStoreDetails(productDetails.product.storeId) + // val addressDetails = repository.getAddressDetails(orderRequest.address_id) // Update LiveData objects @@ -42,10 +48,15 @@ class CheckoutViewModel(private val repository: OrderRepository) : ViewModel() { productName = productDetails?.product?.productName, productImageUrl = productDetails.product.image, productPrice = productDetails.product.price, - sellerName = productDetails.product.storeId -// sellerImageUrl = productDetails.sellerImageUrl, -// sellerId = productDetails.sellerId + sellerName = storeDetails.store.storeName, + sellerImageUrl = storeDetails.store.storeImage, + sellerId = productDetails.product.storeId ) + + storeDetails?.let { + _storePayments.value = it.payment + } + } catch (e: Exception) { // Handle errors Log.e("CheckoutViewModel", "Error loading checkout data", e) diff --git a/app/src/main/java/com/alya/ecommerce_serang/ui/order/ShippingActivity.kt b/app/src/main/java/com/alya/ecommerce_serang/ui/order/ShippingActivity.kt new file mode 100644 index 0000000..b9441c6 --- /dev/null +++ b/app/src/main/java/com/alya/ecommerce_serang/ui/order/ShippingActivity.kt @@ -0,0 +1,21 @@ +package com.alya.ecommerce_serang.ui.order + +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 ShippingActivity : AppCompatActivity() { + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + enableEdgeToEdge() + setContentView(R.layout.activity_shipping) + 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/res/layout/activity_address.xml b/app/src/main/res/layout/activity_address.xml new file mode 100644 index 0000000..86c8374 --- /dev/null +++ b/app/src/main/res/layout/activity_address.xml @@ -0,0 +1,10 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_shipping.xml b/app/src/main/res/layout/activity_shipping.xml new file mode 100644 index 0000000..965bd3c --- /dev/null +++ b/app/src/main/res/layout/activity_shipping.xml @@ -0,0 +1,10 @@ + + + + \ No newline at end of file