X-Git-Url: https://juplo.de/gitweb/?a=blobdiff_plain;f=provider%2Fsrc%2Fmain%2Fjava%2Fio%2Fpactflow%2Fexample%2Fsirenprovider%2Fcontrollers%2FOrderController.java;h=d08e4432f3239c01fb3fb714fb356d25c0ccdf35;hb=HEAD;hp=87f5e677b2543154cab1ff11717f1741525d6b61;hpb=d3a04cd969afdc761963b831f0846e81eaa5d89f;p=demos%2Fexample-siren diff --git a/provider/src/main/java/io/pactflow/example/sirenprovider/controllers/OrderController.java b/provider/src/main/java/io/pactflow/example/sirenprovider/controllers/OrderController.java index 87f5e67..d08e443 100644 --- a/provider/src/main/java/io/pactflow/example/sirenprovider/controllers/OrderController.java +++ b/provider/src/main/java/io/pactflow/example/sirenprovider/controllers/OrderController.java @@ -3,34 +3,69 @@ package io.pactflow.example.sirenprovider.controllers; import io.pactflow.example.sirenprovider.models.Order; import org.springframework.hateoas.CollectionModel; import org.springframework.hateoas.EntityModel; +import org.springframework.hateoas.Link; import org.springframework.hateoas.RepresentationModel; import org.springframework.hateoas.server.ExposesResourceFor; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.DeleteMapping; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import java.util.Random; + +import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.afford; import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.linkTo; import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.methodOn; @RestController @ExposesResourceFor(Order.class) +@RequestMapping(value = "/orders") public class OrderController { - @GetMapping("/orders") - public RepresentationModel orders() { - Order order = new Order(1234L); - EntityModel model = EntityModel.of(order); - model.add(linkTo(methodOn(OrderController.class).order(1234L)).withSelfRel()); + @GetMapping + public ResponseEntity> orders() { + Long id = Math.abs(new Random().nextLong()); + Order order = new Order(id); + Link selfLink = actions(order); + EntityModel model = EntityModel.of(order, selfLink); RepresentationModel orders = CollectionModel.of(model); - return orders; + orders.add(linkTo(methodOn(OrderController.class).orders()).withSelfRel()); + return ResponseEntity.ok(orders); + } + + @GetMapping(value = "/{id}") + public ResponseEntity> order(@PathVariable(value = "id", required = true) Long id) { + Order order = new Order(id); + Link selfLink = actions(order); + EntityModel model = EntityModel.of(order, selfLink); + return ResponseEntity.ok(model); } - @GetMapping("/orders/{id}") - public EntityModel order(@PathVariable(value = "id", required = true) Long id) { + @PutMapping("/{id}") + public EntityModel update(@PathVariable(value = "id", required = true) Long id, Order order) { + Link selfLink = actions(order); + return EntityModel.of(order, selfLink); + } + + private Link actions(Order order) { + return linkTo(methodOn(OrderController.class).order(order.getId())).withSelfRel() + .andAffordance(afford(methodOn(OrderController.class).update(order.getId(), null))) + .andAffordance(afford(methodOn(OrderController.class).delete(order.getId()))) + .andAffordance(afford(methodOn(OrderController.class).changeStatus(order.getId(), null))); + } + + @PutMapping("/{id}/status") + public EntityModel changeStatus(@PathVariable(value = "id", required = true) Long id, String status) { Order order = new Order(id); - EntityModel model = EntityModel.of(order); - model.add(linkTo(methodOn(OrderController.class).order(id)).withSelfRel()); - return model; + Link selfLink = actions(order); + return EntityModel.of(order, selfLink); } + @DeleteMapping("/{id}") + public ResponseEntity delete(@PathVariable(value = "id", required = true) Long id) { + return ResponseEntity.ok().build(); + } }