From 9b605614950952f01054ba6c28439899ff8987fd Mon Sep 17 00:00:00 2001 From: John Thompson Date: Sun, 21 Apr 2019 15:26:48 -0400 Subject: [PATCH 01/19] completing customer assignment --- .../msscbrewery/services/CustomerService.java | 12 +++++++ .../services/CustomerServiceImpl.java | 20 +++++++++++ .../web/controller/CustomerController.java | 33 +++++++++++++++++++ .../msscbrewery/web/model/CustomerDto.java | 21 ++++++++++++ 4 files changed, 86 insertions(+) create mode 100644 src/main/java/guru/springframework/msscbrewery/services/CustomerService.java create mode 100644 src/main/java/guru/springframework/msscbrewery/services/CustomerServiceImpl.java create mode 100644 src/main/java/guru/springframework/msscbrewery/web/controller/CustomerController.java create mode 100644 src/main/java/guru/springframework/msscbrewery/web/model/CustomerDto.java diff --git a/src/main/java/guru/springframework/msscbrewery/services/CustomerService.java b/src/main/java/guru/springframework/msscbrewery/services/CustomerService.java new file mode 100644 index 00000000..abed2896 --- /dev/null +++ b/src/main/java/guru/springframework/msscbrewery/services/CustomerService.java @@ -0,0 +1,12 @@ +package guru.springframework.msscbrewery.services; + +import guru.springframework.msscbrewery.web.model.CustomerDto; + +import java.util.UUID; + +/** + * Created by jt on 2019-04-21. + */ +public interface CustomerService { + CustomerDto getCustomerById(UUID customerId); +} diff --git a/src/main/java/guru/springframework/msscbrewery/services/CustomerServiceImpl.java b/src/main/java/guru/springframework/msscbrewery/services/CustomerServiceImpl.java new file mode 100644 index 00000000..a82f5357 --- /dev/null +++ b/src/main/java/guru/springframework/msscbrewery/services/CustomerServiceImpl.java @@ -0,0 +1,20 @@ +package guru.springframework.msscbrewery.services; + +import guru.springframework.msscbrewery.web.model.CustomerDto; +import org.springframework.stereotype.Service; + +import java.util.UUID; + +/** + * Created by jt on 2019-04-21. + */ +@Service +public class CustomerServiceImpl implements CustomerService { + @Override + public CustomerDto getCustomerById(UUID customerId) { + return CustomerDto.builder() + .id(UUID.randomUUID()) + .name("Joe Buck") + .build(); + } +} diff --git a/src/main/java/guru/springframework/msscbrewery/web/controller/CustomerController.java b/src/main/java/guru/springframework/msscbrewery/web/controller/CustomerController.java new file mode 100644 index 00000000..9ffdf164 --- /dev/null +++ b/src/main/java/guru/springframework/msscbrewery/web/controller/CustomerController.java @@ -0,0 +1,33 @@ +package guru.springframework.msscbrewery.web.controller; + +import guru.springframework.msscbrewery.services.CustomerService; +import guru.springframework.msscbrewery.web.model.CustomerDto; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.UUID; + +/** + * Created by jt on 2019-04-21. + */ + +@RequestMapping("api/v1/customer") +@RestController +public class CustomerController { + + private CustomerService customerService; + + public CustomerController(CustomerService customerService) { + this.customerService = customerService; + } + + @GetMapping("/{customerId}") + public ResponseEntity getCustomer(@PathVariable("customerId") UUID customerId){ + + return new ResponseEntity<>(customerService.getCustomerById(customerId), HttpStatus.OK); + } +} diff --git a/src/main/java/guru/springframework/msscbrewery/web/model/CustomerDto.java b/src/main/java/guru/springframework/msscbrewery/web/model/CustomerDto.java new file mode 100644 index 00000000..df075f38 --- /dev/null +++ b/src/main/java/guru/springframework/msscbrewery/web/model/CustomerDto.java @@ -0,0 +1,21 @@ +package guru.springframework.msscbrewery.web.model; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.UUID; + +/** + * Created by jt on 2019-04-21. + */ +@Data +@NoArgsConstructor +@AllArgsConstructor +@Builder +public class CustomerDto { + + private UUID id; + private String name; +} From de27f8ba743e2abff2f73bfe843b0f51e7833c4c Mon Sep 17 00:00:00 2001 From: John Thompson Date: Sun, 21 Apr 2019 15:56:24 -0400 Subject: [PATCH 02/19] adding post example --- .../msscbrewery/services/BeerService.java | 2 ++ .../msscbrewery/services/BeerServiceImpl.java | 7 +++++++ .../web/controller/BeerController.java | 18 ++++++++++++++---- 3 files changed, 23 insertions(+), 4 deletions(-) diff --git a/src/main/java/guru/springframework/msscbrewery/services/BeerService.java b/src/main/java/guru/springframework/msscbrewery/services/BeerService.java index c24ff2bf..e7dc4fe1 100644 --- a/src/main/java/guru/springframework/msscbrewery/services/BeerService.java +++ b/src/main/java/guru/springframework/msscbrewery/services/BeerService.java @@ -9,4 +9,6 @@ */ public interface BeerService { BeerDto getBeerById(UUID beerId); + + BeerDto saveNewBeer(BeerDto beerDto); } diff --git a/src/main/java/guru/springframework/msscbrewery/services/BeerServiceImpl.java b/src/main/java/guru/springframework/msscbrewery/services/BeerServiceImpl.java index 1b6505f0..7fcadb93 100644 --- a/src/main/java/guru/springframework/msscbrewery/services/BeerServiceImpl.java +++ b/src/main/java/guru/springframework/msscbrewery/services/BeerServiceImpl.java @@ -17,4 +17,11 @@ public BeerDto getBeerById(UUID beerId) { .beerStyle("Pale Ale") .build(); } + + @Override + public BeerDto saveNewBeer(BeerDto beerDto) { + return BeerDto.builder() + .id(UUID.randomUUID()) + .build(); + } } diff --git a/src/main/java/guru/springframework/msscbrewery/web/controller/BeerController.java b/src/main/java/guru/springframework/msscbrewery/web/controller/BeerController.java index 49670652..dfeaefd3 100644 --- a/src/main/java/guru/springframework/msscbrewery/web/controller/BeerController.java +++ b/src/main/java/guru/springframework/msscbrewery/web/controller/BeerController.java @@ -2,12 +2,10 @@ import guru.springframework.msscbrewery.services.BeerService; import guru.springframework.msscbrewery.web.model.BeerDto; +import org.springframework.http.HttpHeaders; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; import java.util.UUID; @@ -30,4 +28,16 @@ public ResponseEntity getBeer(@PathVariable("beerId") UUID beerId){ return new ResponseEntity<>(beerService.getBeerById(beerId), HttpStatus.OK); } + @PostMapping // POST - create new beer + public ResponseEntity handlePost(BeerDto beerDto){ + + BeerDto savedDto = beerService.saveNewBeer(beerDto); + + HttpHeaders headers = new HttpHeaders(); + //todo add hostname to url + headers.add("Location", "/api/v1/beer/" + savedDto.getId().toString()); + + return new ResponseEntity(headers, HttpStatus.CREATED); + } + } From 802ddcf011704581b1c2ceb40570b62fbcd4dacb Mon Sep 17 00:00:00 2001 From: John Thompson Date: Sun, 21 Apr 2019 16:32:38 -0400 Subject: [PATCH 03/19] adding put example --- .../springframework/msscbrewery/services/BeerService.java | 2 ++ .../msscbrewery/services/BeerServiceImpl.java | 5 +++++ .../msscbrewery/web/controller/BeerController.java | 8 ++++++++ 3 files changed, 15 insertions(+) diff --git a/src/main/java/guru/springframework/msscbrewery/services/BeerService.java b/src/main/java/guru/springframework/msscbrewery/services/BeerService.java index e7dc4fe1..129b027a 100644 --- a/src/main/java/guru/springframework/msscbrewery/services/BeerService.java +++ b/src/main/java/guru/springframework/msscbrewery/services/BeerService.java @@ -11,4 +11,6 @@ public interface BeerService { BeerDto getBeerById(UUID beerId); BeerDto saveNewBeer(BeerDto beerDto); + + void updateBeer(UUID beerId, BeerDto beerDto); } diff --git a/src/main/java/guru/springframework/msscbrewery/services/BeerServiceImpl.java b/src/main/java/guru/springframework/msscbrewery/services/BeerServiceImpl.java index 7fcadb93..91fd0d0e 100644 --- a/src/main/java/guru/springframework/msscbrewery/services/BeerServiceImpl.java +++ b/src/main/java/guru/springframework/msscbrewery/services/BeerServiceImpl.java @@ -24,4 +24,9 @@ public BeerDto saveNewBeer(BeerDto beerDto) { .id(UUID.randomUUID()) .build(); } + + @Override + public void updateBeer(UUID beerId, BeerDto beerDto) { + //todo impl - would add a real impl to update beer + } } diff --git a/src/main/java/guru/springframework/msscbrewery/web/controller/BeerController.java b/src/main/java/guru/springframework/msscbrewery/web/controller/BeerController.java index dfeaefd3..8595f5ba 100644 --- a/src/main/java/guru/springframework/msscbrewery/web/controller/BeerController.java +++ b/src/main/java/guru/springframework/msscbrewery/web/controller/BeerController.java @@ -40,4 +40,12 @@ public ResponseEntity handlePost(BeerDto beerDto){ return new ResponseEntity(headers, HttpStatus.CREATED); } + @PutMapping({"/{beerId}"}) + public ResponseEntity handleUpdate(@PathVariable("beerId") UUID beerId, BeerDto beerDto){ + + beerService.updateBeer(beerId, beerDto); + + return new ResponseEntity(HttpStatus.NO_CONTENT); + } + } From dce38e6172744b5002c0eb94cf2aaa21cefeabe7 Mon Sep 17 00:00:00 2001 From: John Thompson Date: Tue, 23 Apr 2019 15:25:28 -0400 Subject: [PATCH 04/19] adding delete example --- .../springframework/msscbrewery/services/BeerService.java | 2 ++ .../msscbrewery/services/BeerServiceImpl.java | 7 +++++++ .../msscbrewery/web/controller/BeerController.java | 6 ++++++ 3 files changed, 15 insertions(+) diff --git a/src/main/java/guru/springframework/msscbrewery/services/BeerService.java b/src/main/java/guru/springframework/msscbrewery/services/BeerService.java index 129b027a..ea830e94 100644 --- a/src/main/java/guru/springframework/msscbrewery/services/BeerService.java +++ b/src/main/java/guru/springframework/msscbrewery/services/BeerService.java @@ -13,4 +13,6 @@ public interface BeerService { BeerDto saveNewBeer(BeerDto beerDto); void updateBeer(UUID beerId, BeerDto beerDto); + + void deleteById(UUID beerId); } diff --git a/src/main/java/guru/springframework/msscbrewery/services/BeerServiceImpl.java b/src/main/java/guru/springframework/msscbrewery/services/BeerServiceImpl.java index 91fd0d0e..15856c77 100644 --- a/src/main/java/guru/springframework/msscbrewery/services/BeerServiceImpl.java +++ b/src/main/java/guru/springframework/msscbrewery/services/BeerServiceImpl.java @@ -1,6 +1,7 @@ package guru.springframework.msscbrewery.services; import guru.springframework.msscbrewery.web.model.BeerDto; +import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import java.util.UUID; @@ -8,6 +9,7 @@ /** * Created by jt on 2019-04-20. */ +@Slf4j @Service public class BeerServiceImpl implements BeerService { @Override @@ -29,4 +31,9 @@ public BeerDto saveNewBeer(BeerDto beerDto) { public void updateBeer(UUID beerId, BeerDto beerDto) { //todo impl - would add a real impl to update beer } + + @Override + public void deleteById(UUID beerId) { + log.debug("Deleting a beer..."); + } } diff --git a/src/main/java/guru/springframework/msscbrewery/web/controller/BeerController.java b/src/main/java/guru/springframework/msscbrewery/web/controller/BeerController.java index 8595f5ba..fb1e6e34 100644 --- a/src/main/java/guru/springframework/msscbrewery/web/controller/BeerController.java +++ b/src/main/java/guru/springframework/msscbrewery/web/controller/BeerController.java @@ -48,4 +48,10 @@ public ResponseEntity handleUpdate(@PathVariable("beerId") UUID beerId, BeerDto return new ResponseEntity(HttpStatus.NO_CONTENT); } + @DeleteMapping({"/{beerId}"}) + @ResponseStatus(HttpStatus.NO_CONTENT) + public void deleteBeer(@PathVariable("beerId") UUID beerId){ + beerService.deleteById(beerId); + } + } From 36804b7b1540a541192875058e1c439ba5b9f79f Mon Sep 17 00:00:00 2001 From: John Thompson Date: Tue, 23 Apr 2019 17:32:50 -0400 Subject: [PATCH 05/19] completing coding assignment --- .../msscbrewery/services/CustomerService.java | 6 +++++ .../services/CustomerServiceImpl.java | 20 ++++++++++++++ .../web/controller/CustomerController.java | 27 ++++++++++++++++--- 3 files changed, 49 insertions(+), 4 deletions(-) diff --git a/src/main/java/guru/springframework/msscbrewery/services/CustomerService.java b/src/main/java/guru/springframework/msscbrewery/services/CustomerService.java index abed2896..6c2f9416 100644 --- a/src/main/java/guru/springframework/msscbrewery/services/CustomerService.java +++ b/src/main/java/guru/springframework/msscbrewery/services/CustomerService.java @@ -9,4 +9,10 @@ */ public interface CustomerService { CustomerDto getCustomerById(UUID customerId); + + CustomerDto saveNewCustomer(CustomerDto customerDto); + + void updateCustomer(UUID customerId, CustomerDto customerDto); + + void deleteById(UUID customerId); } diff --git a/src/main/java/guru/springframework/msscbrewery/services/CustomerServiceImpl.java b/src/main/java/guru/springframework/msscbrewery/services/CustomerServiceImpl.java index a82f5357..7362b553 100644 --- a/src/main/java/guru/springframework/msscbrewery/services/CustomerServiceImpl.java +++ b/src/main/java/guru/springframework/msscbrewery/services/CustomerServiceImpl.java @@ -1,6 +1,7 @@ package guru.springframework.msscbrewery.services; import guru.springframework.msscbrewery.web.model.CustomerDto; +import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import java.util.UUID; @@ -8,6 +9,7 @@ /** * Created by jt on 2019-04-21. */ +@Slf4j @Service public class CustomerServiceImpl implements CustomerService { @Override @@ -17,4 +19,22 @@ public CustomerDto getCustomerById(UUID customerId) { .name("Joe Buck") .build(); } + + @Override + public CustomerDto saveNewCustomer(CustomerDto customerDto) { + return CustomerDto.builder() + .id(UUID.randomUUID()) + .build(); + } + + @Override + public void updateCustomer(UUID customerId, CustomerDto customerDto) { + //todo impl + log.debug("Updating...."); + } + + @Override + public void deleteById(UUID customerId) { + log.debug("Deleting.... "); + } } diff --git a/src/main/java/guru/springframework/msscbrewery/web/controller/CustomerController.java b/src/main/java/guru/springframework/msscbrewery/web/controller/CustomerController.java index 9ffdf164..24704dba 100644 --- a/src/main/java/guru/springframework/msscbrewery/web/controller/CustomerController.java +++ b/src/main/java/guru/springframework/msscbrewery/web/controller/CustomerController.java @@ -2,12 +2,10 @@ import guru.springframework.msscbrewery.services.CustomerService; import guru.springframework.msscbrewery.web.model.CustomerDto; +import org.springframework.http.HttpHeaders; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; import java.util.UUID; @@ -30,4 +28,25 @@ public ResponseEntity getCustomer(@PathVariable("customerId") UUID return new ResponseEntity<>(customerService.getCustomerById(customerId), HttpStatus.OK); } + + @PostMapping + public ResponseEntity handlePost(CustomerDto customerDto){ + CustomerDto savedDto = customerService.saveNewCustomer(customerDto); + + HttpHeaders httpHeaders = new HttpHeaders(); + httpHeaders.add("Location", "/api/v1/customer/" + savedDto.getId().toString()); + + return new ResponseEntity(httpHeaders, HttpStatus.CREATED); + } + + @PutMapping("/{customerId}") + @ResponseStatus(HttpStatus.NO_CONTENT) + public void handleUpdate(@PathVariable("customerId") UUID customerId, CustomerDto customerDto){ + customerService.updateCustomer(customerId, customerDto); + } + + @DeleteMapping("/{customerId}") + public void deleteById(@PathVariable("customerId") UUID customerId){ + customerService.deleteById(customerId); + } } From 8a0498358c5580680d29df37329fc4f3bf273d93 Mon Sep 17 00:00:00 2001 From: John Thompson Date: Tue, 23 Apr 2019 18:08:55 -0400 Subject: [PATCH 06/19] adding v2 of beer controller --- .../services/v2/BeerServiceV2.java | 18 ++++++ .../services/v2/BeerServiceV2Impl.java | 32 +++++++++++ .../web/controller/BeerController.java | 1 + .../web/controller/v2/BeerControllerV2.java | 55 +++++++++++++++++++ .../msscbrewery/web/model/v2/BeerDtoV2.java | 22 ++++++++ .../web/model/v2/BeerStyleEnum.java | 9 +++ 6 files changed, 137 insertions(+) create mode 100644 src/main/java/guru/springframework/msscbrewery/services/v2/BeerServiceV2.java create mode 100644 src/main/java/guru/springframework/msscbrewery/services/v2/BeerServiceV2Impl.java create mode 100644 src/main/java/guru/springframework/msscbrewery/web/controller/v2/BeerControllerV2.java create mode 100644 src/main/java/guru/springframework/msscbrewery/web/model/v2/BeerDtoV2.java create mode 100644 src/main/java/guru/springframework/msscbrewery/web/model/v2/BeerStyleEnum.java diff --git a/src/main/java/guru/springframework/msscbrewery/services/v2/BeerServiceV2.java b/src/main/java/guru/springframework/msscbrewery/services/v2/BeerServiceV2.java new file mode 100644 index 00000000..0392a508 --- /dev/null +++ b/src/main/java/guru/springframework/msscbrewery/services/v2/BeerServiceV2.java @@ -0,0 +1,18 @@ +package guru.springframework.msscbrewery.services.v2; + +import guru.springframework.msscbrewery.web.model.v2.BeerDtoV2; + +import java.util.UUID; + +/** + * Created by jt on 2019-04-23. + */ +public interface BeerServiceV2 { + BeerDtoV2 getBeerById(UUID beerId); + + BeerDtoV2 saveNewBeer(BeerDtoV2 beerDto); + + void updateBeer(UUID beerId, BeerDtoV2 beerDto); + + void deleteById(UUID beerId); +} diff --git a/src/main/java/guru/springframework/msscbrewery/services/v2/BeerServiceV2Impl.java b/src/main/java/guru/springframework/msscbrewery/services/v2/BeerServiceV2Impl.java new file mode 100644 index 00000000..fad00604 --- /dev/null +++ b/src/main/java/guru/springframework/msscbrewery/services/v2/BeerServiceV2Impl.java @@ -0,0 +1,32 @@ +package guru.springframework.msscbrewery.services.v2; + +import guru.springframework.msscbrewery.web.model.v2.BeerDtoV2; +import org.springframework.stereotype.Service; + +import java.util.UUID; + +/** + * Created by jt on 2019-04-23. + */ +@Service +public class BeerServiceV2Impl implements BeerServiceV2 { + @Override + public BeerDtoV2 getBeerById(UUID beerId) { + return null; + } + + @Override + public BeerDtoV2 saveNewBeer(BeerDtoV2 beerDto) { + return null; + } + + @Override + public void updateBeer(UUID beerId, BeerDtoV2 beerDto) { + + } + + @Override + public void deleteById(UUID beerId) { + + } +} diff --git a/src/main/java/guru/springframework/msscbrewery/web/controller/BeerController.java b/src/main/java/guru/springframework/msscbrewery/web/controller/BeerController.java index fb1e6e34..c96e1e8d 100644 --- a/src/main/java/guru/springframework/msscbrewery/web/controller/BeerController.java +++ b/src/main/java/guru/springframework/msscbrewery/web/controller/BeerController.java @@ -12,6 +12,7 @@ /** * Created by jt on 2019-04-20. */ +@Deprecated @RequestMapping("/api/v1/beer") @RestController public class BeerController { diff --git a/src/main/java/guru/springframework/msscbrewery/web/controller/v2/BeerControllerV2.java b/src/main/java/guru/springframework/msscbrewery/web/controller/v2/BeerControllerV2.java new file mode 100644 index 00000000..1161ea5b --- /dev/null +++ b/src/main/java/guru/springframework/msscbrewery/web/controller/v2/BeerControllerV2.java @@ -0,0 +1,55 @@ +package guru.springframework.msscbrewery.web.controller.v2; + +import guru.springframework.msscbrewery.services.v2.BeerServiceV2; +import guru.springframework.msscbrewery.web.model.v2.BeerDtoV2; +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; + +import java.util.UUID; + +/** + * Created by jt on 2019-04-23. + */ +@RequestMapping("/api/v2/beer") +@RestController +public class BeerControllerV2 { + private final BeerServiceV2 beerServiceV2; + + public BeerControllerV2(BeerServiceV2 beerServiceV2) { + this.beerServiceV2 = beerServiceV2; + } + + @GetMapping({"/{beerId}"}) + public ResponseEntity getBeer(@PathVariable("beerId") UUID beerId){ + + return new ResponseEntity<>(beerServiceV2.getBeerById(beerId), HttpStatus.OK); + } + + @PostMapping // POST - create new beer + public ResponseEntity handlePost(BeerDtoV2 beerDto){ + + BeerDtoV2 savedDto = beerServiceV2.saveNewBeer(beerDto); + + HttpHeaders headers = new HttpHeaders(); + //todo add hostname to url + headers.add("Location", "/api/v1/beer/" + savedDto.getId().toString()); + + return new ResponseEntity(headers, HttpStatus.CREATED); + } + + @PutMapping({"/{beerId}"}) + public ResponseEntity handleUpdate(@PathVariable("beerId") UUID beerId, BeerDtoV2 beerDto){ + + beerServiceV2.updateBeer(beerId, beerDto); + + return new ResponseEntity(HttpStatus.NO_CONTENT); + } + + @DeleteMapping({"/{beerId}"}) + @ResponseStatus(HttpStatus.NO_CONTENT) + public void deleteBeer(@PathVariable("beerId") UUID beerId){ + beerServiceV2.deleteById(beerId); + } +} diff --git a/src/main/java/guru/springframework/msscbrewery/web/model/v2/BeerDtoV2.java b/src/main/java/guru/springframework/msscbrewery/web/model/v2/BeerDtoV2.java new file mode 100644 index 00000000..2790c00f --- /dev/null +++ b/src/main/java/guru/springframework/msscbrewery/web/model/v2/BeerDtoV2.java @@ -0,0 +1,22 @@ +package guru.springframework.msscbrewery.web.model.v2; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.UUID; + +/** + * Created by jt on 2019-04-23. + */ +@Data +@NoArgsConstructor +@AllArgsConstructor +@Builder +public class BeerDtoV2 { + private UUID id; + private String beerName; + private BeerStyleEnum beerStyle; + private Long upc; +} diff --git a/src/main/java/guru/springframework/msscbrewery/web/model/v2/BeerStyleEnum.java b/src/main/java/guru/springframework/msscbrewery/web/model/v2/BeerStyleEnum.java new file mode 100644 index 00000000..c4d34d33 --- /dev/null +++ b/src/main/java/guru/springframework/msscbrewery/web/model/v2/BeerStyleEnum.java @@ -0,0 +1,9 @@ +package guru.springframework.msscbrewery.web.model.v2; + +/** + * Created by jt on 2019-04-23. + */ +public enum BeerStyleEnum { + + LAGER, PISLSNER, ALE, STOUT, GOSE, IPA +} From ab7aaac9225887df1a60bf6769fcfb7ccb83c155 Mon Sep 17 00:00:00 2001 From: John Thompson Date: Sun, 12 May 2019 10:10:21 -0400 Subject: [PATCH 07/19] adding request mapping example and test --- .../web/controller/BeerController.java | 4 +- .../web/controller/BeerControllerTest.java | 92 +++++++++++++++++++ 2 files changed, 94 insertions(+), 2 deletions(-) create mode 100644 src/test/java/guru/springframework/msscbrewery/web/controller/BeerControllerTest.java diff --git a/src/main/java/guru/springframework/msscbrewery/web/controller/BeerController.java b/src/main/java/guru/springframework/msscbrewery/web/controller/BeerController.java index 8595f5ba..8cea41f3 100644 --- a/src/main/java/guru/springframework/msscbrewery/web/controller/BeerController.java +++ b/src/main/java/guru/springframework/msscbrewery/web/controller/BeerController.java @@ -29,7 +29,7 @@ public ResponseEntity getBeer(@PathVariable("beerId") UUID beerId){ } @PostMapping // POST - create new beer - public ResponseEntity handlePost(BeerDto beerDto){ + public ResponseEntity handlePost(@RequestBody BeerDto beerDto){ BeerDto savedDto = beerService.saveNewBeer(beerDto); @@ -41,7 +41,7 @@ public ResponseEntity handlePost(BeerDto beerDto){ } @PutMapping({"/{beerId}"}) - public ResponseEntity handleUpdate(@PathVariable("beerId") UUID beerId, BeerDto beerDto){ + public ResponseEntity handleUpdate(@PathVariable("beerId") UUID beerId, @RequestBody BeerDto beerDto){ beerService.updateBeer(beerId, beerDto); diff --git a/src/test/java/guru/springframework/msscbrewery/web/controller/BeerControllerTest.java b/src/test/java/guru/springframework/msscbrewery/web/controller/BeerControllerTest.java new file mode 100644 index 00000000..fc09489f --- /dev/null +++ b/src/test/java/guru/springframework/msscbrewery/web/controller/BeerControllerTest.java @@ -0,0 +1,92 @@ +package guru.springframework.msscbrewery.web.controller; + +import com.fasterxml.jackson.databind.ObjectMapper; +import guru.springframework.msscbrewery.services.BeerService; +import guru.springframework.msscbrewery.web.model.BeerDto; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest; +import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.http.MediaType; +import org.springframework.test.context.junit4.SpringRunner; +import org.springframework.test.web.servlet.MockMvc; + +import java.util.UUID; + +import static org.hamcrest.core.Is.is; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.BDDMockito.given; +import static org.mockito.BDDMockito.then; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; + +@RunWith(SpringRunner.class) +@WebMvcTest(BeerController.class) +public class BeerControllerTest { + + @MockBean + BeerService beerService; + + @Autowired + MockMvc mockMvc; + + @Autowired + ObjectMapper objectMapper; + + BeerDto validBeer; + + @Before + public void setUp() { + validBeer = BeerDto.builder().id(UUID.randomUUID()) + .beerName("Beer1") + .beerStyle("PALE_ALE") + .upc(123456789012L) + .build(); + } + + @Test + public void getBeer() throws Exception { + given(beerService.getBeerById(any(UUID.class))).willReturn(validBeer); + + mockMvc.perform(get("/api/v1/beer/" + validBeer.getId().toString()).accept(MediaType.APPLICATION_JSON)) + .andExpect(status().isOk()) + .andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8)) + .andExpect(jsonPath("$.id", is(validBeer.getId().toString()))) + .andExpect(jsonPath("$.beerName", is("Beer1"))); + } + + @Test + public void handlePost() throws Exception { + //given + BeerDto beerDto = validBeer; + beerDto.setId(null); + BeerDto savedDto = BeerDto.builder().id(UUID.randomUUID()).beerName("New Beer").build(); + String beerDtoJson = objectMapper.writeValueAsString(beerDto); + + given(beerService.saveNewBeer(any())).willReturn(savedDto); + + mockMvc.perform(post("/api/v1/beer/") + .contentType(MediaType.APPLICATION_JSON) + .content(beerDtoJson)) + .andExpect(status().isCreated()); + + } + + @Test + public void handleUpdate() throws Exception { + //given + BeerDto beerDto = validBeer; + String beerDtoJson = objectMapper.writeValueAsString(beerDto); + + //when + mockMvc.perform(put("/api/v1/beer/" + validBeer.getId()) + .contentType(MediaType.APPLICATION_JSON) + .content(beerDtoJson)) + .andExpect(status().isNoContent()); + + then(beerService).should().updateBeer(any(), any()); + + } +} \ No newline at end of file From 9304260ff0110f1c14263b5af0dd8e4e637c4c49 Mon Sep 17 00:00:00 2001 From: John Thompson Date: Fri, 17 May 2019 17:39:04 -0400 Subject: [PATCH 08/19] adding bean validation --- .../msscbrewery/web/controller/BeerController.java | 5 +++-- .../springframework/msscbrewery/web/model/BeerDto.java | 10 ++++++++++ .../msscbrewery/web/controller/BeerControllerTest.java | 3 ++- 3 files changed, 15 insertions(+), 3 deletions(-) diff --git a/src/main/java/guru/springframework/msscbrewery/web/controller/BeerController.java b/src/main/java/guru/springframework/msscbrewery/web/controller/BeerController.java index c7fb04b0..6db632c3 100644 --- a/src/main/java/guru/springframework/msscbrewery/web/controller/BeerController.java +++ b/src/main/java/guru/springframework/msscbrewery/web/controller/BeerController.java @@ -7,6 +7,7 @@ import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; +import javax.validation.Valid; import java.util.UUID; /** @@ -30,7 +31,7 @@ public ResponseEntity getBeer(@PathVariable("beerId") UUID beerId){ } @PostMapping // POST - create new beer - public ResponseEntity handlePost(@RequestBody BeerDto beerDto){ + public ResponseEntity handlePost(@Valid @RequestBody BeerDto beerDto){ BeerDto savedDto = beerService.saveNewBeer(beerDto); @@ -42,7 +43,7 @@ public ResponseEntity handlePost(@RequestBody BeerDto beerDto){ } @PutMapping({"/{beerId}"}) - public ResponseEntity handleUpdate(@PathVariable("beerId") UUID beerId, @RequestBody BeerDto beerDto){ + public ResponseEntity handleUpdate(@PathVariable("beerId") UUID beerId, @Valid @RequestBody BeerDto beerDto){ beerService.updateBeer(beerId, beerDto); diff --git a/src/main/java/guru/springframework/msscbrewery/web/model/BeerDto.java b/src/main/java/guru/springframework/msscbrewery/web/model/BeerDto.java index 34605262..83b32611 100644 --- a/src/main/java/guru/springframework/msscbrewery/web/model/BeerDto.java +++ b/src/main/java/guru/springframework/msscbrewery/web/model/BeerDto.java @@ -5,6 +5,9 @@ import lombok.Data; import lombok.NoArgsConstructor; +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.Null; +import javax.validation.constraints.Positive; import java.util.UUID; /** @@ -16,8 +19,15 @@ @Builder public class BeerDto { + @Null private UUID id; + + @NotBlank private String beerName; + + @NotBlank private String beerStyle; + + @Positive private Long upc; } diff --git a/src/test/java/guru/springframework/msscbrewery/web/controller/BeerControllerTest.java b/src/test/java/guru/springframework/msscbrewery/web/controller/BeerControllerTest.java index fc09489f..5073cef7 100644 --- a/src/test/java/guru/springframework/msscbrewery/web/controller/BeerControllerTest.java +++ b/src/test/java/guru/springframework/msscbrewery/web/controller/BeerControllerTest.java @@ -78,10 +78,11 @@ public void handlePost() throws Exception { public void handleUpdate() throws Exception { //given BeerDto beerDto = validBeer; + beerDto.setId(null); String beerDtoJson = objectMapper.writeValueAsString(beerDto); //when - mockMvc.perform(put("/api/v1/beer/" + validBeer.getId()) + mockMvc.perform(put("/api/v1/beer/" + UUID.randomUUID()) .contentType(MediaType.APPLICATION_JSON) .content(beerDtoJson)) .andExpect(status().isNoContent()); From 8b7cd5eb1ad509ef58dd393b788a66074396435c Mon Sep 17 00:00:00 2001 From: John Thompson Date: Sun, 19 May 2019 13:41:34 -0400 Subject: [PATCH 09/19] exception handler --- .../web/controller/v2/BeerControllerV2.java | 20 +++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/src/main/java/guru/springframework/msscbrewery/web/controller/v2/BeerControllerV2.java b/src/main/java/guru/springframework/msscbrewery/web/controller/v2/BeerControllerV2.java index 1161ea5b..16c0cd10 100644 --- a/src/main/java/guru/springframework/msscbrewery/web/controller/v2/BeerControllerV2.java +++ b/src/main/java/guru/springframework/msscbrewery/web/controller/v2/BeerControllerV2.java @@ -7,6 +7,10 @@ import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; +import javax.validation.ConstraintViolationException; +import javax.validation.Valid; +import java.util.ArrayList; +import java.util.List; import java.util.UUID; /** @@ -28,7 +32,7 @@ public ResponseEntity getBeer(@PathVariable("beerId") UUID beerId){ } @PostMapping // POST - create new beer - public ResponseEntity handlePost(BeerDtoV2 beerDto){ + public ResponseEntity handlePost(@Valid @RequestBody BeerDtoV2 beerDto){ BeerDtoV2 savedDto = beerServiceV2.saveNewBeer(beerDto); @@ -40,7 +44,7 @@ public ResponseEntity handlePost(BeerDtoV2 beerDto){ } @PutMapping({"/{beerId}"}) - public ResponseEntity handleUpdate(@PathVariable("beerId") UUID beerId, BeerDtoV2 beerDto){ + public ResponseEntity handleUpdate(@PathVariable("beerId") UUID beerId, @Valid @RequestBody BeerDtoV2 beerDto){ beerServiceV2.updateBeer(beerId, beerDto); @@ -52,4 +56,16 @@ public ResponseEntity handleUpdate(@PathVariable("beerId") UUID beerId, BeerDtoV public void deleteBeer(@PathVariable("beerId") UUID beerId){ beerServiceV2.deleteById(beerId); } + + + @ExceptionHandler(ConstraintViolationException.class) + public ResponseEntity validationErrorHandler(ConstraintViolationException e){ + List errors = new ArrayList<>(e.getConstraintViolations().size()); + + e.getConstraintViolations().forEach(constraintViolation -> { + errors.add(constraintViolation.getPropertyPath() + " : " + constraintViolation.getMessage()); + }); + + return new ResponseEntity<>(errors, HttpStatus.BAD_REQUEST); + } } From eb62838758a036b9cea29a7f8eeb3bc7bf8996cb Mon Sep 17 00:00:00 2001 From: John Thompson Date: Sat, 25 May 2019 13:13:30 -0400 Subject: [PATCH 10/19] adding customer validation --- .../web/controller/CustomerController.java | 21 +++++++++++++++++-- .../msscbrewery/web/model/CustomerDto.java | 5 +++++ 2 files changed, 24 insertions(+), 2 deletions(-) diff --git a/src/main/java/guru/springframework/msscbrewery/web/controller/CustomerController.java b/src/main/java/guru/springframework/msscbrewery/web/controller/CustomerController.java index 24704dba..85e688fa 100644 --- a/src/main/java/guru/springframework/msscbrewery/web/controller/CustomerController.java +++ b/src/main/java/guru/springframework/msscbrewery/web/controller/CustomerController.java @@ -5,8 +5,12 @@ import org.springframework.http.HttpHeaders; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; +import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; +import javax.validation.ConstraintViolationException; +import java.util.ArrayList; +import java.util.List; import java.util.UUID; /** @@ -30,7 +34,7 @@ public ResponseEntity getCustomer(@PathVariable("customerId") UUID } @PostMapping - public ResponseEntity handlePost(CustomerDto customerDto){ + public ResponseEntity handlePost(@RequestBody @Validated CustomerDto customerDto){ CustomerDto savedDto = customerService.saveNewCustomer(customerDto); HttpHeaders httpHeaders = new HttpHeaders(); @@ -41,7 +45,7 @@ public ResponseEntity handlePost(CustomerDto customerDto){ @PutMapping("/{customerId}") @ResponseStatus(HttpStatus.NO_CONTENT) - public void handleUpdate(@PathVariable("customerId") UUID customerId, CustomerDto customerDto){ + public void handleUpdate(@PathVariable("customerId") UUID customerId, @Validated @RequestBody CustomerDto customerDto){ customerService.updateCustomer(customerId, customerDto); } @@ -49,4 +53,17 @@ public void handleUpdate(@PathVariable("customerId") UUID customerId, CustomerDt public void deleteById(@PathVariable("customerId") UUID customerId){ customerService.deleteById(customerId); } + + @ExceptionHandler(ConstraintViolationException.class) + public ResponseEntity validationErrorHandler(ConstraintViolationException e){ + List errors = new ArrayList<>(e.getConstraintViolations().size()); + + e.getConstraintViolations().forEach(constraintViolation -> { + errors.add(constraintViolation.getPropertyPath() + " : " + constraintViolation.getMessage()); + }); + + return new ResponseEntity<>(errors, HttpStatus.BAD_REQUEST); + } + + } diff --git a/src/main/java/guru/springframework/msscbrewery/web/model/CustomerDto.java b/src/main/java/guru/springframework/msscbrewery/web/model/CustomerDto.java index df075f38..cab5ab60 100644 --- a/src/main/java/guru/springframework/msscbrewery/web/model/CustomerDto.java +++ b/src/main/java/guru/springframework/msscbrewery/web/model/CustomerDto.java @@ -5,6 +5,8 @@ import lombok.Data; import lombok.NoArgsConstructor; +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.Size; import java.util.UUID; /** @@ -17,5 +19,8 @@ public class CustomerDto { private UUID id; + + @NotBlank + @Size(min = 3, max = 100) private String name; } From 2e4f48ac2eea11e4dfbbb4f81e42c9daa4b9ab36 Mon Sep 17 00:00:00 2001 From: John Thompson Date: Sat, 25 May 2019 13:28:32 -0400 Subject: [PATCH 11/19] adding controller advice --- .../web/controller/CustomerController.java | 15 -------- .../web/controller/MvcExceptionHandler.java | 34 +++++++++++++++++++ .../web/controller/v2/BeerControllerV2.java | 14 -------- 3 files changed, 34 insertions(+), 29 deletions(-) create mode 100644 src/main/java/guru/springframework/msscbrewery/web/controller/MvcExceptionHandler.java diff --git a/src/main/java/guru/springframework/msscbrewery/web/controller/CustomerController.java b/src/main/java/guru/springframework/msscbrewery/web/controller/CustomerController.java index 85e688fa..c4d4224d 100644 --- a/src/main/java/guru/springframework/msscbrewery/web/controller/CustomerController.java +++ b/src/main/java/guru/springframework/msscbrewery/web/controller/CustomerController.java @@ -8,9 +8,6 @@ import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; -import javax.validation.ConstraintViolationException; -import java.util.ArrayList; -import java.util.List; import java.util.UUID; /** @@ -54,16 +51,4 @@ public void deleteById(@PathVariable("customerId") UUID customerId){ customerService.deleteById(customerId); } - @ExceptionHandler(ConstraintViolationException.class) - public ResponseEntity validationErrorHandler(ConstraintViolationException e){ - List errors = new ArrayList<>(e.getConstraintViolations().size()); - - e.getConstraintViolations().forEach(constraintViolation -> { - errors.add(constraintViolation.getPropertyPath() + " : " + constraintViolation.getMessage()); - }); - - return new ResponseEntity<>(errors, HttpStatus.BAD_REQUEST); - } - - } diff --git a/src/main/java/guru/springframework/msscbrewery/web/controller/MvcExceptionHandler.java b/src/main/java/guru/springframework/msscbrewery/web/controller/MvcExceptionHandler.java new file mode 100644 index 00000000..ce4bd52f --- /dev/null +++ b/src/main/java/guru/springframework/msscbrewery/web/controller/MvcExceptionHandler.java @@ -0,0 +1,34 @@ +package guru.springframework.msscbrewery.web.controller; + +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.validation.BindException; +import org.springframework.web.bind.annotation.ControllerAdvice; +import org.springframework.web.bind.annotation.ExceptionHandler; + +import javax.validation.ConstraintViolationException; +import java.util.ArrayList; +import java.util.List; + +/** + * Created by jt on 2019-05-25. + */ +@ControllerAdvice +public class MvcExceptionHandler { + + @ExceptionHandler(ConstraintViolationException.class) + public ResponseEntity validationErrorHandler(ConstraintViolationException e){ + List errors = new ArrayList<>(e.getConstraintViolations().size()); + + e.getConstraintViolations().forEach(constraintViolation -> { + errors.add(constraintViolation.getPropertyPath() + " : " + constraintViolation.getMessage()); + }); + + return new ResponseEntity<>(errors, HttpStatus.BAD_REQUEST); + } + + @ExceptionHandler(BindException.class) + public ResponseEntity handleBindException(BindException ex){ + return new ResponseEntity(ex.getAllErrors(), HttpStatus.BAD_REQUEST); + } +} diff --git a/src/main/java/guru/springframework/msscbrewery/web/controller/v2/BeerControllerV2.java b/src/main/java/guru/springframework/msscbrewery/web/controller/v2/BeerControllerV2.java index 16c0cd10..6543969a 100644 --- a/src/main/java/guru/springframework/msscbrewery/web/controller/v2/BeerControllerV2.java +++ b/src/main/java/guru/springframework/msscbrewery/web/controller/v2/BeerControllerV2.java @@ -7,10 +7,7 @@ import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; -import javax.validation.ConstraintViolationException; import javax.validation.Valid; -import java.util.ArrayList; -import java.util.List; import java.util.UUID; /** @@ -57,15 +54,4 @@ public void deleteBeer(@PathVariable("beerId") UUID beerId){ beerServiceV2.deleteById(beerId); } - - @ExceptionHandler(ConstraintViolationException.class) - public ResponseEntity validationErrorHandler(ConstraintViolationException e){ - List errors = new ArrayList<>(e.getConstraintViolations().size()); - - e.getConstraintViolations().forEach(constraintViolation -> { - errors.add(constraintViolation.getPropertyPath() + " : " + constraintViolation.getMessage()); - }); - - return new ResponseEntity<>(errors, HttpStatus.BAD_REQUEST); - } } From 04c4dccaeec39b73d8ad9cc40ab9cba4331653cb Mon Sep 17 00:00:00 2001 From: John Thompson Date: Sat, 25 May 2019 15:19:30 -0400 Subject: [PATCH 12/19] adding lombok examples --- pom.xml | 2 +- .../web/controller/v2/BeerControllerV2.java | 15 +++++++++------ 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/pom.xml b/pom.xml index 9ca39714..748b4908 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ org.springframework.boot spring-boot-starter-parent - 2.1.4.RELEASE + 2.1.5.RELEASE diff --git a/src/main/java/guru/springframework/msscbrewery/web/controller/v2/BeerControllerV2.java b/src/main/java/guru/springframework/msscbrewery/web/controller/v2/BeerControllerV2.java index 6543969a..33906917 100644 --- a/src/main/java/guru/springframework/msscbrewery/web/controller/v2/BeerControllerV2.java +++ b/src/main/java/guru/springframework/msscbrewery/web/controller/v2/BeerControllerV2.java @@ -2,6 +2,9 @@ import guru.springframework.msscbrewery.services.v2.BeerServiceV2; import guru.springframework.msscbrewery.web.model.v2.BeerDtoV2; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import lombok.val; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; @@ -13,15 +16,13 @@ /** * Created by jt on 2019-04-23. */ +@Slf4j +@RequiredArgsConstructor @RequestMapping("/api/v2/beer") @RestController public class BeerControllerV2 { private final BeerServiceV2 beerServiceV2; - public BeerControllerV2(BeerServiceV2 beerServiceV2) { - this.beerServiceV2 = beerServiceV2; - } - @GetMapping({"/{beerId}"}) public ResponseEntity getBeer(@PathVariable("beerId") UUID beerId){ @@ -31,9 +32,11 @@ public ResponseEntity getBeer(@PathVariable("beerId") UUID beerId){ @PostMapping // POST - create new beer public ResponseEntity handlePost(@Valid @RequestBody BeerDtoV2 beerDto){ - BeerDtoV2 savedDto = beerServiceV2.saveNewBeer(beerDto); + log.debug("in handle post..."); + + val savedDto = beerServiceV2.saveNewBeer(beerDto); - HttpHeaders headers = new HttpHeaders(); + var headers = new HttpHeaders(); //todo add hostname to url headers.add("Location", "/api/v1/beer/" + savedDto.getId().toString()); From 4405d91a02799f40115f8b92975ff7c3042b5abe Mon Sep 17 00:00:00 2001 From: John Thompson Date: Sat, 25 May 2019 16:28:05 -0400 Subject: [PATCH 13/19] adding mapstruct config --- pom.xml | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/pom.xml b/pom.xml index 748b4908..f0e329f5 100644 --- a/pom.xml +++ b/pom.xml @@ -17,6 +17,7 @@ 11 + 1.3.0.Final @@ -39,6 +40,11 @@ lombok true + + org.mapstruct + mapstruct + ${mapstruct.version} + org.springframework.boot spring-boot-starter-test @@ -52,6 +58,28 @@ org.springframework.boot spring-boot-maven-plugin + + org.apache.maven.plugins + maven-compiler-plugin + 3.8.0 + + + + org.mapstruct + mapstruct-processor + ${mapstruct.version} + + + org.projectlombok + lombok + ${lombok.version} + + + + -Amapstruct.defaultComponentModel=spring + + + From 5165769711227b85493cf3ddd844e9cadfe99f45 Mon Sep 17 00:00:00 2001 From: John Thompson Date: Sat, 25 May 2019 16:44:26 -0400 Subject: [PATCH 14/19] adding mapstruct example --- .../msscbrewery/domain/Beer.java | 23 +++++++++++++++++++ .../msscbrewery/web/mappers/BeerMapper.java | 16 +++++++++++++ 2 files changed, 39 insertions(+) create mode 100644 src/main/java/guru/springframework/msscbrewery/domain/Beer.java create mode 100644 src/main/java/guru/springframework/msscbrewery/web/mappers/BeerMapper.java diff --git a/src/main/java/guru/springframework/msscbrewery/domain/Beer.java b/src/main/java/guru/springframework/msscbrewery/domain/Beer.java new file mode 100644 index 00000000..e467748a --- /dev/null +++ b/src/main/java/guru/springframework/msscbrewery/domain/Beer.java @@ -0,0 +1,23 @@ +package guru.springframework.msscbrewery.domain; + +import guru.springframework.msscbrewery.web.model.v2.BeerStyleEnum; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.UUID; + +/** + * Created by jt on 2019-05-25. + */ +@Data +@NoArgsConstructor +@AllArgsConstructor +@Builder +public class Beer { + private UUID id; + private String beerName; + private BeerStyleEnum beerStyle; + private Long upc; +} diff --git a/src/main/java/guru/springframework/msscbrewery/web/mappers/BeerMapper.java b/src/main/java/guru/springframework/msscbrewery/web/mappers/BeerMapper.java new file mode 100644 index 00000000..516ce3d2 --- /dev/null +++ b/src/main/java/guru/springframework/msscbrewery/web/mappers/BeerMapper.java @@ -0,0 +1,16 @@ +package guru.springframework.msscbrewery.web.mappers; + +import guru.springframework.msscbrewery.domain.Beer; +import guru.springframework.msscbrewery.web.model.BeerDto; +import org.mapstruct.Mapper; + +/** + * Created by jt on 2019-05-25. + */ +@Mapper +public interface BeerMapper { + + BeerDto beerToBeerDto(Beer beer); + + Beer beerDtoToBeer(BeerDto dto); +} From a817257a3cb2dde65b4561c1ca0e01a7dd26e2e3 Mon Sep 17 00:00:00 2001 From: John Thompson Date: Sat, 25 May 2019 17:06:46 -0400 Subject: [PATCH 15/19] adding mapstruct customer assignment --- .../msscbrewery/domain/Customer.java | 20 +++++++++++++++++++ .../web/mappers/CustomerMapper.java | 16 +++++++++++++++ 2 files changed, 36 insertions(+) create mode 100644 src/main/java/guru/springframework/msscbrewery/domain/Customer.java create mode 100644 src/main/java/guru/springframework/msscbrewery/web/mappers/CustomerMapper.java diff --git a/src/main/java/guru/springframework/msscbrewery/domain/Customer.java b/src/main/java/guru/springframework/msscbrewery/domain/Customer.java new file mode 100644 index 00000000..ce11230a --- /dev/null +++ b/src/main/java/guru/springframework/msscbrewery/domain/Customer.java @@ -0,0 +1,20 @@ +package guru.springframework.msscbrewery.domain; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.UUID; + +/** + * Created by jt on 2019-05-25. + */ +@Data +@NoArgsConstructor +@AllArgsConstructor +@Builder +public class Customer { + private UUID id; + private String name; +} diff --git a/src/main/java/guru/springframework/msscbrewery/web/mappers/CustomerMapper.java b/src/main/java/guru/springframework/msscbrewery/web/mappers/CustomerMapper.java new file mode 100644 index 00000000..4cef4ca2 --- /dev/null +++ b/src/main/java/guru/springframework/msscbrewery/web/mappers/CustomerMapper.java @@ -0,0 +1,16 @@ +package guru.springframework.msscbrewery.web.mappers; + +import guru.springframework.msscbrewery.domain.Customer; +import guru.springframework.msscbrewery.web.model.CustomerDto; +import org.mapstruct.Mapper; + +/** + * Created by jt on 2019-05-25. + */ +@Mapper +public interface CustomerMapper { + + Customer customerDtoToCustomer(CustomerDto dto); + + CustomerDto customerToCustomerDto(Customer customer); +} From 9a6e7ea73827d541261341da9283860a1f553450 Mon Sep 17 00:00:00 2001 From: John Thompson Date: Sun, 2 Jun 2019 21:27:25 -0400 Subject: [PATCH 16/19] Update README.md --- README.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 87de421a..18bc8439 100644 --- a/README.md +++ b/README.md @@ -1 +1,4 @@ -# SFG Beer Works - Brewery Microservice \ No newline at end of file +# SFG Beer Works - Brewery Microservice + +Source code in this repository is to support my on line courses: +* [Spring Boot Microservices with Spring Cloud](https://www.udemy.com/spring-boot-microservices-with-spring-cloud-beginner-to-guru/?couponCode=GIT_HUB2) From cfbc7596b28f37fe529243e7e89a7aba326f1cec Mon Sep 17 00:00:00 2001 From: John Thompson Date: Sun, 2 Jun 2019 21:30:28 -0400 Subject: [PATCH 17/19] Update README.md --- README.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 87de421a..18bc8439 100644 --- a/README.md +++ b/README.md @@ -1 +1,4 @@ -# SFG Beer Works - Brewery Microservice \ No newline at end of file +# SFG Beer Works - Brewery Microservice + +Source code in this repository is to support my on line courses: +* [Spring Boot Microservices with Spring Cloud](https://www.udemy.com/spring-boot-microservices-with-spring-cloud-beginner-to-guru/?couponCode=GIT_HUB2) From 4fbad3058322dda156b479aac6f61ff05e1abd4a Mon Sep 17 00:00:00 2001 From: John Thompson Date: Sun, 2 Jun 2019 21:30:44 -0400 Subject: [PATCH 18/19] Update README.md --- README.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 87de421a..18bc8439 100644 --- a/README.md +++ b/README.md @@ -1 +1,4 @@ -# SFG Beer Works - Brewery Microservice \ No newline at end of file +# SFG Beer Works - Brewery Microservice + +Source code in this repository is to support my on line courses: +* [Spring Boot Microservices with Spring Cloud](https://www.udemy.com/spring-boot-microservices-with-spring-cloud-beginner-to-guru/?couponCode=GIT_HUB2) From 535be0b5e14ecf166bb808f8abd48f68734f8bed Mon Sep 17 00:00:00 2001 From: John Thompson Date: Sun, 7 Mar 2021 11:11:13 -0500 Subject: [PATCH 19/19] updating for Mapstruct Binding and newer version of Lombok --- pom.xml | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index f0e329f5..3318f7b4 100644 --- a/pom.xml +++ b/pom.xml @@ -17,7 +17,8 @@ 11 - 1.3.0.Final + 1.4.2.Final + 1.18.18 @@ -38,6 +39,7 @@ org.projectlombok lombok + ${org.lombok.version} true @@ -72,7 +74,12 @@ org.projectlombok lombok - ${lombok.version} + ${org.lombok.version} + + + org.projectlombok + lombok-mapstruct-binding + 0.2.0