aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/dev/submelon/view/PantryItemResource.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/dev/submelon/view/PantryItemResource.java')
-rw-r--r--src/main/java/dev/submelon/view/PantryItemResource.java46
1 files changed, 46 insertions, 0 deletions
diff --git a/src/main/java/dev/submelon/view/PantryItemResource.java b/src/main/java/dev/submelon/view/PantryItemResource.java
new file mode 100644
index 0000000..677fd26
--- /dev/null
+++ b/src/main/java/dev/submelon/view/PantryItemResource.java
@@ -0,0 +1,46 @@
+package dev.submelon.view;
+
+import java.util.List;
+
+import org.bson.types.ObjectId;
+import org.eclipse.microprofile.graphql.Description;
+import org.eclipse.microprofile.graphql.GraphQLApi;
+import org.eclipse.microprofile.graphql.Mutation;
+import org.eclipse.microprofile.graphql.Name;
+import org.eclipse.microprofile.graphql.Query;
+
+import dev.submelon.exceptions.ItemNotFoundException;
+import dev.submelon.model.PantryItem;
+import io.smallrye.mutiny.Uni;
+
+@GraphQLApi
+public class PantryItemResource {
+
+ @Query("allItems")
+ @Description("Get all items stored in the pantry")
+ public Uni<List<PantryItem>> getItems() {
+ return PantryItem.findAll().list();
+ }
+
+ @Query
+ @Description("Get an item stored in the pantry")
+ public Uni<PantryItem> getItem(@Name("itemId") String id) {
+ ObjectId _id = new ObjectId(id);
+ return PantryItem.findById(_id);
+ }
+
+ @Mutation
+ @Description("Store an item in the pantry")
+ public Uni<PantryItem> storeItem(PantryItem item) {
+ return PantryItem.persist(item).replaceWith(item);
+ }
+
+ @Mutation
+ @Description("Remove an item from the pantry")
+ public Uni<Boolean> deleteItem(String id) {
+ ObjectId _id = new ObjectId(id);
+ return PantryItem.deleteById(_id)
+ .onFailure()
+ .transform(ItemNotFoundException::new);
+ }
+}