diff options
Diffstat (limited to 'src/main/java/dev/submelon/rest/json')
| -rw-r--r-- | src/main/java/dev/submelon/rest/json/PantryItem.java | 29 | ||||
| -rw-r--r-- | src/main/java/dev/submelon/rest/json/PantryItemResource.java | 59 |
2 files changed, 88 insertions, 0 deletions
diff --git a/src/main/java/dev/submelon/rest/json/PantryItem.java b/src/main/java/dev/submelon/rest/json/PantryItem.java new file mode 100644 index 0000000..d476e3c --- /dev/null +++ b/src/main/java/dev/submelon/rest/json/PantryItem.java @@ -0,0 +1,29 @@ +package dev.submelon.rest.json; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.Table; + +import io.quarkus.hibernate.orm.panache.PanacheEntity; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@Entity +@Table(name = "pantryitem") +@Data +@EqualsAndHashCode(callSuper = false) +public class PantryItem extends PanacheEntity { + + @Column(nullable = false) + private String name; + + @Column + private String description; + + @Column(nullable = false) + private double quantity; + + @Column(nullable = false) + private String quantityUnitType; + +} diff --git a/src/main/java/dev/submelon/rest/json/PantryItemResource.java b/src/main/java/dev/submelon/rest/json/PantryItemResource.java new file mode 100644 index 0000000..4bb51c0 --- /dev/null +++ b/src/main/java/dev/submelon/rest/json/PantryItemResource.java @@ -0,0 +1,59 @@ +package dev.submelon.rest.json; + +import java.util.List; + +import javax.transaction.Transactional; +import javax.ws.rs.DELETE; +import javax.ws.rs.GET; +import javax.ws.rs.POST; +import javax.ws.rs.PUT; +import javax.ws.rs.Path; +import javax.ws.rs.PathParam; +import javax.ws.rs.Produces; +import javax.ws.rs.WebApplicationException; +import javax.ws.rs.core.MediaType; +import javax.ws.rs.core.Response; + +@Path("/items") +public class PantryItemResource { + + @GET + @Produces(MediaType.APPLICATION_JSON) + public List<PantryItem> getItems() { + return PantryItem.findAll().list(); + } + + @Transactional + @POST + @Produces(MediaType.APPLICATION_JSON) + public PantryItem postItem(PantryItem item) { + PantryItem.persist(item); + + return item; + } + + @Transactional + @PUT + @Path("/{id}") + @Produces(MediaType.APPLICATION_JSON) + public PantryItem putItem(@PathParam("id") Long id, PantryItem item) { + if (item.id.equals(id)) { + PantryItem.persist(item); + } else { + throw new WebApplicationException(Response.status(400).entity("ID does not match body").build()); + } + + return item; + } + + @Transactional + @DELETE + @Path("/{id}") + public void deleteItem(@PathParam("id") Long id) { + boolean result = PantryItem.deleteById(id); + + if (!result) { + throw new WebApplicationException(Response.status(404).entity("Could not find item").build()); + } + } +} |
