Save isFavorite flag to DB for recipes
This commit is contained in:
@@ -5,13 +5,13 @@ interface NetworkRequestWrapper {
|
||||
suspend fun <T> makeCall(
|
||||
block: suspend () -> T,
|
||||
logMethod: () -> String,
|
||||
logParameters: () -> String,
|
||||
logParameters: (() -> String)? = null,
|
||||
): Result<T>
|
||||
|
||||
suspend fun <T> makeCallAndHandleUnauthorized(
|
||||
block: suspend () -> T,
|
||||
logMethod: () -> String,
|
||||
logParameters: () -> String,
|
||||
logParameters: (() -> String)? = null,
|
||||
): T
|
||||
|
||||
}
|
||||
@@ -16,18 +16,40 @@ class NetworkRequestWrapperImpl @Inject constructor(
|
||||
override suspend fun <T> makeCall(
|
||||
block: suspend () -> T,
|
||||
logMethod: () -> String,
|
||||
logParameters: () -> String,
|
||||
logParameters: (() -> String)?,
|
||||
): Result<T> {
|
||||
logger.v { "${logMethod()} called with: ${logParameters()}" }
|
||||
logger.v {
|
||||
if (logParameters == null) {
|
||||
"${logMethod()} called"
|
||||
} else {
|
||||
"${logMethod()} called with: ${logParameters()}"
|
||||
}
|
||||
}
|
||||
return runCatchingExceptCancel { block() }
|
||||
.onFailure { logger.e(it) { "${logMethod()} request failed with: ${logParameters()}" } }
|
||||
.onSuccess { logger.d { "${logMethod()} request succeeded with ${logParameters()}, result = $it" } }
|
||||
.onFailure {
|
||||
logger.e(it) {
|
||||
if (logParameters == null) {
|
||||
"${logMethod()} request failed"
|
||||
} else {
|
||||
"${logMethod()} request failed with: ${logParameters()}"
|
||||
}
|
||||
}
|
||||
}
|
||||
.onSuccess {
|
||||
logger.d {
|
||||
if (logParameters == null) {
|
||||
"${logMethod()} request succeeded, result = $it"
|
||||
} else {
|
||||
"${logMethod()} request succeeded with: ${logParameters()}, result = $it"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override suspend fun <T> makeCallAndHandleUnauthorized(
|
||||
block: suspend () -> T,
|
||||
logMethod: () -> String,
|
||||
logParameters: () -> String
|
||||
logParameters: (() -> String)?
|
||||
): T = makeCall(block, logMethod, logParameters).getOrElse {
|
||||
throw if (it is HttpException && it.code() in listOf(401, 403)) {
|
||||
NetworkError.Unauthorized(it)
|
||||
|
||||
@@ -4,6 +4,7 @@ import gq.kirmanak.mealient.datasource.v0.models.AddRecipeRequestV0
|
||||
import gq.kirmanak.mealient.datasource.v0.models.CreateApiTokenRequestV0
|
||||
import gq.kirmanak.mealient.datasource.v0.models.GetRecipeResponseV0
|
||||
import gq.kirmanak.mealient.datasource.v0.models.GetRecipeSummaryResponseV0
|
||||
import gq.kirmanak.mealient.datasource.v0.models.GetUserInfoResponseV0
|
||||
import gq.kirmanak.mealient.datasource.v0.models.ParseRecipeURLRequestV0
|
||||
import gq.kirmanak.mealient.datasource.v0.models.VersionResponseV0
|
||||
|
||||
@@ -21,8 +22,7 @@ interface MealieDataSourceV0 {
|
||||
password: String,
|
||||
): String
|
||||
|
||||
suspend fun getVersionInfo(
|
||||
): VersionResponseV0
|
||||
suspend fun getVersionInfo(): VersionResponseV0
|
||||
|
||||
suspend fun requestRecipes(
|
||||
start: Int,
|
||||
@@ -40,4 +40,6 @@ interface MealieDataSourceV0 {
|
||||
suspend fun createApiToken(
|
||||
request: CreateApiTokenRequestV0,
|
||||
): String
|
||||
|
||||
suspend fun requestUserInfo(): GetUserInfoResponseV0
|
||||
}
|
||||
@@ -8,6 +8,7 @@ import gq.kirmanak.mealient.datasource.v0.models.CreateApiTokenRequestV0
|
||||
import gq.kirmanak.mealient.datasource.v0.models.ErrorDetailV0
|
||||
import gq.kirmanak.mealient.datasource.v0.models.GetRecipeResponseV0
|
||||
import gq.kirmanak.mealient.datasource.v0.models.GetRecipeSummaryResponseV0
|
||||
import gq.kirmanak.mealient.datasource.v0.models.GetUserInfoResponseV0
|
||||
import gq.kirmanak.mealient.datasource.v0.models.ParseRecipeURLRequestV0
|
||||
import gq.kirmanak.mealient.datasource.v0.models.VersionResponseV0
|
||||
import kotlinx.serialization.SerializationException
|
||||
@@ -49,7 +50,6 @@ class MealieDataSourceV0Impl @Inject constructor(
|
||||
override suspend fun getVersionInfo(): VersionResponseV0 = networkRequestWrapper.makeCall(
|
||||
block = { service.getVersion() },
|
||||
logMethod = { "getVersionInfo" },
|
||||
logParameters = { "" },
|
||||
).getOrElse {
|
||||
throw when (it) {
|
||||
is HttpException, is SerializationException -> NetworkError.NotMealie(it)
|
||||
@@ -90,4 +90,11 @@ class MealieDataSourceV0Impl @Inject constructor(
|
||||
logMethod = { "createApiToken" },
|
||||
logParameters = { "request = $request" }
|
||||
)
|
||||
|
||||
override suspend fun requestUserInfo(): GetUserInfoResponseV0 {
|
||||
return networkRequestWrapper.makeCallAndHandleUnauthorized(
|
||||
block = { service.getUserSelfInfo() },
|
||||
logMethod = { "requestUserInfo" },
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -40,4 +40,7 @@ interface MealieServiceV0 {
|
||||
suspend fun createApiToken(
|
||||
@Body request: CreateApiTokenRequestV0,
|
||||
): String
|
||||
|
||||
@GET("/api/users/self")
|
||||
suspend fun getUserSelfInfo(): GetUserInfoResponseV0
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
package gq.kirmanak.mealient.datasource.v0.models
|
||||
|
||||
import kotlinx.serialization.SerialName
|
||||
import kotlinx.serialization.Serializable
|
||||
|
||||
@Serializable
|
||||
data class GetUserInfoResponseV0(
|
||||
@SerialName("favoriteRecipes") val favoriteRecipes: List<String> = emptyList(),
|
||||
)
|
||||
@@ -5,6 +5,7 @@ import gq.kirmanak.mealient.datasource.v1.models.CreateApiTokenResponseV1
|
||||
import gq.kirmanak.mealient.datasource.v1.models.CreateRecipeRequestV1
|
||||
import gq.kirmanak.mealient.datasource.v1.models.GetRecipeResponseV1
|
||||
import gq.kirmanak.mealient.datasource.v1.models.GetRecipeSummaryResponseV1
|
||||
import gq.kirmanak.mealient.datasource.v1.models.GetUserInfoResponseV1
|
||||
import gq.kirmanak.mealient.datasource.v1.models.ParseRecipeURLRequestV1
|
||||
import gq.kirmanak.mealient.datasource.v1.models.UpdateRecipeRequestV1
|
||||
import gq.kirmanak.mealient.datasource.v1.models.VersionResponseV1
|
||||
@@ -47,4 +48,6 @@ interface MealieDataSourceV1 {
|
||||
suspend fun createApiToken(
|
||||
request: CreateApiTokenRequestV1,
|
||||
): CreateApiTokenResponseV1
|
||||
|
||||
suspend fun requestUserInfo(): GetUserInfoResponseV1
|
||||
}
|
||||
@@ -9,6 +9,7 @@ import gq.kirmanak.mealient.datasource.v1.models.CreateRecipeRequestV1
|
||||
import gq.kirmanak.mealient.datasource.v1.models.ErrorDetailV1
|
||||
import gq.kirmanak.mealient.datasource.v1.models.GetRecipeResponseV1
|
||||
import gq.kirmanak.mealient.datasource.v1.models.GetRecipeSummaryResponseV1
|
||||
import gq.kirmanak.mealient.datasource.v1.models.GetUserInfoResponseV1
|
||||
import gq.kirmanak.mealient.datasource.v1.models.ParseRecipeURLRequestV1
|
||||
import gq.kirmanak.mealient.datasource.v1.models.UpdateRecipeRequestV1
|
||||
import gq.kirmanak.mealient.datasource.v1.models.VersionResponseV1
|
||||
@@ -60,7 +61,6 @@ class MealieDataSourceV1Impl @Inject constructor(
|
||||
override suspend fun getVersionInfo(): VersionResponseV1 = networkRequestWrapper.makeCall(
|
||||
block = { service.getVersion() },
|
||||
logMethod = { "getVersionInfo" },
|
||||
logParameters = { "" },
|
||||
).getOrElse {
|
||||
throw when (it) {
|
||||
is HttpException, is SerializationException -> NetworkError.NotMealie(it)
|
||||
@@ -101,5 +101,12 @@ class MealieDataSourceV1Impl @Inject constructor(
|
||||
logMethod = { "createApiToken" },
|
||||
logParameters = { "request = $request" }
|
||||
)
|
||||
|
||||
override suspend fun requestUserInfo(): GetUserInfoResponseV1 {
|
||||
return networkRequestWrapper.makeCallAndHandleUnauthorized(
|
||||
block = { service.getUserSelfInfo() },
|
||||
logMethod = { "requestUserInfo" },
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -46,4 +46,7 @@ interface MealieServiceV1 {
|
||||
suspend fun createApiToken(
|
||||
@Body request: CreateApiTokenRequestV1,
|
||||
): CreateApiTokenResponseV1
|
||||
|
||||
@GET("/api/users/self")
|
||||
suspend fun getUserSelfInfo(): GetUserInfoResponseV1
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
package gq.kirmanak.mealient.datasource.v1.models
|
||||
|
||||
import kotlinx.serialization.SerialName
|
||||
import kotlinx.serialization.Serializable
|
||||
|
||||
@Serializable
|
||||
data class GetUserInfoResponseV1(
|
||||
@SerialName("favoriteRecipes") val favoriteRecipes: List<String> = emptyList(),
|
||||
)
|
||||
Reference in New Issue
Block a user