CartItemController.java
package com.learning.yasminishop.cart;
import com.learning.yasminishop.cart.dto.request.CartItemIds;
import com.learning.yasminishop.cart.dto.request.CartItemRequest;
import com.learning.yasminishop.cart.dto.request.CartItemUpdate;
import com.learning.yasminishop.cart.dto.response.CartItemResponse;
import com.learning.yasminishop.common.dto.APIResponse;
import jakarta.validation.Valid;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.HttpStatus;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@RestController
@RequestMapping("/carts")
@RequiredArgsConstructor
@Slf4j
public class CartItemController {
private final CartItemService cartItemService;
@PostMapping
@ResponseStatus(HttpStatus.CREATED)
@PreAuthorize("hasRole('USER')")
public APIResponse<CartItemResponse> createCart(@Valid @RequestBody CartItemRequest cartItemRequest) {
CartItemResponse cartItemResponse = cartItemService.create(cartItemRequest);
return APIResponse.<CartItemResponse>builder()
.result(cartItemResponse)
.build();
}
@GetMapping
@ResponseStatus(HttpStatus.OK)
@PreAuthorize("hasRole('USER')")
public APIResponse<List<CartItemResponse>> getAllCarts() {
List<CartItemResponse> cartItemResponses = cartItemService.getAll();
return APIResponse.<List<CartItemResponse>>builder()
.result(cartItemResponses)
.build();
}
@PutMapping("/{id}")
@ResponseStatus(HttpStatus.OK)
@PreAuthorize("hasRole('USER')")
public APIResponse<CartItemResponse> updateCart(@PathVariable String id, @Valid @RequestBody CartItemUpdate cartItemUpdate) {
CartItemResponse cartItemResponses = cartItemService.update(id, cartItemUpdate);
return APIResponse.<CartItemResponse>builder()
.result(cartItemResponses)
.build();
}
@DeleteMapping
@ResponseStatus(HttpStatus.OK)
@PreAuthorize("hasRole('USER')")
public APIResponse<String> deleteCart(@Valid @RequestBody CartItemIds cartItemIds) {
cartItemService.delete(cartItemIds.getIds());
return APIResponse.<String>builder()
.message("Cart items deleted successfully")
.build();
}
@GetMapping("/get-by-ids")
@ResponseStatus(HttpStatus.OK)
@PreAuthorize("hasRole('USER')")
public APIResponse<List<CartItemResponse>> getCartItemsByIds(@RequestParam List<String> ids) {
List<CartItemResponse> cartItemResponses = cartItemService.getCartByIds(ids);
return APIResponse.<List<CartItemResponse>>builder()
.result(cartItemResponses)
.build();
}
}