From 936161064781619e96bb008044ecb18927455710 Mon Sep 17 00:00:00 2001 From: klaus Date: Fri, 25 Jul 2025 22:18:22 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20=EB=A7=88=EC=9D=B4=ED=8E=98=EC=9D=B4?= =?UTF-8?q?=EC=A7=80=20-=20=EC=83=81=EB=8B=A8=EC=97=90=20=EC=B5=9C?= =?UTF-8?q?=EC=8B=A0=20=EA=B3=B5=EC=A7=80=EC=82=AC=ED=95=AD=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/kr/co/vividnext/sodalive/di/AppDI.kt | 2 +- .../sodalive/mypage/MyPageFragment.kt | 27 ++++++++++++++++ .../sodalive/mypage/MyPageViewModel.kt | 31 ++++++++++++++++++- .../sodalive/settings/notice/NoticeApi.kt | 3 ++ .../settings/notice/NoticeRepository.kt | 2 ++ app/src/main/res/layout/fragment_my.xml | 8 ++--- 6 files changed, 67 insertions(+), 6 deletions(-) diff --git a/app/src/main/java/kr/co/vividnext/sodalive/di/AppDI.kt b/app/src/main/java/kr/co/vividnext/sodalive/di/AppDI.kt index 8d2a30e3..8f7b63d0 100644 --- a/app/src/main/java/kr/co/vividnext/sodalive/di/AppDI.kt +++ b/app/src/main/java/kr/co/vividnext/sodalive/di/AppDI.kt @@ -254,7 +254,7 @@ class AppDI(private val context: Context, isDebugMode: Boolean) { viewModel { FindPasswordViewModel(get()) } viewModel { MainViewModel(get(), get(), get(), get(), get()) } viewModel { LiveViewModel(get(), get(), get(), get(), get()) } - viewModel { MyPageViewModel(get(), get()) } + viewModel { MyPageViewModel(get(), get(), get()) } viewModel { CanStatusViewModel(get()) } viewModel { CanChargePgViewModel(get()) } viewModel { CanPaymentViewModel(get()) } diff --git a/app/src/main/java/kr/co/vividnext/sodalive/mypage/MyPageFragment.kt b/app/src/main/java/kr/co/vividnext/sodalive/mypage/MyPageFragment.kt index f24e8a8c..64227326 100644 --- a/app/src/main/java/kr/co/vividnext/sodalive/mypage/MyPageFragment.kt +++ b/app/src/main/java/kr/co/vividnext/sodalive/mypage/MyPageFragment.kt @@ -42,6 +42,7 @@ import kr.co.vividnext.sodalive.mypage.service_center.ServiceCenterActivity import kr.co.vividnext.sodalive.settings.SettingsActivity import kr.co.vividnext.sodalive.settings.event.EventActivity import kr.co.vividnext.sodalive.settings.notice.NoticeActivity +import kr.co.vividnext.sodalive.settings.notice.NoticeDetailActivity import kr.co.vividnext.sodalive.splash.SplashActivity import org.koin.android.ext.android.inject @@ -60,6 +61,32 @@ class MyPageFragment : BaseFragment(FragmentMyBinding::inflat setupView() bindData() setupRecentContentSection() + setupLatestNotice() + } + + private fun setupLatestNotice() { + // Observe the latest notice LiveData + viewModel.latestNoticeLiveData.observe(viewLifecycleOwner) { noticeItem -> + noticeItem?.let { + // Update the UI with the latest notice title + binding.tvLatestNoticeTitle.text = it.title + + // Set click listener for the latest notice section + binding.llLatestNotice.setOnClickListener { _ -> + startActivity( + Intent( + requireActivity(), + NoticeDetailActivity::class.java + ).apply { + putExtra(Constants.EXTRA_NOTICE, it) + } + ) + } + } + } + + // Fetch the latest notice using ViewModel + viewModel.getLatestNotice() } private fun setupRecentContentSection() { diff --git a/app/src/main/java/kr/co/vividnext/sodalive/mypage/MyPageViewModel.kt b/app/src/main/java/kr/co/vividnext/sodalive/mypage/MyPageViewModel.kt index 80cec490..ef93f367 100644 --- a/app/src/main/java/kr/co/vividnext/sodalive/mypage/MyPageViewModel.kt +++ b/app/src/main/java/kr/co/vividnext/sodalive/mypage/MyPageViewModel.kt @@ -6,15 +6,19 @@ import com.orhanobut.logger.Logger import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers import io.reactivex.rxjava3.schedulers.Schedulers import kr.co.vividnext.sodalive.base.BaseViewModel +import kr.co.vividnext.sodalive.common.ApiResponse import kr.co.vividnext.sodalive.common.SharedPreferenceManager import kr.co.vividnext.sodalive.mypage.auth.AuthRepository import kr.co.vividnext.sodalive.mypage.auth.AuthVerifyRequest import kr.co.vividnext.sodalive.settings.ContentType +import kr.co.vividnext.sodalive.settings.notice.NoticeItem +import kr.co.vividnext.sodalive.settings.notice.NoticeRepository import kr.co.vividnext.sodalive.user.UserRepository class MyPageViewModel( private val userRepository: UserRepository, - private val authRepository: AuthRepository + private val authRepository: AuthRepository, + private val noticeRepository: NoticeRepository ) : BaseViewModel() { private val _toastLiveData = MutableLiveData() val toastLiveData: LiveData @@ -28,6 +32,10 @@ class MyPageViewModel( val myPageLiveData: LiveData get() = _myPageLiveData + private val _latestNoticeLiveData = MutableLiveData() + val latestNoticeLiveData: LiveData + get() = _latestNoticeLiveData + fun getUserInfo() { if (!_isLoading.value!!) { _isLoading.value = true @@ -100,4 +108,25 @@ class MyPageViewModel( ) ) } + + fun getLatestNotice() { + compositeDisposable.add( + noticeRepository.getLatestNotice() + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe( + { response -> + if (response.success && response.data != null) { + _latestNoticeLiveData.postValue(response.data) + } else { + Logger.e("Failed to get latest notice: ${response.message}") + } + }, + { error -> + error.printStackTrace() + Logger.e("Error getting latest notice: ${error.message}") + } + ) + ) + } } diff --git a/app/src/main/java/kr/co/vividnext/sodalive/settings/notice/NoticeApi.kt b/app/src/main/java/kr/co/vividnext/sodalive/settings/notice/NoticeApi.kt index cbf1fb89..df7f28e3 100644 --- a/app/src/main/java/kr/co/vividnext/sodalive/settings/notice/NoticeApi.kt +++ b/app/src/main/java/kr/co/vividnext/sodalive/settings/notice/NoticeApi.kt @@ -14,4 +14,7 @@ interface NoticeApi { @Query("size") size: Int, @Header("Authorization") authHeader: String ): Single> + + @GET("/notice/latest") + fun getLatestNotice(): Single> } diff --git a/app/src/main/java/kr/co/vividnext/sodalive/settings/notice/NoticeRepository.kt b/app/src/main/java/kr/co/vividnext/sodalive/settings/notice/NoticeRepository.kt index d73de8e1..30dc7c10 100644 --- a/app/src/main/java/kr/co/vividnext/sodalive/settings/notice/NoticeRepository.kt +++ b/app/src/main/java/kr/co/vividnext/sodalive/settings/notice/NoticeRepository.kt @@ -12,4 +12,6 @@ class NoticeRepository(private val api: NoticeApi) { ): Single> { return api.getNotices(TimeZone.getDefault().id, page, size, authHeader = token) } + + fun getLatestNotice() = api.getLatestNotice() } diff --git a/app/src/main/res/layout/fragment_my.xml b/app/src/main/res/layout/fragment_my.xml index 71b0144b..8d84289b 100644 --- a/app/src/main/res/layout/fragment_my.xml +++ b/app/src/main/res/layout/fragment_my.xml @@ -42,9 +42,9 @@ android:src="@drawable/ic_settings" /> - + + app:layout_constraintTop_toBottomOf="@id/ll_latest_notice">