diff --git a/app/src/main/java/jin/contest/ta_android/data/model/TodayDiaryResponse.kt b/app/src/main/java/jin/contest/ta_android/data/model/TodayDiaryResponse.kt new file mode 100644 index 0000000..8ff3aae --- /dev/null +++ b/app/src/main/java/jin/contest/ta_android/data/model/TodayDiaryResponse.kt @@ -0,0 +1,10 @@ +package jin.contest.ta_android.data.model + +data class TodayDiaryResponse( + val title: String, + val createdAt: String, + val weather: String, + val content: String, + val emotion: String, + val emotionPoint: Int, +) \ No newline at end of file diff --git a/app/src/main/java/jin/contest/ta_android/data/remote/ApiService.kt b/app/src/main/java/jin/contest/ta_android/data/remote/ApiService.kt index 042c107..e81a498 100644 --- a/app/src/main/java/jin/contest/ta_android/data/remote/ApiService.kt +++ b/app/src/main/java/jin/contest/ta_android/data/remote/ApiService.kt @@ -17,6 +17,7 @@ import jin.contest.ta_android.data.model.MissionClearResponse import jin.contest.ta_android.data.model.MissionProgressResponse import jin.contest.ta_android.data.model.DiaryDetailResponse import jin.contest.ta_android.data.model.CounselListResponse +import jin.contest.ta_android.data.model.TodayDiaryResponse import jin.contest.ta_android.data.model.UserInfoResponse import retrofit2.Response @@ -85,8 +86,13 @@ interface ApiService { @Query("district") district: String? = null ): Response + + @GET("/api/diary/today") + suspend fun getTodayDiary() : Response + @GET("/api/user") suspend fun getUserInfo( @Header("Cookie") sessionId: String ): retrofit2.Response + } diff --git a/app/src/main/java/jin/contest/ta_android/data/repository/TodayRepository.kt b/app/src/main/java/jin/contest/ta_android/data/repository/TodayRepository.kt new file mode 100644 index 0000000..8c2ff5b --- /dev/null +++ b/app/src/main/java/jin/contest/ta_android/data/repository/TodayRepository.kt @@ -0,0 +1,16 @@ +package jin.contest.ta_android.data.repository + + +import jin.contest.ta_android.data.model.DiaryResponse +import jin.contest.ta_android.data.model.PageResponse +import jin.contest.ta_android.data.model.TodayDiaryResponse +import jin.contest.ta_android.data.remote.ApiService +import jin.contest.ta_android.data.remote.RetrofitClient.apiService +import retrofit2.Response + +class TodayRepository() { + suspend fun getTodayDiary(): TodayDiaryResponse? { + val response = apiService.getTodayDiary() + return if (response.isSuccessful) response.body() else null + } +} \ No newline at end of file diff --git a/app/src/main/java/jin/contest/ta_android/ui/home/HomeFragment.kt b/app/src/main/java/jin/contest/ta_android/ui/home/HomeFragment.kt index 5b14845..f6aba90 100644 --- a/app/src/main/java/jin/contest/ta_android/ui/home/HomeFragment.kt +++ b/app/src/main/java/jin/contest/ta_android/ui/home/HomeFragment.kt @@ -13,6 +13,7 @@ import jin.contest.ta_android.WritingActivity import jin.contest.ta_android.data.remote.RetrofitClient import jin.contest.ta_android.data.repository.ReportRepository import jin.contest.ta_android.data.repository.DiaryRepository +import jin.contest.ta_android.data.repository.TodayRepository import jin.contest.ta_android.databinding.FragmentHomeBinding import androidx.navigation.fragment.findNavController import jin.contest.ta_android.R @@ -35,7 +36,8 @@ class HomeFragment : Fragment() { val apiService = RetrofitClient.apiService val reportRepository = ReportRepository(apiService) val diaryRepository = DiaryRepository(apiService) - homeViewModel = ViewModelProvider(this, HomeViewModel.Factory(reportRepository, diaryRepository))[HomeViewModel::class.java] + val todayRepository = TodayRepository() + homeViewModel = ViewModelProvider(this, HomeViewModel.Factory(reportRepository, diaryRepository, todayRepository))[HomeViewModel::class.java] homeViewModel.weeklyReports.observe(viewLifecycleOwner, Observer { reports -> if (reports?.content?.isNotEmpty() == true) { @@ -68,21 +70,45 @@ class HomeFragment : Fragment() { val intent = Intent(requireActivity(), WritingActivity::class.java) startActivity(intent) } - val title = arguments?.getString("content") - val content = arguments?.getString("content") - Log.d("test","${content}") - if(content != null){ - binding.tvDiaryTitle.text=title - binding.tvDiaryContent.text=content - } - else{ - binding.tvDiaryTitle.text="오늘 작성한 일기가 없습니다" - binding.tvDiaryContent.text="" + homeViewModel.todayDiary.observe(viewLifecycleOwner, Observer { diary -> + if (diary?.content?.isNotEmpty() == true) { + binding.tvDiaryTitle.text = diary.title + binding.tvDiaryDate.text = diary.createdAt.substring(0,10) + binding.tvDiaryWeather.text = "(날씨 : ${diary.weather})" + binding.tvDiaryEmotion.text = "[${getEmotion(diary.emotion)}점수 : ${diary.emotionPoint}]" + binding.tvDiaryContent.text = diary.content + Log.d("test", "${diary.content}") + } + else{ + binding.tvDiaryTitle.text = "오늘의 일기가 없습니다" + } + }) + homeViewModel.fetchTodayDiary() + + // 주변 상담소 카드 클릭 시 CounselFragment로 이동 + binding.cardCounselLink.setOnClickListener { + findNavController().navigate(R.id.action_home_to_counsel) } return root } + private fun getEmotion(emotion: String): String { + return when (emotion) { + "happy" -> "행복" + "depress" -> "우울" + else -> "분노" + } + } + + private fun getWeather(weather: String): String { + return when (weather) { + "SUNNY" -> "맑음" + "CLOUDY" -> "흐림" + "RAINY" -> "비" + else -> "눈" + } + } override fun onDestroyView() { super.onDestroyView() diff --git a/app/src/main/java/jin/contest/ta_android/ui/home/HomeViewModel.kt b/app/src/main/java/jin/contest/ta_android/ui/home/HomeViewModel.kt index f96f1e2..2d6bf73 100644 --- a/app/src/main/java/jin/contest/ta_android/ui/home/HomeViewModel.kt +++ b/app/src/main/java/jin/contest/ta_android/ui/home/HomeViewModel.kt @@ -1,5 +1,6 @@ package jin.contest.ta_android.ui.home +import android.graphics.pdf.PdfDocument.Page import androidx.lifecycle.LiveData import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel @@ -11,10 +12,13 @@ import jin.contest.ta_android.data.repository.ReportRepository import jin.contest.ta_android.data.repository.DiaryRepository import kotlinx.coroutines.launch import jin.contest.ta_android.data.model.PageResponse +import jin.contest.ta_android.data.model.TodayDiaryResponse +import jin.contest.ta_android.data.repository.TodayRepository class HomeViewModel( private val reportRepository: ReportRepository, - private val diaryRepository: DiaryRepository + private val diaryRepository: DiaryRepository, + private val todayRepository: TodayRepository ) : ViewModel() { private val _text = MutableLiveData().apply { @@ -28,6 +32,16 @@ class HomeViewModel( private val _weeklyDo = MutableLiveData>() val weeklyDo: LiveData> = _weeklyDo + private val _todayDiary = MutableLiveData() + val todayDiary : LiveData = _todayDiary + + fun fetchTodayDiary(){ + viewModelScope.launch { + val result = todayRepository.getTodayDiary() + _todayDiary.value = result + } + } + fun fetchWeeklyReports(page: Int = 0, size: Int = 10) { viewModelScope.launch { val result = reportRepository.getWeeklyReports(page, size) @@ -44,12 +58,13 @@ class HomeViewModel( class Factory( private val reportRepository: ReportRepository, - private val diaryRepository: DiaryRepository + private val diaryRepository: DiaryRepository, + private val todayRepository: TodayRepository ) : ViewModelProvider.Factory { override fun create(modelClass: Class): T { if (modelClass.isAssignableFrom(HomeViewModel::class.java)) { @Suppress("UNCHECKED_CAST") - return HomeViewModel(reportRepository, diaryRepository) as T + return HomeViewModel(reportRepository, diaryRepository, todayRepository) as T } throw IllegalArgumentException("Unknown ViewModel class") } diff --git a/app/src/main/res/layout/fragment_home.xml b/app/src/main/res/layout/fragment_home.xml index 85b4492..3f55f96 100644 --- a/app/src/main/res/layout/fragment_home.xml +++ b/app/src/main/res/layout/fragment_home.xml @@ -138,12 +138,12 @@ android:id="@+id/tv_diary_text" android:layout_width="wrap_content" android:layout_height="wrap_content" + android:layout_marginStart="24dp" + android:layout_marginTop="16dp" android:text="오늘 작성한 내 마음을 확인해봐요" android:textColor="#666666" - android:textStyle="bold" android:textSize="20sp" - android:layout_marginTop="16dp" - android:layout_marginStart="24dp" /> + android:textStyle="bold" /> - - + android:orientation="vertical"> + + + + + + + + + + + + + + + + @@ -200,11 +241,12 @@ + android:textStyle="bold" + android:textSize="18sp" />