package be.swsb.fiazard.ordering.topping; import javax.ws.rs.*; import be.swsb.fiazard.common.error.ErrorR; import com.codahale.metrics.annotation.Timed; import com.wordnik.swagger.annotations.Api; import com.wordnik.swagger.annotations.ApiResponse; import com.wordnik.swagger.annotations.ApiResponses; import javax.ws.rs.Consumes; import javax.ws.rs.GET; import javax.ws.rs.Path; import javax.ws.rs.Produces; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; import be.swsb.fiazard.common.error.ErrorR; import be.swsb.fiazard.common.eventsourcing.EventStore; import com.codahale.metrics.annotation.Timed; import com.wordnik.swagger.annotations.Api; import com.wordnik.swagger.annotations.ApiResponse; import com.wordnik.swagger.annotations.ApiResponses; @Api(value = ToppingResource.TOPPINGS_BASE_URI, description = "Operations about Toppings") @Path(ToppingResource.TOPPINGS_BASE_URI) @Produces(MediaType.APPLICATION_JSON) @Consumes(MediaType.APPLICATION_JSON) public class ToppingResource { public static final String TOPPINGS_BASE_URI = "/ordering/topping"; private ToppingDAO dao; private EventStore eventStore; public ToppingResource(ToppingDAO dao, EventStore eventStore) { this.dao = dao; this.eventStore = eventStore; } @GET @Timed @ApiResponses(value = { @ApiResponse(code = 200, response = Topping[].class, message = ""), @ApiResponse(code = 403, response = ErrorR.class, message = "Unauthorized") }) public Response getAll() { return Response.ok(dao.findAll(), MediaType.APPLICATION_JSON_TYPE).build(); } @POST @Path("/lock") @Timed @ApiResponses(value = { @ApiResponse(code = 200, response = Void.class, message = ""), @ApiResponse(code = 403, response = ErrorR.class, message = "Unauthorized") }) public Response lock(Topping topping) { eventStore.store(new ToppingLockedEvent(topping)); return Response.ok().build(); } @POST @Path("/unlock") @Timed @ApiResponses(value = { @ApiResponse(code = 200, response = Void.class, message = ""), @ApiResponse(code = 403, response = ErrorR.class, message = "Unauthorized") }) public Response unlock(Topping topping) { eventStore.store(new ToppingUnlockedEvent(topping)); return Response.ok().build(); } @POST @Path("/exclude") @Timed @ApiResponses(value = { @ApiResponse(code = 200, response = Void.class, message = ""), @ApiResponse(code = 403, response = ErrorR.class, message = "Unauthorized") }) public Response exclude(Topping topping) { eventStore.store(new ToppingExcludeEvent(topping)); return Response.ok().build(); } }