diff --git a/src/main/java/nouritsu/types/Section.java b/src/main/java/nouritsu/types/Section.java index 16c0c46..65002e7 100644 --- a/src/main/java/nouritsu/types/Section.java +++ b/src/main/java/nouritsu/types/Section.java @@ -10,12 +10,20 @@ public enum Section { PASTA, RICE, MEAT, + FISH, DAIRY, - HYGIENE; + HYGIENE, + BEVERAGES; public static Either tryParse(String catName) { return Stream.of(Section.values()) .find(c -> c.name().equalsIgnoreCase(catName)) .toEither("Category ā€œ%sā€ not found".formatted(catName)); } + + public static String valuesAsString() { + return Stream.of(Section.values()) + .map(Section::name) + .mkString("\nValid values are: ", ", ", ""); + } } diff --git a/src/main/java/nouritsu/types/ShoppingItem.java b/src/main/java/nouritsu/types/ShoppingItem.java index 23678d0..e5a82c9 100644 --- a/src/main/java/nouritsu/types/ShoppingItem.java +++ b/src/main/java/nouritsu/types/ShoppingItem.java @@ -4,6 +4,8 @@ import io.vavr.control.Either; public record ShoppingItem(String name, Section section) { public static Either tryParse(String name, String category) { - return Section.tryParse(category).map(c -> new ShoppingItem(name, c)); + return Section.tryParse(category) + .map(c -> new ShoppingItem(name, c)) + .mapLeft(msg -> Resp.BAD_REQUEST.apply(msg + Section.valuesAsString())); } } diff --git a/src/main/java/nouritsu/types/Store.java b/src/main/java/nouritsu/types/Store.java index c0f23a2..aad4af0 100644 --- a/src/main/java/nouritsu/types/Store.java +++ b/src/main/java/nouritsu/types/Store.java @@ -10,7 +10,7 @@ import io.vavr.control.Either; public record Store(String name, Seq
sections) { public static Either tryParse(String name, String sections) { return Either.traverse(List.of(sections.split(",")), Section::tryParse) - .mapLeft(errors -> Resp.BAD_REQUEST.apply(errors.mkString("\n"))) + .mapLeft(errors -> Resp.BAD_REQUEST.apply(errors.mkString("\n") + Section.valuesAsString())) .map(secs -> new Store(name, secs)); } }