Skip to content
Merged
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
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
package com.eatssu.android.data.remote.dto.response

import com.eatssu.android.domain.model.FavoriteMenu
import com.eatssu.android.domain.model.MenuFavoriteSearchResult
import com.eatssu.common.enums.Restaurant
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable

@Serializable
data class FavoriteMenuResponse(
@SerialName("menuId")
val menuId: Long,
@SerialName("menuName")
val menuName: String,
@SerialName("restaurant")
val restaurant: Restaurant,
@SerialName("isDiscontinued")
val isDiscontinued: Boolean,
)

@Serializable
data class MenuFavoriteSearchResponse(
@SerialName("menuId")
val menuId: Long,
@SerialName("menuName")
val menuName: String,
@SerialName("restaurant")
val restaurant: Restaurant,
@SerialName("isFavorite")
val isFavorite: Boolean,
)

fun FavoriteMenuResponse.toDomain(): FavoriteMenu = FavoriteMenu(
menuId = menuId,
menuName = menuName,
restaurant = restaurant,
isDiscontinued = isDiscontinued,
)

fun MenuFavoriteSearchResponse.toDomain(): MenuFavoriteSearchResult = MenuFavoriteSearchResult(
menuId = menuId,
menuName = menuName,
restaurant = restaurant,
isFavorite = isFavorite,
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
package com.eatssu.android.data.remote.repository

import com.eatssu.android.data.model.ApiResult
import com.eatssu.android.data.model.map
import com.eatssu.android.data.remote.dto.response.toDomain
import com.eatssu.android.data.remote.service.MenuFavoriteService
import com.eatssu.android.domain.model.FavoriteMenu
import com.eatssu.android.domain.model.MenuFavoriteSearchResult
import com.eatssu.android.domain.repository.MenuFavoriteRepository
import javax.inject.Inject

class MenuFavoriteRepositoryImpl @Inject constructor(
private val menuFavoriteService: MenuFavoriteService,
) : MenuFavoriteRepository {
override suspend fun searchMenus(keyword: String): ApiResult<List<MenuFavoriteSearchResult>> =
menuFavoriteService.searchMenus(keyword).map { menus -> menus.map { it.toDomain() } }

override suspend fun getFavoriteMenus(): ApiResult<List<FavoriteMenu>> =
menuFavoriteService.getFavoriteMenus().map { menus -> menus.map { it.toDomain() } }

override suspend fun addFavoriteMenu(menuId: Long): ApiResult<Unit> =
menuFavoriteService.addFavoriteMenu(menuId)

override suspend fun removeFavoriteMenu(menuId: Long): ApiResult<Unit> =
menuFavoriteService.removeFavoriteMenu(menuId)
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
package com.eatssu.android.data.remote.service

import com.eatssu.android.data.model.ApiResult
import com.eatssu.android.data.remote.dto.response.FavoriteMenuResponse
import com.eatssu.android.data.remote.dto.response.MenuFavoriteSearchResponse
import retrofit2.http.DELETE
import retrofit2.http.GET
import retrofit2.http.POST
import retrofit2.http.Path
import retrofit2.http.Query

interface MenuFavoriteService {
@GET("menu-favorites/search")
suspend fun searchMenus(
@Query("keyword") keyword: String,
): ApiResult<List<MenuFavoriteSearchResponse>>

@GET("menu-favorites")
suspend fun getFavoriteMenus(): ApiResult<List<FavoriteMenuResponse>>

@POST("menu-favorites/{menuId}")
suspend fun addFavoriteMenu(
@Path("menuId") menuId: Long,
): ApiResult<Unit>

@DELETE("menu-favorites/{menuId}")
suspend fun removeFavoriteMenu(
@Path("menuId") menuId: Long,
): ApiResult<Unit>
}
7 changes: 7 additions & 0 deletions app/src/main/java/com/eatssu/android/di/DataModule.kt
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import com.eatssu.android.data.remote.repository.FirebaseRemoteConfigRepositoryI
import com.eatssu.android.data.remote.repository.HealthCheckRepositoryImpl
import com.eatssu.android.data.remote.repository.MealRepositoryImpl
import com.eatssu.android.data.remote.repository.MenuRepositoryImpl
import com.eatssu.android.data.remote.repository.MenuFavoriteRepositoryImpl
import com.eatssu.android.data.remote.repository.OauthRepositoryImpl
import com.eatssu.android.data.remote.repository.PartnershipRepositoryImpl
import com.eatssu.android.data.remote.repository.PublicHolidayRepositoryImpl
Expand All @@ -15,6 +16,7 @@ import com.eatssu.android.domain.repository.FirebaseRemoteConfigRepository
import com.eatssu.android.domain.repository.HealthCheckRepository
import com.eatssu.android.domain.repository.MealRepository
import com.eatssu.android.domain.repository.MenuRepository
import com.eatssu.android.domain.repository.MenuFavoriteRepository
import com.eatssu.android.domain.repository.OauthRepository
import com.eatssu.android.domain.repository.PartnershipRepository
import com.eatssu.android.domain.repository.PublicHolidayRepository
Expand Down Expand Up @@ -70,6 +72,11 @@ abstract class DataModule {
menuRepositoryImpl: MenuRepositoryImpl,
): MenuRepository

@Binds
internal abstract fun bindsMenuFavoriteRepository(
menuFavoriteRepositoryImpl: MenuFavoriteRepositoryImpl,
): MenuFavoriteRepository

@Binds
internal abstract fun bindsFirebaseRemoteConfigRepository(
firebaseRemoteConfigRepositoryImpl: FirebaseRemoteConfigRepositoryImpl,
Expand Down
7 changes: 7 additions & 0 deletions app/src/main/java/com/eatssu/android/di/ServiceModule.kt
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package com.eatssu.android.di
import com.eatssu.android.data.remote.service.HealthCheckService
import com.eatssu.android.data.remote.service.MealService
import com.eatssu.android.data.remote.service.MenuService
import com.eatssu.android.data.remote.service.MenuFavoriteService
import com.eatssu.android.data.remote.service.OauthService
import com.eatssu.android.data.remote.service.PartnershipService
import com.eatssu.android.data.remote.service.ReportService
Expand Down Expand Up @@ -55,6 +56,12 @@ object ServiceModule {
return retrofit.create(MenuService::class.java)
}

@Provides
@Singleton
fun provideMenuFavoriteService(retrofit: Retrofit): MenuFavoriteService {
return retrofit.create(MenuFavoriteService::class.java)
}

@Provides
@Singleton
fun providePartnershipService(retrofit: Retrofit): PartnershipService {
Expand Down
17 changes: 17 additions & 0 deletions app/src/main/java/com/eatssu/android/domain/model/MenuFavorite.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package com.eatssu.android.domain.model

import com.eatssu.common.enums.Restaurant

data class FavoriteMenu(
val menuId: Long,
val menuName: String,
val restaurant: Restaurant,
val isDiscontinued: Boolean,
)

data class MenuFavoriteSearchResult(
val menuId: Long,
val menuName: String,
val restaurant: Restaurant,
val isFavorite: Boolean,
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package com.eatssu.android.domain.repository

import com.eatssu.android.data.model.ApiResult
import com.eatssu.android.domain.model.FavoriteMenu
import com.eatssu.android.domain.model.MenuFavoriteSearchResult

interface MenuFavoriteRepository {
suspend fun searchMenus(keyword: String): ApiResult<List<MenuFavoriteSearchResult>>
suspend fun getFavoriteMenus(): ApiResult<List<FavoriteMenu>>
suspend fun addFavoriteMenu(menuId: Long): ApiResult<Unit>
suspend fun removeFavoriteMenu(menuId: Long): ApiResult<Unit>
}
Original file line number Diff line number Diff line change
Expand Up @@ -103,11 +103,10 @@ class MainActivity : BaseActivity<ActivityMainBinding>(
// false
// }

//TODO 찜 기능 완성 시
// R.id.favorite_menu -> {
// navController.navigate(R.id.favoriteFragment)
// true
// }
R.id.favorite_menu -> {
navController.navigate(R.id.favoriteFragment)
true
}

R.id.mypage_menu -> {
navController.navigate(R.id.myPageFragment)
Expand All @@ -123,7 +122,8 @@ class MainActivity : BaseActivity<ActivityMainBinding>(
navController.addOnDestinationChangedListener { _, destination, _ ->
val menuItemId = when (destination.id) {
R.id.cafeteria_menu -> R.id.cafeteria_menu
R.id.mapFragment, R.id.favoriteDetailFragment, R.id.favoriteFragment -> R.id.map_menu
R.id.mapFragment -> R.id.map_menu
R.id.favoriteDetailFragment, R.id.favoriteFragment -> R.id.favorite_menu
R.id.myPageFragment -> R.id.mypage_menu
else -> null
}
Expand Down
Loading
Loading