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
Modified src/test/java/co/caio/cerberus/Util.java
.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
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,
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
OptionalDouble getCarbohydrateContent();
+ List<Long> getSimilarRecipeIds();
+
static RecipeMetadata fromRecipe(Recipe recipe) {
return new RecipeMetadataRecipeAdapter(recipe);
}
Modified src/main/java/co/caio/cerberus/db/RecipeMetadataFlatRecipeAdapter.java
class RecipeMetadataFlatRecipeAdapter implements RecipeMetadata {
private final FlatRecipe recipe;
+ private static final List<Long> EMPTY_IDS = List.of();
RecipeMetadataFlatRecipeAdapter(FlatRecipe recipe) {
this.recipe = recipe;
@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
public OptionalDouble getCarbohydrateContent() {
return recipe.carbohydrateContent();
}
+
+ @Override
+ public List<Long> getSimilarRecipeIds() {
+ return recipe.similarRecipeIds();
+ }
}
Modified src/main/java/co/caio/cerberus/model/Recipe.java
OptionalDouble proteinContent();
+ List<Long> similarRecipeIds();
+
@Value.Check
default void check() {
RecipePrecondition.check(this);
Modified src/test/java/co/caio/cerberus/db/RecipeMetadataFlatRecipeAdapterTest.java
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
assertEquals(sample.fatContent(), proxied.getFatContent());
assertEquals(sample.proteinContent(), proxied.getProteinContent());
assertEquals(sample.carbohydrateContent(), proxied.getCarbohydrateContent());
+
+ assertEquals(sample.similarRecipeIds(), proxied.getSimilarRecipeIds());
}
}