From 83c5f2acffe8be5695e483e4024e76378e6e9a25 Mon Sep 17 00:00:00 2001 From: shaulascr Date: Fri, 29 Aug 2025 18:20:51 +0700 Subject: [PATCH] add delete fcm token --- .../api/response/auth/DeleteFCMResponse.kt | 24 +++++++++++++++++++ .../data/api/retrofit/ApiService.kt | 5 ++++ .../data/repository/UserRepository.kt | 5 ++++ .../ui/profile/ProfileFragment.kt | 1 + .../utils/viewmodel/ProfileViewModel.kt | 23 ++++++++++++++++++ 5 files changed, 58 insertions(+) create mode 100644 app/src/main/java/com/alya/ecommerce_serang/data/api/response/auth/DeleteFCMResponse.kt diff --git a/app/src/main/java/com/alya/ecommerce_serang/data/api/response/auth/DeleteFCMResponse.kt b/app/src/main/java/com/alya/ecommerce_serang/data/api/response/auth/DeleteFCMResponse.kt new file mode 100644 index 0000000..8caa4a5 --- /dev/null +++ b/app/src/main/java/com/alya/ecommerce_serang/data/api/response/auth/DeleteFCMResponse.kt @@ -0,0 +1,24 @@ +package com.alya.ecommerce_serang.data.api.response.auth + +import com.google.gson.annotations.SerializedName + +data class DeleteFCMResponse( + + @field:SerializedName("message") + val message: String, + + @field:SerializedName("user") + val user: UserFCM +) + +data class UserFCM( + + @field:SerializedName("name") + val name: String, + + @field:SerializedName("id") + val id: Int, + + @field:SerializedName("email") + val email: 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 9316122..cb29c8f 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 @@ -27,6 +27,7 @@ import com.alya.ecommerce_serang.data.api.dto.UpdateCart import com.alya.ecommerce_serang.data.api.dto.UpdateChatRequest import com.alya.ecommerce_serang.data.api.dto.VerifRegisReq import com.alya.ecommerce_serang.data.api.response.auth.ChangePassResponse +import com.alya.ecommerce_serang.data.api.response.auth.DeleteFCMResponse import com.alya.ecommerce_serang.data.api.response.auth.FcmTokenResponse import com.alya.ecommerce_serang.data.api.response.auth.HasStoreResponse import com.alya.ecommerce_serang.data.api.response.auth.ListNotifResponse @@ -106,6 +107,10 @@ interface ApiService { @Body verifRegisReq: VerifRegisReq ):VerifRegisterResponse + @PUT("deletefcm") + suspend fun deleteFCMToken ( + ): DeleteFCMResponse + @Multipart @POST("registerstore") suspend fun registerStore( diff --git a/app/src/main/java/com/alya/ecommerce_serang/data/repository/UserRepository.kt b/app/src/main/java/com/alya/ecommerce_serang/data/repository/UserRepository.kt index 9f233d0..02ef392 100644 --- a/app/src/main/java/com/alya/ecommerce_serang/data/repository/UserRepository.kt +++ b/app/src/main/java/com/alya/ecommerce_serang/data/repository/UserRepository.kt @@ -12,6 +12,7 @@ import com.alya.ecommerce_serang.data.api.dto.ResetPassReq import com.alya.ecommerce_serang.data.api.dto.UserProfile import com.alya.ecommerce_serang.data.api.dto.VerifRegisReq import com.alya.ecommerce_serang.data.api.response.auth.ChangePassResponse +import com.alya.ecommerce_serang.data.api.response.auth.DeleteFCMResponse import com.alya.ecommerce_serang.data.api.response.auth.FcmTokenResponse import com.alya.ecommerce_serang.data.api.response.auth.HasStoreResponse import com.alya.ecommerce_serang.data.api.response.auth.ListStoreTypeResponse @@ -541,6 +542,10 @@ class UserRepository(private val apiService: ApiService) { } } + suspend fun deleteFCMToken(): DeleteFCMResponse{ + return apiService.deleteFCMToken() + } + companion object{ private const val TAG = "UserRepository" } diff --git a/app/src/main/java/com/alya/ecommerce_serang/ui/profile/ProfileFragment.kt b/app/src/main/java/com/alya/ecommerce_serang/ui/profile/ProfileFragment.kt index 76ad4e7..a5ac862 100644 --- a/app/src/main/java/com/alya/ecommerce_serang/ui/profile/ProfileFragment.kt +++ b/app/src/main/java/com/alya/ecommerce_serang/ui/profile/ProfileFragment.kt @@ -224,6 +224,7 @@ class ProfileFragment : Fragment() { delay(500) loadingDialog.dismiss() sessionManager.clearAll() + viewModel.deleteFCM() val intent = Intent(requireContext(), LoginActivity::class.java) startActivity(intent) requireActivity().finish() diff --git a/app/src/main/java/com/alya/ecommerce_serang/utils/viewmodel/ProfileViewModel.kt b/app/src/main/java/com/alya/ecommerce_serang/utils/viewmodel/ProfileViewModel.kt index c03cf94..324ef16 100644 --- a/app/src/main/java/com/alya/ecommerce_serang/utils/viewmodel/ProfileViewModel.kt +++ b/app/src/main/java/com/alya/ecommerce_serang/utils/viewmodel/ProfileViewModel.kt @@ -9,6 +9,7 @@ import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import com.alya.ecommerce_serang.data.api.dto.UserProfile import com.alya.ecommerce_serang.data.api.response.auth.ChangePassResponse +import com.alya.ecommerce_serang.data.api.response.auth.DeleteFCMResponse import com.alya.ecommerce_serang.data.api.response.auth.HasStoreResponse import com.alya.ecommerce_serang.data.api.response.customer.profile.EditProfileResponse import com.alya.ecommerce_serang.data.repository.Result @@ -27,6 +28,10 @@ class ProfileViewModel(private val userRepository: UserRepository) : ViewModel() private val _checkStore = MutableLiveData() val checkStore: LiveData = _checkStore + + private val _deleteFCMT = MutableLiveData() + val deleteFCMT: LiveData = _deleteFCMT + val changePasswordResult = MutableLiveData>() private val _logout = MutableLiveData() val logout : LiveData = _logout @@ -61,7 +66,25 @@ class ProfileViewModel(private val userRepository: UserRepository) : ViewModel() } } + fun deleteFCM(){ + viewModelScope.launch { + try { + // Call the repository function to request OTP + val response: DeleteFCMResponse = userRepository.deleteFCMToken() + // Log and store success message + Log.d("ProfileViewModel", "Has store: ${response.message}") + _deleteFCMT.postValue(response.message) // Store the message for UI feedback + + } catch (exception: Exception) { + // Handle any errors and update state + _deleteFCMT.postValue(exception.message) + + // Log the error for debugging + Log.e(":ProfileViewModel", "Error:", exception) + } + } + } fun editProfileDirect( context: Context,