diff --git a/src/main/java/de/schulung/quarkus/recipes/DifficultyConverter.java b/src/main/java/de/schulung/quarkus/recipes/DifficultyConverter.java new file mode 100644 index 0000000..0307b34 --- /dev/null +++ b/src/main/java/de/schulung/quarkus/recipes/DifficultyConverter.java @@ -0,0 +1,33 @@ +package de.schulung.quarkus.recipes; + +import jakarta.persistence.AttributeConverter; +import jakarta.persistence.Converter; + +@Converter(autoApply = true) +public class DifficultyConverter implements AttributeConverter { + + @Override + public String convertToDatabaseColumn(Difficulty attribute) { + if (attribute == null) { + return null; + } + return switch (attribute) { + case easy -> "easy"; + case medium -> "medium"; + case hard -> "hard"; + }; + } + + @Override + public Difficulty convertToEntityAttribute(String dbData) { + if (dbData == null) { + return null; + } + return switch (dbData) { + case "easy" -> Difficulty.easy; + case "medium" -> Difficulty.medium; + case "hard" -> Difficulty.hard; + default -> throw new IllegalArgumentException("Unknown difficulty: " + dbData); + }; + } +} diff --git a/src/main/java/de/schulung/quarkus/recipes/Ingredient.java b/src/main/java/de/schulung/quarkus/recipes/Ingredient.java index 4ddc77e..bc79e97 100644 --- a/src/main/java/de/schulung/quarkus/recipes/Ingredient.java +++ b/src/main/java/de/schulung/quarkus/recipes/Ingredient.java @@ -36,7 +36,6 @@ public class Ingredient { * The unit of the ingredient. */ @NotNull - @Enumerated(EnumType.STRING) private IngredientUnit unit; } diff --git a/src/main/java/de/schulung/quarkus/recipes/IngredientUnitConverter.java b/src/main/java/de/schulung/quarkus/recipes/IngredientUnitConverter.java new file mode 100644 index 0000000..aba3957 --- /dev/null +++ b/src/main/java/de/schulung/quarkus/recipes/IngredientUnitConverter.java @@ -0,0 +1,61 @@ +package de.schulung.quarkus.recipes; + +import jakarta.persistence.AttributeConverter; +import jakarta.persistence.Converter; + +@Converter(autoApply = true) +public class IngredientUnitConverter implements AttributeConverter { + + @Override + public String convertToDatabaseColumn(IngredientUnit attribute) { + if (attribute == null) { + return null; + } + return switch (attribute) { + case pieces -> "pieces"; + case grams -> "grams"; + case kilograms -> "kilograms"; + case milliliters -> "milliliters"; + case liters -> "liters"; + case teaspoons -> "teaspoons"; + case tablespoons -> "tablespoons"; + case cups -> "cups"; + case cloves -> "cloves"; + case pinches -> "pinches"; + case packages -> "packages"; + case cans -> "cans"; + case bottles -> "bottles"; + case slices -> "slices"; + case sprigs -> "sprigs"; + case stalks -> "stalks"; + case cubes -> "cubes"; + }; + } + + @Override + public IngredientUnit convertToEntityAttribute(String dbData) { + if (dbData == null) { + return null; + } + return switch (dbData) { + case "pieces" -> IngredientUnit.pieces; + case "grams" -> IngredientUnit.grams; + case "kilograms" -> IngredientUnit.kilograms; + case "milliliters" -> IngredientUnit.milliliters; + case "liters" -> IngredientUnit.liters; + case "teaspoons" -> IngredientUnit.teaspoons; + case "tablespoons" -> IngredientUnit.tablespoons; + case "cups" -> IngredientUnit.cups; + case "cloves" -> IngredientUnit.cloves; + case "pinches" -> IngredientUnit.pinches; + case "packages" -> IngredientUnit.packages; + case "cans" -> IngredientUnit.cans; + case "bottles" -> IngredientUnit.bottles; + case "slices" -> IngredientUnit.slices; + case "sprigs" -> IngredientUnit.sprigs; + case "stalks" -> IngredientUnit.stalks; + case "cubes" -> IngredientUnit.cubes; + default -> throw new IllegalArgumentException("Unknown ingredient unit: " + dbData); + }; + } +} diff --git a/src/main/java/de/schulung/quarkus/recipes/Recipe.java b/src/main/java/de/schulung/quarkus/recipes/Recipe.java index 0fe5c74..31aab7b 100644 --- a/src/main/java/de/schulung/quarkus/recipes/Recipe.java +++ b/src/main/java/de/schulung/quarkus/recipes/Recipe.java @@ -54,14 +54,13 @@ public class Recipe { /** * Difficulty level of the recipe. */ - @Enumerated(EnumType.STRING) private Difficulty difficulty; /** * List of ingredients. */ @NotNull @Size(max = 100) - @OneToMany(cascade = CascadeType.ALL, orphanRemoval = true) + @OneToMany(cascade = CascadeType.ALL, orphanRemoval = true, fetch = FetchType.EAGER) @JoinColumn(name = "recipe_id") private List<@Valid @NotNull Ingredient> ingredients; /**