Split v1 creation to create/update

This commit is contained in:
Kirill Kamakin
2022-10-30 11:07:02 +01:00
parent 7ac0409cd5
commit 71d5900530
9 changed files with 57 additions and 21 deletions

View File

@@ -12,10 +12,7 @@ import gq.kirmanak.mealient.datasource.NetworkError
import gq.kirmanak.mealient.datasource.runCatchingExceptCancel import gq.kirmanak.mealient.datasource.runCatchingExceptCancel
import gq.kirmanak.mealient.datasource.v0.MealieDataSourceV0 import gq.kirmanak.mealient.datasource.v0.MealieDataSourceV0
import gq.kirmanak.mealient.datasource.v1.MealieDataSourceV1 import gq.kirmanak.mealient.datasource.v1.MealieDataSourceV1
import gq.kirmanak.mealient.extensions.toFullRecipeInfo import gq.kirmanak.mealient.extensions.*
import gq.kirmanak.mealient.extensions.toRecipeSummaryInfo
import gq.kirmanak.mealient.extensions.toV0Request
import gq.kirmanak.mealient.extensions.toV1Request
import javax.inject.Inject import javax.inject.Inject
import javax.inject.Singleton import javax.inject.Singleton
@@ -32,7 +29,10 @@ class MealieDataSourceWrapper @Inject constructor(
): String = makeCall { token, url, version -> ): String = makeCall { token, url, version ->
when (version) { when (version) {
ServerVersion.V0 -> v0Source.addRecipe(url, token, recipe.toV0Request()) ServerVersion.V0 -> v0Source.addRecipe(url, token, recipe.toV0Request())
ServerVersion.V1 -> v1Source.addRecipe(url, token, recipe.toV1Request()) ServerVersion.V1 -> {
val slug = v1Source.createRecipe(url, token, recipe.toV1CreateRequest())
v1Source.updateRecipe(url, token, slug, recipe.toV1UpdateRequest(slug))
}
} }
} }

View File

@@ -7,7 +7,7 @@ data class FullRecipeInfo(
val remoteId: String, val remoteId: String,
val name: String, val name: String,
val slug: String, val slug: String,
val image: String, val image: String?,
val description: String, val description: String,
val recipeCategories: List<String>, val recipeCategories: List<String>,
val tags: List<String>, val tags: List<String>,

View File

@@ -206,7 +206,12 @@ private fun AddRecipeInstructionInfo.toV0Instruction() = AddRecipeInstructionV0(
text = text, text = text,
) )
fun AddRecipeInfo.toV1Request() = AddRecipeRequestV1(
fun AddRecipeInfo.toV1CreateRequest() = CreateRecipeRequestV1(
name = name,
)
fun AddRecipeInfo.toV1UpdateRequest(slug: String) = UpdateRecipeRequestV1(
name = name, name = name,
description = description, description = description,
image = image, image = image,

View File

@@ -1,16 +1,20 @@
package gq.kirmanak.mealient.datasource.v1 package gq.kirmanak.mealient.datasource.v1
import gq.kirmanak.mealient.datasource.v1.models.AddRecipeRequestV1 import gq.kirmanak.mealient.datasource.v1.models.*
import gq.kirmanak.mealient.datasource.v1.models.GetRecipeResponseV1
import gq.kirmanak.mealient.datasource.v1.models.GetRecipeSummaryResponseV1
import gq.kirmanak.mealient.datasource.v1.models.VersionResponseV1
interface MealieDataSourceV1 { interface MealieDataSourceV1 {
suspend fun addRecipe( suspend fun createRecipe(
baseUrl: String, baseUrl: String,
token: String?, token: String?,
recipe: AddRecipeRequestV1, recipe: CreateRecipeRequestV1,
): String
suspend fun updateRecipe(
baseUrl: String,
token: String?,
slug: String,
recipe: UpdateRecipeRequestV1,
): String ): String
/** /**

View File

@@ -19,16 +19,27 @@ class MealieDataSourceV1Impl @Inject constructor(
private val json: Json, private val json: Json,
) : MealieDataSourceV1 { ) : MealieDataSourceV1 {
override suspend fun addRecipe( override suspend fun createRecipe(
baseUrl: String, baseUrl: String,
token: String?, token: String?,
recipe: AddRecipeRequestV1 recipe: CreateRecipeRequestV1
): String = networkRequestWrapper.makeCallAndHandleUnauthorized( ): String = networkRequestWrapper.makeCallAndHandleUnauthorized(
block = { service.addRecipe("$baseUrl/api/recipes/create", token, recipe) }, block = { service.createRecipe("$baseUrl/api/recipes", token, recipe) },
logMethod = { "addRecipe" }, logMethod = { "createRecipe" },
logParameters = { "baseUrl = $baseUrl, token = $token, recipe = $recipe" } logParameters = { "baseUrl = $baseUrl, token = $token, recipe = $recipe" }
) )
override suspend fun updateRecipe(
baseUrl: String,
token: String?,
slug: String,
recipe: UpdateRecipeRequestV1
): String = networkRequestWrapper.makeCallAndHandleUnauthorized(
block = { service.updateRecipe("$baseUrl/api/recipes/$slug", token, recipe) },
logMethod = { "addRecipe" },
logParameters = { "baseUrl = $baseUrl, token = $token, slug = $slug, recipe = $recipe" }
)
override suspend fun authenticate( override suspend fun authenticate(
baseUrl: String, baseUrl: String,
username: String, username: String,

View File

@@ -15,10 +15,17 @@ interface MealieServiceV1 {
): GetTokenResponseV1 ): GetTokenResponseV1
@POST @POST
suspend fun addRecipe( suspend fun createRecipe(
@Url url: String, @Url url: String,
@Header(AUTHORIZATION_HEADER_NAME) token: String?, @Header(AUTHORIZATION_HEADER_NAME) token: String?,
@Body addRecipeRequestV0: AddRecipeRequestV1, @Body addRecipeRequest: CreateRecipeRequestV1,
): String
@PUT
suspend fun updateRecipe(
@Url url: String,
@Header(AUTHORIZATION_HEADER_NAME) token: String?,
@Body addRecipeRequest: UpdateRecipeRequestV1,
): String ): String
@GET @GET

View File

@@ -0,0 +1,9 @@
package gq.kirmanak.mealient.datasource.v1.models
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable
@Serializable
data class CreateRecipeRequestV1(
@SerialName("name") val name: String,
)

View File

@@ -10,7 +10,7 @@ data class GetRecipeResponseV1(
@SerialName("id") val remoteId: String, @SerialName("id") val remoteId: String,
@SerialName("name") val name: String, @SerialName("name") val name: String,
@SerialName("slug") val slug: String, @SerialName("slug") val slug: String,
@SerialName("image") val image: String, @SerialName("image") val image: String? = null,
@SerialName("description") val description: String = "", @SerialName("description") val description: String = "",
@SerialName("recipeCategory") val recipeCategories: List<String>, @SerialName("recipeCategory") val recipeCategories: List<String>,
@SerialName("tags") val tags: List<String>, @SerialName("tags") val tags: List<String>,

View File

@@ -4,7 +4,7 @@ import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable import kotlinx.serialization.Serializable
@Serializable @Serializable
data class AddRecipeRequestV1( data class UpdateRecipeRequestV1(
@SerialName("name") val name: String = "", @SerialName("name") val name: String = "",
@SerialName("description") val description: String = "", @SerialName("description") val description: String = "",
@SerialName("image") val image: String = "", @SerialName("image") val image: String = "",