├── src ├── test │ └── java │ │ └── com │ │ └── codeforgeyt │ │ └── onetomanywebservice │ │ └── OneToManyWebServiceApplicationTests.java └── main │ ├── java │ └── com │ │ └── codeforgeyt │ │ └── onetomanywebservice │ │ ├── repository │ │ ├── CartRepository.java │ │ └── ItemRepository.java │ │ ├── model │ │ ├── exception │ │ │ ├── ItemNotFoundException.java │ │ │ ├── CartNotFoundException.java │ │ │ └── ItemIsAlreadyAssignedException.java │ │ ├── dto │ │ │ ├── PlainCartDto.java │ │ │ ├── ItemDto.java │ │ │ └── CartDto.java │ │ ├── Item.java │ │ └── Cart.java │ │ ├── OneToManyWebServiceApplication.java │ │ ├── config │ │ └── CorsConfig.java │ │ ├── service │ │ ├── ItemService.java │ │ └── CartService.java │ │ └── controller │ │ ├── ItemController.java │ │ └── CartController.java │ └── resources │ └── application.properties ├── .gitignore ├── README.md └── pom.xml /src/test/java/com/codeforgeyt/onetomanywebservice/OneToManyWebServiceApplicationTests.java: -------------------------------------------------------------------------------- 1 | package com.codeforgeyt.onetomanywebservice; 2 | 3 | import org.junit.jupiter.api.Test; 4 | import org.springframework.boot.test.context.SpringBootTest; 5 | 6 | @SpringBootTest 7 | class OneToManyWebServiceApplicationTests { 8 | 9 | @Test 10 | void contextLoads() { 11 | } 12 | 13 | } 14 | -------------------------------------------------------------------------------- /src/main/java/com/codeforgeyt/onetomanywebservice/repository/CartRepository.java: -------------------------------------------------------------------------------- 1 | package com.codeforgeyt.onetomanywebservice.repository; 2 | 3 | import com.codeforgeyt.onetomanywebservice.model.Cart; 4 | import org.springframework.data.repository.CrudRepository; 5 | import org.springframework.stereotype.Repository; 6 | 7 | @Repository 8 | public interface CartRepository extends CrudRepository { 9 | } 10 | -------------------------------------------------------------------------------- /src/main/java/com/codeforgeyt/onetomanywebservice/repository/ItemRepository.java: -------------------------------------------------------------------------------- 1 | package com.codeforgeyt.onetomanywebservice.repository; 2 | 3 | import com.codeforgeyt.onetomanywebservice.model.Item; 4 | import org.springframework.data.repository.CrudRepository; 5 | import org.springframework.stereotype.Repository; 6 | 7 | @Repository 8 | public interface ItemRepository extends CrudRepository { 9 | } 10 | -------------------------------------------------------------------------------- /src/main/java/com/codeforgeyt/onetomanywebservice/model/exception/ItemNotFoundException.java: -------------------------------------------------------------------------------- 1 | package com.codeforgeyt.onetomanywebservice.model.exception; 2 | 3 | import java.text.MessageFormat; 4 | 5 | public class ItemNotFoundException extends RuntimeException { 6 | 7 | public ItemNotFoundException(final Long id){ 8 | super(MessageFormat.format("Could not find item with id: {0}", id)); 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /src/main/java/com/codeforgeyt/onetomanywebservice/model/exception/CartNotFoundException.java: -------------------------------------------------------------------------------- 1 | package com.codeforgeyt.onetomanywebservice.model.exception; 2 | 3 | import java.text.MessageFormat; 4 | 5 | public class CartNotFoundException extends RuntimeException { 6 | 7 | public CartNotFoundException(final Long id){ 8 | super(MessageFormat.format("Could not find cart with id: {0}", id)); 9 | } 10 | 11 | } 12 | -------------------------------------------------------------------------------- /src/main/java/com/codeforgeyt/onetomanywebservice/OneToManyWebServiceApplication.java: -------------------------------------------------------------------------------- 1 | package com.codeforgeyt.onetomanywebservice; 2 | 3 | import org.springframework.boot.SpringApplication; 4 | import org.springframework.boot.autoconfigure.SpringBootApplication; 5 | 6 | @SpringBootApplication 7 | public class OneToManyWebServiceApplication { 8 | public static void main(String[] args) { 9 | SpringApplication.run(OneToManyWebServiceApplication.class, args); 10 | } 11 | 12 | } 13 | -------------------------------------------------------------------------------- /src/main/java/com/codeforgeyt/onetomanywebservice/model/exception/ItemIsAlreadyAssignedException.java: -------------------------------------------------------------------------------- 1 | package com.codeforgeyt.onetomanywebservice.model.exception; 2 | 3 | import java.text.MessageFormat; 4 | 5 | public class ItemIsAlreadyAssignedException extends RuntimeException{ 6 | public ItemIsAlreadyAssignedException(final Long itemId, final Long cartId){ 7 | super(MessageFormat.format("Item: {0} is already assigned to cart: {1}", itemId, cartId)); 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | HELP.md 2 | target/ 3 | !.mvn/wrapper/maven-wrapper.jar 4 | !**/src/main/**/target/ 5 | !**/src/test/**/target/ 6 | *.log 7 | 8 | ### STS ### 9 | .apt_generated 10 | .classpath 11 | .factorypath 12 | .project 13 | .settings 14 | .springBeans 15 | .sts4-cache 16 | 17 | ### IntelliJ IDEA ### 18 | .idea 19 | *.iws 20 | *.iml 21 | *.ipr 22 | 23 | ### NetBeans ### 24 | /nbproject/private/ 25 | /nbbuild/ 26 | /dist/ 27 | /nbdist/ 28 | /.nb-gradle/ 29 | build/ 30 | !**/src/main/**/build/ 31 | !**/src/test/**/build/ 32 | 33 | ### VS Code ### 34 | .vscode/ 35 | -------------------------------------------------------------------------------- /src/main/java/com/codeforgeyt/onetomanywebservice/model/dto/PlainCartDto.java: -------------------------------------------------------------------------------- 1 | package com.codeforgeyt.onetomanywebservice.model.dto; 2 | 3 | import com.codeforgeyt.onetomanywebservice.model.Cart; 4 | import lombok.Data; 5 | 6 | @Data 7 | public class PlainCartDto { 8 | private Long id; 9 | private String name; 10 | 11 | public static PlainCartDto from(Cart cart){ 12 | PlainCartDto plainCartDto = new PlainCartDto(); 13 | plainCartDto.setId(cart.getId()); 14 | plainCartDto.setName(cart.getName()); 15 | return plainCartDto; 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # one-to-many-web-service 2 | Hibernate one to many web service with rest endpoints and spring boot admin 3 | 4 | # Related components 5 | Works with Spring Boot Admin app spring-boot-admin-server 6 | 7 | # YouTube 8 | 9 | Watch the tutorial on YouTube 10 | 11 | [![Watch the tutorial on YouTube](https://img.youtube.com/vi/eQsXQBiXXsg/maxresdefault.jpg)](https://youtu.be/eQsXQBiXXsg) 12 | 13 | [![Watch the tutorial on YouTube](https://img.youtube.com/vi/OpX8RBvnN-c/maxresdefault.jpg)](https://youtu.be/OpX8RBvnN-c) 14 | 15 | [![Watch the tutorial on YouTube](https://img.youtube.com/vi/Ly79YDERpas/maxresdefault.jpg)](https://youtu.be/Ly79YDERpas) 16 | 17 | -------------------------------------------------------------------------------- /src/main/java/com/codeforgeyt/onetomanywebservice/model/Item.java: -------------------------------------------------------------------------------- 1 | package com.codeforgeyt.onetomanywebservice.model; 2 | 3 | import com.codeforgeyt.onetomanywebservice.model.dto.ItemDto; 4 | import lombok.Data; 5 | 6 | import javax.persistence.*; 7 | 8 | @Data 9 | @Entity 10 | @Table(name = "Item") 11 | public class Item { 12 | @Id 13 | @GeneratedValue(strategy = GenerationType.AUTO) 14 | private Long id; 15 | private String serialNumber; 16 | @ManyToOne 17 | private Cart cart; 18 | 19 | public static Item from(ItemDto itemDto){ 20 | Item item = new Item(); 21 | item.setSerialNumber(itemDto.getSerialNumber()); 22 | return item; 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /src/main/java/com/codeforgeyt/onetomanywebservice/model/dto/ItemDto.java: -------------------------------------------------------------------------------- 1 | package com.codeforgeyt.onetomanywebservice.model.dto; 2 | 3 | import com.codeforgeyt.onetomanywebservice.model.Item; 4 | import lombok.Data; 5 | 6 | import java.util.Objects; 7 | 8 | @Data 9 | public class ItemDto { 10 | private Long id; 11 | private String serialNumber; 12 | private PlainCartDto plainCartDto; 13 | 14 | public static ItemDto from(Item item){ 15 | ItemDto itemDto = new ItemDto(); 16 | itemDto.setId(item.getId()); 17 | itemDto.setSerialNumber(item.getSerialNumber()); 18 | if(Objects.nonNull(item.getCart())){ 19 | itemDto.setPlainCartDto(PlainCartDto.from(item.getCart())); 20 | } 21 | return itemDto; 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /src/main/java/com/codeforgeyt/onetomanywebservice/model/dto/CartDto.java: -------------------------------------------------------------------------------- 1 | package com.codeforgeyt.onetomanywebservice.model.dto; 2 | 3 | import com.codeforgeyt.onetomanywebservice.model.Cart; 4 | import com.codeforgeyt.onetomanywebservice.model.Item; 5 | import lombok.Data; 6 | 7 | import java.util.ArrayList; 8 | import java.util.List; 9 | import java.util.stream.Collectors; 10 | 11 | @Data 12 | public class CartDto { 13 | private Long id; 14 | private String name; 15 | private List itemsDto = new ArrayList<>(); 16 | 17 | public static CartDto from(Cart cart){ 18 | CartDto cartDto = new CartDto(); 19 | cartDto.setId(cart.getId()); 20 | cartDto.setName(cart.getName()); 21 | cartDto.setItemsDto(cart.getItems().stream().map(ItemDto::from).collect(Collectors.toList())); 22 | return cartDto; 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /src/main/resources/application.properties: -------------------------------------------------------------------------------- 1 | spring.application.name=One To Many Web Service 2 | server.port=8080 3 | 4 | spring.h2.console.enabled=true 5 | spring.h2.console.path=/h2 6 | 7 | spring.datasource.url=jdbc:h2:mem:memDb;DB_CLOSE_DELAY=-1 8 | #spring.datasource.url=jdbc:h2:file:./data/fileDb 9 | spring.datasource.driverClassName=org.h2.Driver 10 | spring.datasource.username=sa 11 | spring.datasource.password= 12 | 13 | spring.jpa.database-platform=org.hibernate.dialect.H2Dialect 14 | spring.jpa.hibernate.ddl-auto=create-drop 15 | spring.jpa.show-sql=true 16 | spring.jpa.properties.hibernate.format_sql=true 17 | 18 | allowed.origin=http://localhost:4200 19 | 20 | logging.file.name=one-to-many-web-service.log 21 | logging.file.max-history=5 22 | logging.file.max-size=10MB 23 | 24 | spring.boot.admin.client.url=http://localhost:8081 25 | 26 | management.endpoints.web.exposure.include=* 27 | management.endpoint.health.show-details=always -------------------------------------------------------------------------------- /src/main/java/com/codeforgeyt/onetomanywebservice/model/Cart.java: -------------------------------------------------------------------------------- 1 | package com.codeforgeyt.onetomanywebservice.model; 2 | 3 | import com.codeforgeyt.onetomanywebservice.model.dto.CartDto; 4 | import lombok.Data; 5 | 6 | import javax.persistence.*; 7 | import java.util.ArrayList; 8 | import java.util.List; 9 | 10 | @Data 11 | @Entity 12 | @Table(name = "Cart") 13 | public class Cart { 14 | @Id 15 | @GeneratedValue(strategy = GenerationType.AUTO) 16 | private Long id; 17 | private String name; 18 | @OneToMany( 19 | cascade = CascadeType.ALL 20 | ) 21 | @JoinColumn(name = "cart_id") 22 | private List items = new ArrayList<>(); 23 | 24 | public void addItem(Item item){ 25 | items.add(item); 26 | } 27 | 28 | public void removeItem(Item item){ 29 | items.remove(item); 30 | } 31 | 32 | public static Cart from(CartDto cartDto){ 33 | Cart cart = new Cart(); 34 | cart.setName(cartDto.getName()); 35 | return cart; 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /src/main/java/com/codeforgeyt/onetomanywebservice/config/CorsConfig.java: -------------------------------------------------------------------------------- 1 | package com.codeforgeyt.onetomanywebservice.config; 2 | 3 | import org.springframework.beans.factory.annotation.Value; 4 | import org.springframework.context.annotation.Bean; 5 | import org.springframework.context.annotation.Configuration; 6 | import org.springframework.web.servlet.config.annotation.CorsRegistry; 7 | import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; 8 | 9 | @Configuration 10 | public class CorsConfig { 11 | 12 | @Value("${allowed.origin}") 13 | private String allowedOrigin; 14 | 15 | @Bean 16 | public WebMvcConfigurer getCorsConfiguration(){ 17 | return new WebMvcConfigurer() { 18 | @Override 19 | public void addCorsMappings(CorsRegistry registry) { 20 | registry.addMapping("/**") 21 | .allowedOrigins(allowedOrigin) 22 | .allowedMethods("GET", "POST", "PUT", "DELETE") 23 | .allowedHeaders("*"); 24 | } 25 | }; 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /src/main/java/com/codeforgeyt/onetomanywebservice/service/ItemService.java: -------------------------------------------------------------------------------- 1 | package com.codeforgeyt.onetomanywebservice.service; 2 | 3 | import com.codeforgeyt.onetomanywebservice.model.Item; 4 | import com.codeforgeyt.onetomanywebservice.model.exception.ItemNotFoundException; 5 | import com.codeforgeyt.onetomanywebservice.repository.ItemRepository; 6 | import org.springframework.beans.factory.annotation.Autowired; 7 | import org.springframework.stereotype.Service; 8 | 9 | import javax.transaction.Transactional; 10 | import java.util.List; 11 | import java.util.stream.Collectors; 12 | import java.util.stream.StreamSupport; 13 | 14 | @Service 15 | public class ItemService { 16 | 17 | private final ItemRepository itemRepository; 18 | 19 | @Autowired 20 | public ItemService(ItemRepository itemRepository) { 21 | this.itemRepository = itemRepository; 22 | } 23 | 24 | public Item addItem(Item item){ 25 | return itemRepository.save(item); 26 | } 27 | 28 | public List getItems(){ 29 | return StreamSupport 30 | .stream(itemRepository.findAll().spliterator(), false) 31 | .collect(Collectors.toList()); 32 | } 33 | 34 | public Item getItem(Long id){ 35 | return itemRepository.findById(id).orElseThrow(() -> 36 | new ItemNotFoundException(id)); 37 | } 38 | 39 | public Item deleteItem(Long id){ 40 | Item item = getItem(id); 41 | itemRepository.delete(item); 42 | return item; 43 | } 44 | 45 | @Transactional 46 | public Item editItem(Long id, Item item){ 47 | Item itemToEdit = getItem(id); 48 | itemToEdit.setSerialNumber(item.getSerialNumber()); 49 | return itemToEdit; 50 | } 51 | } 52 | -------------------------------------------------------------------------------- /src/main/java/com/codeforgeyt/onetomanywebservice/controller/ItemController.java: -------------------------------------------------------------------------------- 1 | package com.codeforgeyt.onetomanywebservice.controller; 2 | 3 | import com.codeforgeyt.onetomanywebservice.model.Item; 4 | import com.codeforgeyt.onetomanywebservice.model.dto.ItemDto; 5 | import com.codeforgeyt.onetomanywebservice.service.ItemService; 6 | import org.springframework.beans.factory.annotation.Autowired; 7 | import org.springframework.http.HttpStatus; 8 | import org.springframework.http.ResponseEntity; 9 | import org.springframework.web.bind.annotation.*; 10 | 11 | import java.util.List; 12 | import java.util.stream.Collectors; 13 | 14 | @RestController 15 | @RequestMapping("/items") 16 | public class ItemController { 17 | 18 | private final ItemService itemService; 19 | 20 | @Autowired 21 | public ItemController(ItemService itemService) { 22 | this.itemService = itemService; 23 | } 24 | 25 | @PostMapping 26 | public ResponseEntity addItem(@RequestBody final ItemDto itemDto){ 27 | Item item = itemService.addItem(Item.from(itemDto)); 28 | return new ResponseEntity<>(ItemDto.from(item), HttpStatus.OK); 29 | } 30 | 31 | @GetMapping 32 | public ResponseEntity> getItems(){ 33 | List items = itemService.getItems(); 34 | List itemsDto = items.stream().map(ItemDto::from).collect(Collectors.toList()); 35 | return new ResponseEntity<>(itemsDto, HttpStatus.OK); 36 | } 37 | 38 | @GetMapping(value = "{id}") 39 | public ResponseEntity getItem(@PathVariable final Long id){ 40 | Item item = itemService.getItem(id); 41 | return new ResponseEntity<>(ItemDto.from(item), HttpStatus.OK); 42 | } 43 | 44 | @DeleteMapping(value = "{id}") 45 | public ResponseEntity deleteItem(@PathVariable final Long id){ 46 | Item item = itemService.deleteItem(id); 47 | return new ResponseEntity<>(ItemDto.from(item), HttpStatus.OK); 48 | } 49 | 50 | @PutMapping(value = "{id}") 51 | public ResponseEntity editItem(@PathVariable final Long id, 52 | @RequestBody final ItemDto itemDto){ 53 | Item editedItem = itemService.editItem(id, Item.from(itemDto)); 54 | return new ResponseEntity<>(ItemDto.from(editedItem), HttpStatus.OK); 55 | } 56 | } 57 | -------------------------------------------------------------------------------- /pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 4.0.0 5 | 6 | org.springframework.boot 7 | spring-boot-starter-parent 8 | 2.3.5.RELEASE 9 | 10 | 11 | com.codeforgeyt 12 | one-to-many-web-service 13 | 0.0.1-SNAPSHOT 14 | one-to-many-web-service 15 | Demo project for Spring Boot 16 | 17 | 18 | 1.8 19 | 20 | 21 | 22 | 23 | org.springframework.boot 24 | spring-boot-starter-data-jpa 25 | 26 | 27 | org.springframework.boot 28 | spring-boot-starter-web 29 | 30 | 31 | de.codecentric 32 | spring-boot-admin-starter-client 33 | 2.3.0 34 | 35 | 36 | 37 | io.springfox 38 | springfox-boot-starter 39 | 3.0.0 40 | 41 | 42 | com.h2database 43 | h2 44 | runtime 45 | 46 | 47 | org.projectlombok 48 | lombok 49 | true 50 | 51 | 52 | org.springframework.boot 53 | spring-boot-starter-test 54 | test 55 | 56 | 57 | org.junit.vintage 58 | junit-vintage-engine 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | org.springframework.boot 68 | spring-boot-maven-plugin 69 | 70 | 71 | 72 | 73 | 74 | -------------------------------------------------------------------------------- /src/main/java/com/codeforgeyt/onetomanywebservice/service/CartService.java: -------------------------------------------------------------------------------- 1 | package com.codeforgeyt.onetomanywebservice.service; 2 | 3 | import com.codeforgeyt.onetomanywebservice.model.Cart; 4 | import com.codeforgeyt.onetomanywebservice.model.Item; 5 | import com.codeforgeyt.onetomanywebservice.model.exception.CartNotFoundException; 6 | import com.codeforgeyt.onetomanywebservice.model.exception.ItemIsAlreadyAssignedException; 7 | import com.codeforgeyt.onetomanywebservice.repository.CartRepository; 8 | import org.springframework.beans.factory.annotation.Autowired; 9 | import org.springframework.stereotype.Service; 10 | 11 | import javax.transaction.Transactional; 12 | import java.util.List; 13 | import java.util.Objects; 14 | import java.util.stream.Collectors; 15 | import java.util.stream.StreamSupport; 16 | 17 | @Service 18 | public class CartService { 19 | 20 | private final CartRepository cartRepository; 21 | private final ItemService itemService; 22 | 23 | @Autowired 24 | public CartService(CartRepository cartRepository, ItemService itemService) { 25 | this.cartRepository = cartRepository; 26 | this.itemService = itemService; 27 | } 28 | 29 | public Cart addCart(Cart cart){ 30 | return cartRepository.save(cart); 31 | } 32 | 33 | public List getCarts(){ 34 | return StreamSupport 35 | .stream(cartRepository.findAll().spliterator(), false) 36 | .collect(Collectors.toList()); 37 | } 38 | 39 | public Cart getCart(Long id){ 40 | return cartRepository.findById(id).orElseThrow(() -> 41 | new CartNotFoundException(id)); 42 | } 43 | 44 | public Cart deleteCart(Long id){ 45 | Cart cart = getCart(id); 46 | cartRepository.delete(cart); 47 | return cart; 48 | } 49 | 50 | @Transactional 51 | public Cart editCart(Long id, Cart cart){ 52 | Cart cartToEdit = getCart(id); 53 | cartToEdit.setName(cart.getName()); 54 | return cartToEdit; 55 | } 56 | 57 | @Transactional 58 | public Cart addItemToCart(Long cartId, Long itemId){ 59 | Cart cart = getCart(cartId); 60 | Item item = itemService.getItem(itemId); 61 | if(Objects.nonNull(item.getCart())){ 62 | throw new ItemIsAlreadyAssignedException(itemId, 63 | item.getCart().getId()); 64 | } 65 | cart.addItem(item); 66 | item.setCart(cart); 67 | return cart; 68 | } 69 | 70 | @Transactional 71 | public Cart removeItemFromCart(Long cartId, Long itemId){ 72 | Cart cart = getCart(cartId); 73 | Item item = itemService.getItem(itemId); 74 | cart.removeItem(item); 75 | return cart; 76 | } 77 | } 78 | -------------------------------------------------------------------------------- /src/main/java/com/codeforgeyt/onetomanywebservice/controller/CartController.java: -------------------------------------------------------------------------------- 1 | package com.codeforgeyt.onetomanywebservice.controller; 2 | 3 | import com.codeforgeyt.onetomanywebservice.model.Cart; 4 | import com.codeforgeyt.onetomanywebservice.model.dto.CartDto; 5 | import com.codeforgeyt.onetomanywebservice.model.dto.ItemDto; 6 | import com.codeforgeyt.onetomanywebservice.service.CartService; 7 | import org.springframework.beans.factory.annotation.Autowired; 8 | import org.springframework.http.HttpStatus; 9 | import org.springframework.http.ResponseEntity; 10 | import org.springframework.web.bind.annotation.*; 11 | 12 | import java.util.List; 13 | import java.util.stream.Collectors; 14 | 15 | @RestController 16 | @RequestMapping("/carts") 17 | public class CartController { 18 | 19 | private final CartService cartService; 20 | 21 | @Autowired 22 | public CartController(CartService cartService) { 23 | this.cartService = cartService; 24 | } 25 | 26 | @PostMapping 27 | public ResponseEntity addCart(@RequestBody final CartDto cartDto){ 28 | Cart cart = cartService.addCart(Cart.from(cartDto)); 29 | return new ResponseEntity<>(CartDto.from(cart), HttpStatus.OK); 30 | } 31 | 32 | @GetMapping 33 | public ResponseEntity> getCarts(){ 34 | List carts = cartService.getCarts(); 35 | List cartsDto = carts.stream().map(CartDto::from).collect(Collectors.toList()); 36 | return new ResponseEntity<>(cartsDto, HttpStatus.OK); 37 | } 38 | 39 | @GetMapping(value = "{id}") 40 | public ResponseEntity getCart(@PathVariable final Long id){ 41 | Cart cart = cartService.getCart(id); 42 | return new ResponseEntity<>(CartDto.from(cart), HttpStatus.OK); 43 | } 44 | 45 | @DeleteMapping(value = "{id}") 46 | public ResponseEntity deleteCart(@PathVariable final Long id){ 47 | Cart cart = cartService.deleteCart(id); 48 | return new ResponseEntity<>(CartDto.from(cart), HttpStatus.OK); 49 | } 50 | 51 | @PutMapping(value = "{id}") 52 | public ResponseEntity editCart(@PathVariable final Long id, 53 | @RequestBody final CartDto cartDto){ 54 | Cart cart = cartService.editCart(id, Cart.from(cartDto)); 55 | return new ResponseEntity<>(CartDto.from(cart), HttpStatus.OK); 56 | } 57 | 58 | @PostMapping(value = "{cartId}/items/{itemId}/add") 59 | public ResponseEntity addItemToCart(@PathVariable final Long cartId, 60 | @PathVariable final Long itemId){ 61 | Cart cart = cartService.addItemToCart(cartId, itemId); 62 | return new ResponseEntity<>(CartDto.from(cart), HttpStatus.OK); 63 | } 64 | 65 | @DeleteMapping(value = "{cartId}/items/{itemId}/remove") 66 | public ResponseEntity removeItemFromCart(@PathVariable final Long cartId, 67 | @PathVariable final Long itemId){ 68 | Cart cart = cartService.removeItemFromCart(cartId, itemId); 69 | return new ResponseEntity<>(CartDto.from(cart), HttpStatus.OK); 70 | } 71 | } 72 | --------------------------------------------------------------------------------