package be.swsb.fiazard.ordering.orderplacement;
import be.swsb.fiazard.common.Identifiable;
import be.swsb.fiazard.common.error.ErrorR;
import be.swsb.fiazard.eventstore.AggregateRepository;
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.POST;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
@Api(value = OrderingResource.ORDERING_BASE_URI, description = "Operations about orders")
@Path(OrderingResource.ORDERING_BASE_URI)
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
public class OrderingResource {
public static final String ORDERING_BASE_URI = "/ordering";
private OrderFactory orderFactory;
private AggregateRepository aggregateRepo;
public OrderingResource(OrderFactory orderFactory, AggregateRepository aggregateRepo) {
this.orderFactory = orderFactory;
this.aggregateRepo = aggregateRepo;
}
@POST
@Timed
@ApiResponses(value = {
@ApiResponse(code = 202, response = Identifiable.class, message = "Order placed"),
@ApiResponse(code = 403, response = ErrorR.class, message = "Error while placing order")
})
@Path("/placeorder")
public Response placeOrder(PlaceOrder placeOrder) {
Identifiable identifiable = Identifiable.randomId();
new PlaceOrderCommandHandler(orderFactory, aggregateRepo).handleCommand(new PlaceOrderCommand(placeOrder.getSandwich()));
return Response.ok(identifiable).build();
}
}