Skip to content

Commit

Permalink
feat: 일품 식단 메뉴 수정
Browse files Browse the repository at this point in the history
  • Loading branch information
m6z1 committed Sep 13, 2024
1 parent 4fdabbd commit 7d74204
Show file tree
Hide file tree
Showing 5 changed files with 97 additions and 24 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -5,17 +5,42 @@ import com.dongyang.android.youdongknowme.data.remote.service.CafeteriaService
import com.dongyang.android.youdongknowme.standard.network.ErrorResponseHandler
import com.dongyang.android.youdongknowme.standard.network.NetworkResult
import com.dongyang.android.youdongknowme.standard.network.RetrofitObject
import com.dongyang.android.youdongknowme.standard.util.Weekdays

class CafeteriaRepository(
private val errorResponseHandler: ErrorResponseHandler
private val errorResponseHandler: ErrorResponseHandler,
) {
suspend fun fetchMenuList(): NetworkResult<List<Cafeteria>> {
return try {
val response = RetrofitObject.getNetwork().create(CafeteriaService::class.java).getMenuList()
val response =
RetrofitObject.getNetwork().create(CafeteriaService::class.java).getMenuList()
NetworkResult.Success(response)
} catch (exception: Exception) {
val error = errorResponseHandler.getError(exception)
NetworkResult.Error(error)
}
}

fun fetchAnotherMenus(todayDay: Weekdays): List<DaysMenu> {
return DaysMenu.values().filter { menu ->
menu.operatingDays.contains(todayDay)
}
}

enum class DaysMenu(
val menuNameKr: String,
val price: Int,
val operatingDays: List<Weekdays>,
) {
PORKCUTLET("돈까스", 5_000, Weekdays.values().toList()),
CHEESE_PORKCUTLET("치즈돈까스", 5_500, Weekdays.values().toList()),
SWEET_POTATO_CHEESE_PORKCUTLET("고구마치즈돈까스", 6_000, Weekdays.values().toList()),
RAMEN("라면", 3_500, Weekdays.values().toList()),
CHEESE_RAMEN("치즈라면", 4_000, Weekdays.values().toList()),
SEAFOOD_RAMEN("해물라면", 4_500, Weekdays.values().toList()),
SPAM_KIMCHI_FRIED_RICE("스팸김치볶음밥", 4_900, listOf(Weekdays.MONDAY, Weekdays.TUESDAY)),
HOT_CHICKEN_MAYO_RICE("불닭마요덮밥", 4_500, listOf(Weekdays.WEDNESDAY, Weekdays.THURSDAY)),
CHICKEN_MAYO_RICE("치킨마요덮밥", 4_500, listOf(Weekdays.WEDNESDAY, Weekdays.THURSDAY)),
OMELET_RICE("오므라이스", 5_500, listOf(Weekdays.FRIDAY));
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package com.dongyang.android.youdongknowme.standard.util

import java.time.DayOfWeek

enum class Weekdays(val dayKr: String) {
MONDAY(""),
TUESDAY(""),
WEDNESDAY(""),
THURSDAY(""),
FRIDAY("");

companion object {

fun from(dayOfWeek: DayOfWeek): Weekdays {
return when (dayOfWeek) {
DayOfWeek.MONDAY -> MONDAY
DayOfWeek.TUESDAY -> TUESDAY
DayOfWeek.WEDNESDAY -> WEDNESDAY
DayOfWeek.THURSDAY -> THURSDAY
DayOfWeek.FRIDAY -> FRIDAY
else -> throw IllegalArgumentException("에러")
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@ import android.annotation.SuppressLint
import android.util.TypedValue
import android.view.MotionEvent
import android.view.View
import androidx.recyclerview.widget.RecyclerView
import androidx.window.layout.WindowMetricsCalculator
import com.dongyang.android.youdongknowme.R
import com.dongyang.android.youdongknowme.databinding.FragmentCafeteriaBinding
Expand All @@ -17,12 +16,11 @@ import com.kizitonwose.calendarview.model.CalendarDay
import com.kizitonwose.calendarview.ui.DayBinder
import com.kizitonwose.calendarview.utils.Size
import org.koin.androidx.viewmodel.ext.android.viewModel
import java.time.DayOfWeek
import java.time.DayOfWeek.*
import java.time.LocalDate
import java.time.YearMonth
import java.time.temporal.TemporalAdjusters


class CafeteriaFragment : BaseFragment<FragmentCafeteriaBinding, CafeteriaViewModel>(),
CalendarInterface {

Expand Down Expand Up @@ -60,9 +58,9 @@ class CafeteriaFragment : BaseFragment<FragmentCafeteriaBinding, CafeteriaViewMo
binding.cvCafeteriaCalendar.apply {
val dayWidth = wmc.bounds.width() / 5
val dayHeight: Int = TypedValue.applyDimension(
TypedValue.COMPLEX_UNIT_DIP,
124f,
resources.displayMetrics
TypedValue.COMPLEX_UNIT_DIP,
124f,
resources.displayMetrics
).toInt()

daySize = Size(dayWidth, dayHeight)
Expand All @@ -74,10 +72,11 @@ class CafeteriaFragment : BaseFragment<FragmentCafeteriaBinding, CafeteriaViewMo

override fun bind(container: CafeteriaContainer, day: CalendarDay) = container.bind(day)
}

viewModel.updateAnotherMenus(findNearestMonday(LocalDate.now()))
}

override fun initDataBinding() {

viewModel.isLoading.observe(viewLifecycleOwner) {
if (it) showLoading()
else dismissLoading()
Expand All @@ -87,10 +86,12 @@ class CafeteriaFragment : BaseFragment<FragmentCafeteriaBinding, CafeteriaViewMo
showToast(getString(resId))
})

viewModel.menus.observe(viewLifecycleOwner) {
viewModel.koreaMenu.observe(viewLifecycleOwner) {
koreanMenuAdapter.submitList(it)
// 일품 메뉴 : 일품 메뉴는 리스트로 제작하여 등록
anotherMenuAdapter.submitList(getString(R.string.cafeteria_another_list).split("/").map { it.trim() })
}

viewModel.daysMenu.observe(viewLifecycleOwner) {
anotherMenuAdapter.submitList(it)
}
}

Expand All @@ -101,13 +102,14 @@ class CafeteriaFragment : BaseFragment<FragmentCafeteriaBinding, CafeteriaViewMo
binding.cvCafeteriaCalendar.setup(
YearMonth.from(nearestMonday),
YearMonth.from(nearestMonday.plusDays(4)),
DayOfWeek.MONDAY
MONDAY
)

binding.cvCafeteriaCalendar.scrollToDate(nearestMonday)

binding.cafeteriaErrorContainer.refresh.setOnClickListener {
viewModel.fetchCafeteria()
viewModel.updateAnotherMenus(findNearestMonday(LocalDate.now()))
}

binding.cvCafeteriaCalendar.setOnTouchListener { _, event ->
Expand All @@ -123,27 +125,27 @@ class CafeteriaFragment : BaseFragment<FragmentCafeteriaBinding, CafeteriaViewMo

private fun findNearestMonday(currentDate: LocalDate): LocalDate {
return when (currentDate.dayOfWeek) {
DayOfWeek.SATURDAY, DayOfWeek.SUNDAY -> {
currentDate.with(TemporalAdjusters.next(DayOfWeek.MONDAY))
SATURDAY, SUNDAY -> {
currentDate.with(TemporalAdjusters.next(MONDAY))
}

DayOfWeek.MONDAY -> {
MONDAY -> {
currentDate
}

else -> {
currentDate.with(TemporalAdjusters.previous(DayOfWeek.MONDAY))
currentDate.with(TemporalAdjusters.previous(MONDAY))
}
}
}

override fun onPause() {
super.onPause()
notifyDateChanged(
viewModel,
binding.cvCafeteriaCalendar,
viewModel.selectedDate.value,
LocalDate.now()
viewModel = viewModel,
calendarView = binding.cvCafeteriaCalendar,
oldDate = viewModel.selectedDate.value,
selectedDate = findNearestMonday(LocalDate.now()),
)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,11 @@ import com.dongyang.android.youdongknowme.data.remote.entity.Cafeteria
import com.dongyang.android.youdongknowme.data.repository.CafeteriaRepository
import com.dongyang.android.youdongknowme.standard.base.BaseViewModel
import com.dongyang.android.youdongknowme.standard.network.NetworkResult
import com.dongyang.android.youdongknowme.standard.util.Weekdays
import com.dongyang.android.youdongknowme.ui.view.util.Event
import com.dongyang.android.youdongknowme.ui.view.util.ResourceProvider
import kotlinx.coroutines.launch
import java.text.DecimalFormat
import java.time.LocalDate

class CafeteriaViewModel(
Expand All @@ -33,8 +35,11 @@ class CafeteriaViewModel(
private val _cafeteriaList: MutableLiveData<List<Cafeteria>> = MutableLiveData()
val cafeteriaList: LiveData<List<Cafeteria>> = _cafeteriaList

private val _menus: MutableLiveData<List<String>> = MutableLiveData()
val menus: LiveData<List<String>> = _menus
private val _koreaMenu: MutableLiveData<List<String>> = MutableLiveData()
val koreaMenu: LiveData<List<String>> = _koreaMenu

private val _daysMenu: MutableLiveData<List<String>> = MutableLiveData()
val daysMenu: LiveData<List<String>> = _daysMenu

private val emptyMenu = listOf(resourceProvider.getString(R.string.cafeteria_no_menu))

Expand Down Expand Up @@ -68,12 +73,27 @@ class CafeteriaViewModel(
val cafeteriaList = _cafeteriaList.value ?: emptyList()
_selectedDate.value = selectedDate
val selectedMenu = cafeteriaList.find { it.date == selectedDate.toString() }?.menus
_menus.postValue(
_koreaMenu.postValue(
if (selectedMenu.isNullOrEmpty()) {
emptyMenu
} else {
selectedMenu
}
)
}

fun updateAnotherMenus(selectedDate: LocalDate) {
viewModelScope.launch {
val dateToWeekday: Weekdays = Weekdays.from(selectedDate.dayOfWeek)
runCatching {
cafeteriaRepository.fetchAnotherMenus(dateToWeekday)
}.onSuccess { daysMenu ->
val formatter = DecimalFormat("#,###")
val formattedMenuWithPrice = daysMenu.map { "${it.menuNameKr} ${formatter.format(it.price)}" }
_daysMenu.value = formattedMenuWithPrice
}.onFailure {
_isError.value = true
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ interface CalendarInterface {
selectedDate: LocalDate
) {
viewModel.updateMenuList(selectedDate)
viewModel.updateAnotherMenus(selectedDate)
calendarView.notifyDateChanged(selectedDate)
oldDate?.let { calendarView.notifyDateChanged(it) }
}
Expand Down

0 comments on commit 7d74204

Please sign in to comment.