package bo.gotthardt.rest; import bo.gotthardt.Persistable; import bo.gotthardt.jersey.parameters.ListFiltering; import com.codahale.metrics.annotation.Timed; import lombok.RequiredArgsConstructor; import javax.validation.Valid; import javax.ws.rs.*; import javax.ws.rs.core.Context; import javax.ws.rs.core.MediaType; import java.util.List; import java.util.UUID; /** * @author Bo Gotthardt */ @Produces(MediaType.APPLICATION_JSON) @RequiredArgsConstructor public class RestResource<P extends Persistable> { private final CrudService<P> service; @GET @Path("/{id}") @Timed public P one(@PathParam("id") UUID id) { return service.fetchById(id); } @GET public List<P> many(@Context ListFiltering filtering) { return service.fetchByFilter(filtering); } @POST @Consumes(MediaType.APPLICATION_JSON) public P create(@Valid P item) { return service.create(item); } @PUT @Path("/{id}") @Consumes(MediaType.APPLICATION_JSON) public P update(@PathParam("id") UUID id, @Valid P item) { return service.update(id, item); } @DELETE @Path("/{id}") public void delete(@PathParam("id") UUID id) { service.delete(id); } }