-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathCartController.java
More file actions
93 lines (79 loc) · 3.52 KB
/
CartController.java
File metadata and controls
93 lines (79 loc) · 3.52 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
package com.ecommerce.controller;
import com.ecommerce.model.Cart;
import com.ecommerce.model.CartItem;
import com.ecommerce.service.CartService;
import com.ecommerce.dto.CartResponse;
import com.ecommerce.dto.AddItemRequest;
import com.ecommerce.dto.UpdateQuantityRequest;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.security.core.annotation.AuthenticationPrincipal;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@RestController
@RequestMapping("/api/cart")
public class CartController {
private final CartService cartService;
@Autowired
public CartController(CartService cartService) {
this.cartService = cartService;
}
@GetMapping
public ResponseEntity<CartResponse> getCart(@AuthenticationPrincipal UserDetails userDetails) {
Long userId = extractUserId(userDetails);
Cart cart = cartService.getCartByUserId(userId);
return ResponseEntity.ok(CartResponse.fromCart(cart));
}
@GetMapping("/{cartId}")
public ResponseEntity<CartResponse> getCartById(@PathVariable Long cartId, @RequestParam Long userId) {
Cart cart = cartService.getCartByUserId(userId);
if (!cart.getId().equals(cartId)) {
cart = cartService.getCartByUserId(userId);
}
return ResponseEntity.ok(CartResponse.fromCart(cart));
}
@PostMapping("/{cartId}/items")
public ResponseEntity<?> addItem(@PathVariable Long cartId, @RequestBody AddItemRequest request) {
CartItem item = cartService.addItemToCart(cartId, request.getProductId(), request.getQuantity());
if (item == null) {
return ResponseEntity.badRequest().body("Failed to add item");
}
return ResponseEntity.ok(item);
}
@PutMapping("/{cartId}/items/{itemId}")
public ResponseEntity<String> updateQuantity(@PathVariable Long cartId, @PathVariable Long itemId,
@RequestBody UpdateQuantityRequest request) {
cartService.updateItemQuantity(cartId, itemId, request.getQuantity());
return ResponseEntity.ok("Quantity updated successfully");
}
@GetMapping("/search")
public ResponseEntity<List<Cart>> searchCarts(@RequestParam String query) {
List<Cart> carts = cartService.searchCarts(query);
return ResponseEntity.ok(carts);
}
@DeleteMapping
public ResponseEntity<Void> clearCart(@AuthenticationPrincipal UserDetails userDetails) {
Long userId = extractUserId(userDetails);
Cart cart = cartService.getCartByUserId(userId);
cartService.clearCart(cart.getId());
return ResponseEntity.noContent().build();
}
@DeleteMapping("/{cartId}/items/{itemId}")
public ResponseEntity<?> removeItem(@PathVariable Long cartId, @PathVariable Long itemId) {
try {
cartService.removeItemFromCart(cartId, itemId);
return ResponseEntity.ok().body("{\"message\": \"Item removed\"}");
} catch (Exception e) {
return ResponseEntity.status(500).body("Error removing item");
}
}
@PostMapping("/{cartId}/sync")
public ResponseEntity<Void> syncInventory(@PathVariable Long cartId) {
cartService.syncCartWithInventory(cartId);
return ResponseEntity.ok().build();
}
private Long extractUserId(UserDetails userDetails) {
return Long.parseLong(userDetails.getUsername());
}
}