From 66abde60ca785a387cdd5af80d67e234052bebba Mon Sep 17 00:00:00 2001 From: dkyuuum Date: Tue, 6 Feb 2024 23:44:18 +0900 Subject: [PATCH] =?UTF-8?q?Feat:=20=EC=A1=B8=EC=97=85=20=EC=98=88=EC=A0=95?= =?UTF-8?q?=EC=9D=BC=20api=20=EC=97=B0=EA=B2=B0=20=EC=A4=91...=20#5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../project/ui/board/GradDateFragment.kt | 4 +- .../ui/board/viewmodel/GradDateViewModel.kt | 115 ++++++++++++++++-- .../main/res/layout/fragment_grad_date.xml | 2 - 3 files changed, 111 insertions(+), 10 deletions(-) diff --git a/app/src/main/java/umc/com/mobile/project/ui/board/GradDateFragment.kt b/app/src/main/java/umc/com/mobile/project/ui/board/GradDateFragment.kt index f2e247bb..9ec27bc2 100644 --- a/app/src/main/java/umc/com/mobile/project/ui/board/GradDateFragment.kt +++ b/app/src/main/java/umc/com/mobile/project/ui/board/GradDateFragment.kt @@ -3,6 +3,7 @@ package umc.com.mobile.project.ui.board import android.content.Context import android.os.Bundle import android.text.Editable +import android.util.Log import androidx.fragment.app.Fragment import android.view.LayoutInflater import android.view.View @@ -56,6 +57,7 @@ class GradDateFragment : Fragment() { navigateBack() // 뒤로 가기 버튼 클릭 시 initTodayDate() // 오늘 날짜 설정 saveCheeringMemo() + viewModel.getDateInfo() return binding.root } @@ -80,7 +82,7 @@ class GradDateFragment : Fragment() { private fun saveCheeringMemo() { binding.btnSave.setOnClickListener { - viewModel.updateMemo(binding.tvGradDateMemo.text.toString()) +// viewModel.updateDateInfo(binding.tvGradDateDate.text.toString()) Toast.makeText(context, "저장되었습니다.", Toast.LENGTH_LONG).show() } diff --git a/app/src/main/java/umc/com/mobile/project/ui/board/viewmodel/GradDateViewModel.kt b/app/src/main/java/umc/com/mobile/project/ui/board/viewmodel/GradDateViewModel.kt index 744645b1..61fb9ae0 100644 --- a/app/src/main/java/umc/com/mobile/project/ui/board/viewmodel/GradDateViewModel.kt +++ b/app/src/main/java/umc/com/mobile/project/ui/board/viewmodel/GradDateViewModel.kt @@ -5,23 +5,124 @@ import androidx.lifecycle.LiveData import androidx.lifecycle.MediatorLiveData import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel -import java.time.LocalDateTime -import java.time.format.DateTimeFormatter +import retrofit2.Call +import retrofit2.Callback +import retrofit2.Response +import umc.com.mobile.project.data.model.home.GradDateResponse +import umc.com.mobile.project.data.model.home.UpdateGradDateRequest +import umc.com.mobile.project.data.model.home.UpdateGradDateResponse +import umc.com.mobile.project.data.network.ApiClient +import umc.com.mobile.project.data.network.api.HomeApi class GradDateViewModel : ViewModel() { - val selectedDate = MutableLiveData() - val cheeringMemo = MutableLiveData() + val selectedDate = MutableLiveData() + + private val dateInfoApiService = ApiClient.createService() + + private val _dateResponse: MutableLiveData = MutableLiveData() + val dateResponse: MutableLiveData + get() = _dateResponse + + private val _updateDateResponse: MutableLiveData = MutableLiveData() + val updateDateResponse: MutableLiveData + get() = _updateDateResponse + + + private val _error: MutableLiveData = MutableLiveData() + val error: LiveData + get() = _error + + private val _dday: MutableLiveData = MutableLiveData() + val dday: LiveData + get() = _dday + + private val _cheeringMessage: MutableLiveData = MutableLiveData() + val cheeringMessage: LiveData + get() = _cheeringMessage fun updateMemo(input: String) { - cheeringMemo.value = input + _cheeringMessage.postValue(input) } val isFilledMemo: LiveData = MediatorLiveData().apply { - addSource(cheeringMemo) { value = isFieldFilled() } + addSource(cheeringMessage) { value = isFieldFilled() } } private fun isFieldFilled(): Boolean { - return !cheeringMemo.value.isNullOrEmpty() + return !cheeringMessage.value.isNullOrEmpty() + } + + fun init(value: GradDateResponse) { + _dday.postValue(value.result.dday) + _cheeringMessage.postValue(value.result.message) + } + + fun getDateInfo() { + dateInfoApiService.getDateInfo().enqueue(object : Callback { + override fun onResponse( + call: Call, + response: Response + ) { + if (response.isSuccessful) { + val dateInfoResponse = response.body() + if (dateInfoResponse != null) { + dateResponse.postValue(dateInfoResponse) + Log.d("gradDate", "${response.body()}") + } else { + _error.postValue("서버 응답이 올바르지 않습니다.") + } + } else { + _error.postValue("사용자 정보를 가져오지 못했습니다.") + try { + throw response.errorBody()?.string()?.let { + RuntimeException(it) + } ?: RuntimeException("Unknown error") + } catch (e: Exception) { + Log.e("gradDate", "API 오류: ${e.message}") + } + } + } + + override fun onFailure(call: Call, t: Throwable) { + _error.postValue("네트워크 오류: ${t.message}") + Log.d("gradDate", "${t.message}") + } + }) + } + + fun updateDateInfo(date: String) { + dateInfoApiService.updateDateInfo( + UpdateGradDateRequest(date, cheeringMessage.value.orEmpty()) + ).enqueue(object : Callback { + override fun onResponse( + call: Call, + response: Response + ) { + if (response.isSuccessful) { + val updateDateInfoResponse = response.body() + if (updateDateInfoResponse != null) { + updateDateResponse.postValue(updateDateInfoResponse) + Log.d("updateGradDate", "${response.body()}") + } else { + _error.postValue("서버 응답이 올바르지 않습니다.") + } + } else { + _error.postValue("사용자 정보를 가져오지 못했습니다.") + try { + throw response.errorBody()?.string()?.let { + RuntimeException(it) + } ?: RuntimeException("Unknown error") + } catch (e: Exception) { + Log.e("updateGradDate", "API 오류: ${e.message}") + } + } + } + + override fun onFailure(call: Call, t: Throwable) { + _error.postValue("네트워크 오류: ${t.message}") + Log.d("updateGradDate", "${t.message}") + } + }) } } \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_grad_date.xml b/app/src/main/res/layout/fragment_grad_date.xml index cdb9a352..6815669e 100644 --- a/app/src/main/res/layout/fragment_grad_date.xml +++ b/app/src/main/res/layout/fragment_grad_date.xml @@ -112,7 +112,6 @@ android:layout_marginTop="59dp" android:layout_marginEnd="81dp" android:layout_marginBottom="60dp" - android:text="@string/board_grad_date_dday" android:textAppearance="@style/SemiBoldFont.36" android:textColor="#7D7D7D" app:layout_constraintBottom_toBottomOf="@+id/iv_grad_date_card2" @@ -131,7 +130,6 @@ android:background="@drawable/bg_solid_white_radius_10" android:gravity="top" android:hint="@string/board_grad_date_memo" - android:text="@{vm.cheeringMemo}" android:inputType="text" android:paddingStart="12dp" android:paddingTop="17dp"