Skip to content

Commit

Permalink
[add] #159 HEAD code
Browse files Browse the repository at this point in the history
  • Loading branch information
Jokwanhee committed Jan 30, 2024
1 parent c6a076c commit eeed808
Show file tree
Hide file tree
Showing 6 changed files with 97 additions and 9 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -156,7 +156,7 @@ class ShopViewModel @Inject constructor(

fun getShopRates(placeId: String) {
viewModelScope.launch(ceh) {
shopUseCase.getShopRates(placeId) { msg ->
shopUseCase.getShopsRates(placeId) { msg ->
toastMsg.postValue(msg)
}.collect {
it.onSuccess {
Expand Down
11 changes: 10 additions & 1 deletion data/src/main/java/com/jjbaksa/data/datasource/ShopDataSource.kt
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,11 @@ package com.jjbaksa.data.datasource

import com.jjbaksa.data.model.pin.RateDto
import com.jjbaksa.data.model.pin.ScrapDto
import com.jjbaksa.data.model.shop.ShopsMapsResp
import com.jjbaksa.data.model.pin.ShopDetailResp
import com.jjbaksa.data.model.search.LocationBody
import com.jjbaksa.data.model.shop.ShopsMapsResp
import com.jjbaksa.data.model.shop.ShopInfoResp
import com.jjbaksa.data.model.shop.ShopRatesResp
import retrofit2.Response

interface ShopDataSource {
Expand All @@ -23,4 +25,11 @@ interface ShopDataSource {
suspend fun getShopsScraps(
placeId: String
): Response<ScrapDto>
suspend fun getShopInfo(
placeId: String
): Response<ShopInfoResp>

suspend fun getShopRates(
placeId: String
): Response<ShopRatesResp>
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,11 @@ import com.jjbaksa.data.api.NoAuthApi
import com.jjbaksa.data.datasource.ShopDataSource
import com.jjbaksa.data.model.pin.RateDto
import com.jjbaksa.data.model.pin.ScrapDto
import com.jjbaksa.data.model.shop.ShopsMapsResp
import com.jjbaksa.data.model.pin.ShopDetailResp
import com.jjbaksa.data.model.search.LocationBody
import com.jjbaksa.data.model.shop.ShopsMapsResp
import com.jjbaksa.data.model.shop.ShopInfoResp
import com.jjbaksa.data.model.shop.ShopRatesResp
import retrofit2.Response
import javax.inject.Inject

Expand All @@ -19,7 +21,7 @@ class ShopRemoteDataSource @Inject constructor(
optionsFriend: Int,
optionsNearby: Int,
optionsScrap: Int,
location: LocationBody
location: LocationBody,
): Response<List<ShopsMapsResp>> {
return authApi.getShopsMaps(optionsFriend, optionsNearby, optionsScrap, location)
}
Expand All @@ -35,4 +37,12 @@ class ShopRemoteDataSource @Inject constructor(
override suspend fun getShopsScraps(placeId: String): Response<ScrapDto> {
return authApi.getShopsScraps(placeId)
}

override suspend fun getShopInfo(placeId: String): Response<ShopInfoResp> {
return noAuthApi.getShopInfo(placeId)
}

override suspend fun getShopRates(placeId: String): Response<ShopRatesResp> {
return noAuthApi.getShopRates(placeId)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,15 @@ import com.jjbaksa.data.datasource.remote.ShopRemoteDataSource
import com.jjbaksa.data.mapper.RespMapper
import com.jjbaksa.data.mapper.toMapShopData
import com.jjbaksa.data.mapper.toShopDetail
import com.jjbaksa.data.mapper.toShopInfo
import com.jjbaksa.data.mapper.toShopRates
import com.jjbaksa.data.model.apiCall
import com.jjbaksa.data.model.search.LocationBody
import com.jjbaksa.domain.model.shop.ShopDetail
import com.jjbaksa.domain.model.shop.ShopsMaps
import com.jjbaksa.domain.repository.ShopRepository
import com.jjbaksa.domain.model.shop.ShopsMaps
import com.jjbaksa.domain.model.shop.ShopDetail
import com.jjbaksa.domain.model.shop.ShopInfo
import com.jjbaksa.domain.model.shop.ShopRates
import kotlinx.coroutines.flow.Flow
import javax.inject.Inject
import kotlin.math.round
Expand Down Expand Up @@ -88,6 +92,26 @@ class ShopRepositoryImpl @Inject constructor(
)
}

override suspend fun getShopInfo(
placeId: String,
onError: (String) -> Unit,
): Flow<Result<ShopInfo>> {
return apiCall(
call = {
shopRemoteDataSource.getShopInfo(placeId)
},
mapper = {
if (it.isSuccessful) {
it.body()?.toShopInfo() ?: ShopInfo()
} else {
val errorResult = RespMapper.errorMapper(it.errorBody()?.string() ?: "")
onError(errorResult.errorMessage)
ShopInfo()
}
}
)
}

override suspend fun getShopsScraps(
placeId: String,
onError: (String) -> Unit,
Expand All @@ -107,4 +131,24 @@ class ShopRepositoryImpl @Inject constructor(
}
)
}

override suspend fun getShopRates(
placeId: String,
onError: (String) -> Unit,
): Flow<Result<ShopRates>> {
return apiCall(
call = {
shopRemoteDataSource.getShopRates(placeId)
},
mapper = {
if (it.isSuccessful) {
it.body()?.toShopRates() ?: ShopRates()
} else {
val errorResult = RespMapper.errorMapper(it.errorBody()?.string() ?: "")
onError(errorResult.errorMessage)
ShopRates()
}
}
)
}
}
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
package com.jjbaksa.domain.repository

import com.jjbaksa.domain.model.shop.ShopDetail
import com.jjbaksa.domain.model.shop.ShopsMaps
import com.jjbaksa.domain.model.shop.ShopDetail
import com.jjbaksa.domain.model.shop.ShopInfo
import com.jjbaksa.domain.model.shop.ShopRates
import kotlinx.coroutines.flow.Flow

interface ShopRepository {
Expand All @@ -25,4 +27,14 @@ interface ShopRepository {
placeId: String,
onError: (String) -> Unit
): Flow<Result<Long>>

suspend fun getShopInfo(
placeId: String,
onError: (String) -> Unit
): Flow<Result<ShopInfo>>

suspend fun getShopRates(
placeId: String,
onError: (String) -> Unit
): Flow<Result<ShopRates>>
}
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
package com.jjbaksa.domain.usecase.shop

import com.jjbaksa.domain.model.shop.ShopDetail
import com.jjbaksa.domain.model.shop.ShopsMaps
import com.jjbaksa.domain.repository.ShopRepository
import com.jjbaksa.domain.model.shop.ShopsMaps
import com.jjbaksa.domain.model.shop.ShopDetail
import com.jjbaksa.domain.model.shop.ShopInfo
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.map
import javax.inject.Inject

class ShopUseCase @Inject constructor(
Expand Down Expand Up @@ -31,4 +33,15 @@ class ShopUseCase @Inject constructor(
suspend fun getShopsScraps(placeId: String, onError: (String) -> Unit): Flow<Result<Long>> {
return shopRepository.getShopsScraps(placeId, onError)
}
suspend fun getShopInfo(placeId: String, onError: (String) -> Unit): Flow<Result<ShopInfo>> {
return shopRepository.getShopInfo(placeId, onError)
}

suspend fun getShopRates(placeId: String, onError: (String) -> Unit): Flow<Result<Float>> {
return shopRepository.getShopRates(placeId, onError).map {
it.map { rates ->
rates.totalRating.toFloat() / rates.ratingCount.toFloat()
}
}
}
}

0 comments on commit eeed808

Please sign in to comment.