caio.co/de/cerberus

Add similar_ids to the model

Precomputed list of similar recipe ids for the generalized case.
Id
371b0b82b223d288c4c3f9844c5cd3cc06094e74
Author
Caio
Commit time
2019-04-20T15:32:49+02:00

Modified src/main/flatbuffers/recipe.fbs

old
previous version
new
current version

Modified src/test/java/co/caio/cerberus/Util.java

@@ -42,6 +42,7
.crawlUrl("https://recipes.recipes/1")
.addInstructions("there is nothing to do")
.addIngredients("item a", "item b")
+ .addSimilarRecipeIds(2, 3, 4, 5)
.build();
}

Modified src/main/java/co/caio/cerberus/db/FlatBufferSerializer.java

@@ -30,6 +30,10
recipe.getIngredients().stream().mapToInt(builder::createString).toArray();
var ingredientsVectorOffset = FlatRecipe.createIngredientsVector(builder, ingredientsOffsets);

+ var similarIdsVectorOffset =
+ FlatRecipe.createSimilarIdsVector(
+ builder, recipe.getSimilarRecipeIds().stream().mapToLong(Long::valueOf).toArray());
+
var rootTable =
FlatRecipe.createFlatRecipe(
builder,
@@ -45,7 +49,8
recipe.getCalories().orElse(NON_EXISTENT_OPTIONAL_INT),
(float) recipe.getFatContent().orElse(NON_EXISTENT_OPTIONAL_FLOAT),
(float) recipe.getProteinContent().orElse(NON_EXISTENT_OPTIONAL_FLOAT),
- (float) recipe.getCarbohydrateContent().orElse(NON_EXISTENT_OPTIONAL_FLOAT));
+ (float) recipe.getCarbohydrateContent().orElse(NON_EXISTENT_OPTIONAL_FLOAT),
+ similarIdsVectorOffset);

builder.finish(rootTable);
return builder.dataBuffer();

Modified src/main/java/co/caio/cerberus/db/RecipeMetadata.java

@@ -35,6 +35,8

OptionalDouble getCarbohydrateContent();

+ List<Long> getSimilarRecipeIds();
+
static RecipeMetadata fromRecipe(Recipe recipe) {
return new RecipeMetadataRecipeAdapter(recipe);
}

Modified src/main/java/co/caio/cerberus/db/RecipeMetadataFlatRecipeAdapter.java

@@ -9,6 +9,7
class RecipeMetadataFlatRecipeAdapter implements RecipeMetadata {

private final FlatRecipe recipe;
+ private static final List<Long> EMPTY_IDS = List.of();

RecipeMetadataFlatRecipeAdapter(FlatRecipe recipe) {
this.recipe = recipe;
@@ -88,5 +89,20
@Override
public OptionalDouble getCarbohydrateContent() {
return FlatBufferSerializer.INSTANCE.readOptionalDouble(recipe.carbohydrateContent());
+ }
+
+ @Override
+ public List<Long> getSimilarRecipeIds() {
+ var numSimilarIds = recipe.similarIdsLength();
+
+ if (numSimilarIds == 0) {
+ return EMPTY_IDS;
+ }
+
+ var similarIds = new ArrayList<Long>(numSimilarIds);
+ for (int i = 0; i < numSimilarIds; i++) {
+ similarIds.add(recipe.similarIds(i));
+ }
+ return similarIds;
}
}

Modified src/main/java/co/caio/cerberus/db/RecipeMetadataRecipeAdapter.java

@@ -81,4 +81,9
public OptionalDouble getCarbohydrateContent() {
return recipe.carbohydrateContent();
}
+
+ @Override
+ public List<Long> getSimilarRecipeIds() {
+ return recipe.similarRecipeIds();
+ }
}

Modified src/main/java/co/caio/cerberus/model/Recipe.java

@@ -43,6 +43,8

OptionalDouble proteinContent();

+ List<Long> similarRecipeIds();
+
@Value.Check
default void check() {
RecipePrecondition.check(this);

Modified src/test/java/co/caio/cerberus/db/RecipeMetadataFlatRecipeAdapterTest.java

@@ -34,5 +34,6
assertEquals(sample.fatContent(), copied.getFatContent());
assertEquals(sample.proteinContent(), copied.getProteinContent());
assertEquals(sample.carbohydrateContent(), copied.getCarbohydrateContent());
+ assertEquals(sample.similarRecipeIds(), copied.getSimilarRecipeIds());
}
}

Modified src/test/java/co/caio/cerberus/db/RecipeMetadataRecipeAdapterTest.java

@@ -28,5 +28,7
assertEquals(sample.fatContent(), proxied.getFatContent());
assertEquals(sample.proteinContent(), proxied.getProteinContent());
assertEquals(sample.carbohydrateContent(), proxied.getCarbohydrateContent());
+
+ assertEquals(sample.similarRecipeIds(), proxied.getSimilarRecipeIds());
}
}