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
@@ -1,5 +1,6 @@
package sopt.org.starbucks.data.datasource

import sopt.org.starbucks.data.dto.response.MyMenuDetailDto
import sopt.org.starbucks.data.dto.response.MyMenuListDto
import sopt.org.starbucks.data.network.BaseResponse
import sopt.org.starbucks.data.service.MyMenuService
Expand All @@ -13,4 +14,6 @@ class MyMenuDataSource
private val myMenuService: MyMenuService
) {
suspend fun getMyMenuList(): BaseResponse<MyMenuListDto> = myMenuService.getMyMenuList()

suspend fun getMyMenuDetail(menuId: Long): BaseResponse<MyMenuDetailDto> = myMenuService.getMyMenuDetail(menuId)
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
package sopt.org.starbucks.data.dto.response

import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable

@Serializable
data class MyMenuDetailDto(
@SerialName("categoryName")
val categoryName: String,
@SerialName("myMenuId")
val myMenuId: Long,
@SerialName("hotMenuKr")
val hotMenuKr: String,
@SerialName("hotMenuEng")
val hotMenuEng: String,
@SerialName("hotMenuImageUrl")
val hotMenuImageUrl: String,
@SerialName("iceMenuKr")
val iceMenuKr: String,
@SerialName("iceMenuEng")
val iceMenuEng: String,
@SerialName("iceMenuImageUrl")
val iceMenuImageUrl: String,
@SerialName("info")
val info: String,
@SerialName("price")
val price: Int,
@SerialName("count")
val count: Int,
@SerialName("isHot")
val isHot: Boolean,
@SerialName("size")
val size: String,
@SerialName("sizePrices")
val sizePrices: SizePricesDto,
@SerialName("personalOptions")
val personalOptions: List<PersonalOptionDto>,
@SerialName("summary")
val summary: String
)

@Serializable
data class SizePricesDto(
@SerialName("Tall")
val tall: Int,
@SerialName("Grande")
val grande: Int,
@SerialName("Venti")
val venti: Int
)

@Serializable
data class PersonalOptionDto(
@SerialName("name")
val name: String,
@SerialName("price")
val price: Int
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
package sopt.org.starbucks.data.mapper

import sopt.org.starbucks.data.dto.response.MyMenuDetailDto
import sopt.org.starbucks.data.dto.response.PersonalOptionDto
import sopt.org.starbucks.data.dto.response.SizePricesDto
import sopt.org.starbucks.data.model.MenuDetailModel
import sopt.org.starbucks.data.model.PersonalOption
import sopt.org.starbucks.data.model.SizePrices

fun MyMenuDetailDto.toDomain(): MenuDetailModel =
MenuDetailModel(
myMenuId = this.myMenuId,
categoryName = this.categoryName,
hotMenuKr = this.hotMenuKr,
hotMenuEng = this.hotMenuEng,
hotMenuImageUrl = this.hotMenuImageUrl,
iceMenuKr = this.iceMenuKr,
iceMenuEng = this.iceMenuEng,
iceMenuImageUrl = this.iceMenuImageUrl,
info = this.info,
price = this.price,
count = this.count,
isHot = this.isHot,
size = this.size,
sizePrices = this.sizePrices.toDomain(),
personalOptions = this.personalOptions.map { it.toDomain() },
summary = this.summary,
isNew = true,
notices = listOf(
"* 리치 과육의 숙 캡슐이 있을 수 있지만 안심하고 드세요.",
"* 대체당(스테비아)을 일부 사용하여 당과 칼로리를 낮췄습니다."
)
)

fun SizePricesDto.toDomain(): SizePrices =
SizePrices(
tall = this.tall,
grande = this.grande,
venti = this.venti
)

fun PersonalOptionDto.toDomain(): PersonalOption =
PersonalOption(
name = this.name,
price = this.price
)
31 changes: 26 additions & 5 deletions app/src/main/java/sopt/org/starbucks/data/model/MenuDetailModel.kt
Original file line number Diff line number Diff line change
@@ -1,12 +1,33 @@
package sopt.org.starbucks.data.model

data class MenuDetailModel(
val id: String = "",
val koreanName: String = "",
val englishName: String = "",
val description: String = "",
val imageUrl: String? = null,
val myMenuId: Long = 0,
val categoryName: String = "",
val hotMenuKr: String = "",
val hotMenuEng: String = "",
val hotMenuImageUrl: String = "",
val iceMenuKr: String = "",
val iceMenuEng: String = "",
val iceMenuImageUrl: String = "",
val info: String = "",
val price: Int = 0,
val count: Int = 0,
val isHot: Boolean = true,
val size: String = "TALL",
val sizePrices: SizePrices = SizePrices(),
val personalOptions: List<PersonalOption> = emptyList(),
val summary: String = "",
val isNew: Boolean = false,
val notices: List<String> = emptyList()
)

data class SizePrices(
val tall: Int = 0,
val grande: Int = 0,
val venti: Int = 0
)

data class PersonalOption(
val name: String = "",
val price: Int = 0
)
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package sopt.org.starbucks.data.repository

import sopt.org.starbucks.data.datasource.MyMenuDataSource
import sopt.org.starbucks.data.mapper.toDomain
import sopt.org.starbucks.data.model.MenuDetailModel
import sopt.org.starbucks.data.model.MyMenu
import sopt.org.starbucks.data.network.handleApiResponse
import sopt.org.starbucks.data.network.safeApiCall
Expand All @@ -22,4 +23,13 @@ class MyMenuRepository
.getOrThrow()
.toDomain()
}

suspend fun getMyMenuDetail(menuId: Long): Result<MenuDetailModel> =
safeApiCall {
myMenuDataSource
.getMyMenuDetail(menuId)
.handleApiResponse()
.getOrThrow()
.toDomain()
}
}
Original file line number Diff line number Diff line change
@@ -1,10 +1,17 @@
package sopt.org.starbucks.data.service

import retrofit2.http.GET
import retrofit2.http.Path
import sopt.org.starbucks.data.dto.response.MyMenuDetailDto
import sopt.org.starbucks.data.dto.response.MyMenuListDto
import sopt.org.starbucks.data.network.BaseResponse

interface MyMenuService {
@GET("/api/v1/mymenu/list")
suspend fun getMyMenuList(): BaseResponse<MyMenuListDto>

@GET("/api/v1/mymenu/{menuId}")
suspend fun getMyMenuDetail(
@Path("menuId") menuId: Long
): BaseResponse<MyMenuDetailDto>
}
10 changes: 6 additions & 4 deletions app/src/main/java/sopt/org/starbucks/ui/main/MainNavHost.kt
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ import sopt.org.starbucks.core.navigation.Other
import sopt.org.starbucks.core.navigation.Pay
import sopt.org.starbucks.core.navigation.Shop
import sopt.org.starbucks.ui.home.HomeRoute
import sopt.org.starbucks.ui.mymenu.MyMenuRoute
import sopt.org.starbucks.ui.order.OrderRoute

@Composable
Expand Down Expand Up @@ -43,10 +44,11 @@ fun MainNavHost(
composable<Other> { }
composable<MyMenu> { backStackEntry ->
val args = backStackEntry.toRoute<MyMenu>()
// MyMenuRoute(
// paddingValues = paddingValues,
// menuId = args.menuId
// )
MyMenuRoute(
paddingValues = paddingValues,
menuId = args.menuId,
onBackClick = { navigator.navController.navigateUp() }
)
}
}
}
Loading