Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Refactor/#164] menuservice 리팩토링 #168

Closed
wants to merge 6 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@
android:name=".ui.mypage.terms.WebViewActivity"
android:exported="false" />
<activity
android:name=".ui.login.IntroActivity"
android:name=".ui.intro.IntroActivity"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import com.eatssu.android.data.model.Menu
import com.google.gson.annotations.SerializedName


data class GetFixedMenuResponse(
data class MenuResponse(

@SerializedName("categoryMenuListCollection") var categoryMenuListCollection: ArrayList<CategoryMenuListCollection> = arrayListOf(),

Expand Down Expand Up @@ -39,7 +39,7 @@ data class MenuInformationList(
//}


fun GetFixedMenuResponse.mapFixedMenuResponseToMenu(): List<Menu> {
fun MenuResponse.mapFixedMenuResponseToMenu(): List<Menu> {
val menus = mutableListOf<Menu>()

categoryMenuListCollection.forEach { categoryMenuList ->
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package com.eatssu.android.data.repository

import com.eatssu.android.base.BaseResponse
import com.eatssu.android.data.dto.response.MenuResponse
import kotlinx.coroutines.flow.Flow

interface MenuRepository {

suspend fun getMenu(
restaurant: String,
): Flow<BaseResponse<MenuResponse>>

}

Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package com.eatssu.android.data.repository

import com.eatssu.android.base.BaseResponse
import com.eatssu.android.data.dto.response.MenuResponse
import com.eatssu.android.data.service.MenuService
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.flow
import javax.inject.Inject

class MenuRepositoryImpl @Inject constructor(private val menuService: MenuService) :
MenuRepository {

override suspend fun getMenu(restaurant: String): Flow<BaseResponse<MenuResponse>> =
flow {
emit(menuService.getMenu(restaurant))
}

}
Original file line number Diff line number Diff line change
@@ -1,15 +1,14 @@
package com.eatssu.android.data.service

import com.eatssu.android.base.BaseResponse
import com.eatssu.android.data.dto.response.GetFixedMenuResponse
import retrofit2.Call
import com.eatssu.android.data.dto.response.MenuResponse
import retrofit2.http.GET
import retrofit2.http.Query

interface MenuService {
@GET("menus") //고정 메뉴 리스트 조회
fun getFixMenu(
suspend fun getMenu(
@Query("restaurant") restaurant: String,
): Call<BaseResponse<GetFixedMenuResponse>>
): BaseResponse<MenuResponse>

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package com.eatssu.android.data.usecase

import com.eatssu.android.base.BaseResponse
import com.eatssu.android.data.dto.response.MyReviewResponse
import com.eatssu.android.data.repository.UserRepository
import kotlinx.coroutines.flow.Flow
import javax.inject.Inject

class GetMealUseCase @Inject constructor(
private val userRepository: UserRepository,
) {
suspend operator fun invoke(): Flow<BaseResponse<MyReviewResponse>> =
userRepository.getUserReviews()
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package com.eatssu.android.data.usecase

import com.eatssu.android.base.BaseResponse
import com.eatssu.android.data.dto.response.MenuResponse
import com.eatssu.android.data.repository.MenuRepository
import kotlinx.coroutines.flow.Flow
import javax.inject.Inject

class GetMenuUseCase @Inject constructor(
private val menuRepository: MenuRepository,
) {
suspend operator fun invoke(restaurant: String): Flow<BaseResponse<MenuResponse>> =
menuRepository.getMenu(restaurant)
}
6 changes: 6 additions & 0 deletions app/src/main/java/com/eatssu/android/di/DataModule.kt
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
package com.eatssu.android.di


import com.eatssu.android.data.repository.MenuRepository
import com.eatssu.android.data.repository.MenuRepositoryImpl
import com.eatssu.android.data.repository.OauthRepository
import com.eatssu.android.data.repository.OauthRepositoryImpl
import com.eatssu.android.data.repository.UserRepository
Expand All @@ -24,4 +26,8 @@ abstract class DataModule {
userRepositoryImpl: UserRepositoryImpl,
): UserRepository

@Binds
internal abstract fun bindsMenuRepository(
menuRepositoryImpl: MenuRepositoryImpl,
): MenuRepository
}
7 changes: 7 additions & 0 deletions app/src/main/java/com/eatssu/android/di/NetworkModule.kt
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package com.eatssu.android.di


import com.eatssu.android.BuildConfig
import com.eatssu.android.data.service.MenuService
import com.eatssu.android.data.service.OauthService
import com.eatssu.android.data.service.UserService
import com.eatssu.android.di.network.TokenInterceptor
Expand Down Expand Up @@ -71,4 +72,10 @@ object NetworkModule {
fun provideUserService(retrofit: Retrofit): UserService {
return retrofit.create(UserService::class.java)
}

@Provides
@Singleton
fun provideMenuService(retrofit: Retrofit): MenuService {
return retrofit.create(MenuService::class.java)
}
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.eatssu.android.ui.login
package com.eatssu.android.ui.intro

import android.os.Bundle
import android.os.Handler
Expand All @@ -7,6 +7,7 @@ import androidx.activity.viewModels
import androidx.appcompat.app.AppCompatActivity
import androidx.lifecycle.lifecycleScope
import com.eatssu.android.R
import com.eatssu.android.ui.login.LoginActivity
import com.eatssu.android.ui.main.MainActivity
import com.eatssu.android.util.extension.startActivity
import dagger.hilt.android.AndroidEntryPoint
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.eatssu.android.ui.login
package com.eatssu.android.ui.intro

import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
Expand Down
131 changes: 90 additions & 41 deletions app/src/main/java/com/eatssu/android/ui/main/menu/MenuFragment.kt
Original file line number Diff line number Diff line change
Expand Up @@ -8,34 +8,34 @@ import android.view.View
import android.view.ViewGroup
import androidx.annotation.RequiresApi
import androidx.fragment.app.Fragment
import androidx.fragment.app.viewModels
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModelProvider
import androidx.lifecycle.lifecycleScope
import androidx.recyclerview.widget.LinearLayoutManager
import com.eatssu.android.data.dto.response.mapFixedMenuResponseToMenu
import com.eatssu.android.data.dto.response.mapTodayMenuResponseToMenu
import com.eatssu.android.data.enums.MenuType
import com.eatssu.android.data.enums.Restaurant
import com.eatssu.android.data.enums.Time
import com.eatssu.android.data.model.Section
import com.eatssu.android.data.service.MealService
import com.eatssu.android.data.service.MenuService
import com.eatssu.android.databinding.FragmentMenuBinding
import com.eatssu.android.ui.main.calendar.CalendarViewModel
import com.eatssu.android.util.RetrofitImpl
import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.flow.collectLatest
import kotlinx.coroutines.launch
import java.time.DayOfWeek
import java.time.LocalDate
import java.time.LocalDateTime
import java.time.format.DateTimeFormatter

@AndroidEntryPoint
class MenuFragment : Fragment() {
private var _binding: FragmentMenuBinding? = null
private val binding get() = _binding!!

private lateinit var calendarViewModel: CalendarViewModel
private lateinit var menuViewModel: MenuViewModel

private lateinit var menuService: MenuService
private lateinit var mealService: MealService
private val menuViewModel: MenuViewModel by viewModels()

private lateinit var menuDate: String

Expand All @@ -49,6 +49,9 @@ class MenuFragment : Fragment() {


companion object {

val TAG = "MenuFragment"

fun newInstance(time: Time): MenuFragment {
val fragment = MenuFragment()
val args = Bundle()
Expand Down Expand Up @@ -84,19 +87,11 @@ class MenuFragment : Fragment() {

@RequiresApi(Build.VERSION_CODES.O)
fun observeViewModel(){
menuService = RetrofitImpl.retrofit.create(MenuService::class.java)
mealService = RetrofitImpl.retrofit.create(MealService::class.java)

// Log.d("MenuFragment", App.token_prefs.accessToken + "여기부터" + App.token_prefs.refreshToken)
val calendardate = this.arguments?.getString("calendardata")
Log.d("lunchdate", "$calendardate")

// menuRepository = MenuRepository(menuService)
menuViewModel =
ViewModelProvider(
this,
MenuViewModelFactory(menuService, mealService)
)[MenuViewModel::class.java]

// ViewModel에서 데이터 가져오기
calendarViewModel = ViewModelProvider(requireActivity())[CalendarViewModel::class.java]
Expand All @@ -115,37 +110,37 @@ class MenuFragment : Fragment() {
val formattedDate = LocalDate.parse(menuDate, DateTimeFormatter.BASIC_ISO_DATE)

val dayOfWeek = formattedDate.dayOfWeek
Log.d("menudate", menuDate)
Log.d(TAG, "menudate: " + menuDate)

if (dayOfWeek != DayOfWeek.SATURDAY && dayOfWeek != DayOfWeek.SUNDAY && time == Time.LUNCH) {
// The date is not on a weekend
//푸드코트
menuViewModel.loadFixedMenu(Restaurant.FOOD_COURT)
menuViewModel.fixedMenuDataFood.observe(viewLifecycleOwner) { result ->
totalMenuList.add(
Section(
MenuType.FIXED,
Restaurant.FOOD_COURT,
result.mapFixedMenuResponseToMenu()
)
)
foodCourtDataLoaded.value = true
checkDataLoaded()
}
// 주중&점심: 푸드코트, 스낵코너, 더키친

loadFoodCourt() //푸드코트
loadSnackCorner()//스낵코너

//스낵코너
menuViewModel.loadFixedMenu(Restaurant.SNACK_CORNER)
menuViewModel.fixedMenuDataSnack.observe(viewLifecycleOwner) { result ->
totalMenuList.add(
Section(
MenuType.FIXED,
Restaurant.SNACK_CORNER,
result.mapFixedMenuResponseToMenu()
lifecycleScope.launch {
Log.d(TAG, "관찰시작")
menuViewModel.uiState.collectLatest {
// if (!it.error && !it.loading) {

totalMenuList.add(
Section(
MenuType.FIXED,
Restaurant.SNACK_CORNER,
it.snackMenu
)

)
)
snackCornerDataLoaded.value = true
checkDataLoaded()
Log.d(TAG, it.snackMenu.toString())

foodCourtDataLoaded.value = true
checkDataLoaded()
// }
}
}
checkDataLoaded()

Log.d("MenuFragment", "The date $menuDate is not on a weekend.")
}

Expand All @@ -164,7 +159,6 @@ class MenuFragment : Fragment() {
}



//학생식당
menuViewModel.loadTodayMeal(menuDate, Restaurant.HAKSIK, time)
menuViewModel.todayMealDataHaksik.observe(viewLifecycleOwner) { result ->
Expand Down Expand Up @@ -217,6 +211,61 @@ class MenuFragment : Fragment() {
}
}

fun loadFoodCourt() {
menuViewModel.loadFixedMenu(Restaurant.FOOD_COURT)
lifecycleScope.launch {
Log.d(TAG, "관찰시작")
menuViewModel.uiState.collectLatest {
// if (!it.error && !it.loading) {

totalMenuList.add(
Section(
MenuType.FIXED,
Restaurant.FOOD_COURT,
it.foodCourtMenu
)
)
foodCourtDataLoaded.value = true
checkDataLoaded()
}
// }
}
}

fun loadSnackCorner() {
// menuViewModel.loadFixedMenu(Restaurant.SNACK_CORNER)
// lifecycleScope.launch {
// Log.d(TAG, "관찰시작")
// menuViewModel.uiState.collectLatest {
//// if (!it.error && !it.loading) {
//
// totalMenuList.add(
// Section(
// MenuType.FIXED,
// Restaurant.SNACK_CORNER,
// it.snackMenu
// )
// )
// foodCourtDataLoaded.value = true
// checkDataLoaded()
//// }
// }
// }
// menuViewModel.fixedMenuDataSnack.observe(viewLifecycleOwner) { result ->
// if (result.categoryMenuListCollection.isNotEmpty()) {
// totalMenuList.add(
// Section(
// MenuType.FIXED,
// Restaurant.SNACK_CORNER,
// result.mapFixedMenuResponseToMenu()
// )
// )
// snackCornerDataLoaded.value = true
// checkDataLoaded()
// }
// }
}

private fun setupTodayRecyclerView() {
binding.rv.apply {
setHasFixedSize(true)
Expand Down
Loading
Loading