Skip to content

Commit

Permalink
added fixes after review
Browse files Browse the repository at this point in the history
  • Loading branch information
fmIst0 committed Sep 18, 2023
1 parent 4ee8a78 commit b697397
Show file tree
Hide file tree
Showing 7 changed files with 49 additions and 43 deletions.
14 changes: 9 additions & 5 deletions src/main/java/com/bookstore/controller/OrderController.java
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ public class OrderController {
public OrderResponseDto createOrder(Authentication authentication,
@RequestBody @Valid OrderCreateDto orderCreateDto) {
User user = (User) authentication.getPrincipal();
return orderService.saveOrderFromCart(user.getId(), orderCreateDto);
return orderService.placeOrder(user.getId(), orderCreateDto);
}

@GetMapping
Expand All @@ -56,18 +56,22 @@ public List<OrderResponseDto> getAllUsersOrders(Authentication authentication,
@PreAuthorize("hasRole('USER')")
@Operation(summary = "Retrieve all OrderItems for a specific order",
description = "Retrieve all OrderItems for a specific order")
public List<OrderItemResponseDto> getAllOrderItemsByOrderId(@PathVariable Long orderId,
public List<OrderItemResponseDto> getAllOrderItemsByOrderId(Authentication authentication,
@PathVariable Long orderId,
Pageable pageable) {
return orderService.getAllOrderItemsByOrderId(orderId, pageable);
User user = (User) authentication.getPrincipal();
return orderService.getAllOrderItemsByOrderId(orderId, user.getId(), pageable);
}

@GetMapping(value = "/{orderId}/items/{itemId}")
@PreAuthorize("hasRole('USER')")
@Operation(summary = "Retrieve a specific OrderItem within an order",
description = "Retrieve a specific OrderItem within an order")
public OrderItemResponseDto getOrderItemWithinAnOrder(@PathVariable Long orderId,
public OrderItemResponseDto getOrderItemWithinAnOrder(Authentication authentication,
@PathVariable Long orderId,
@PathVariable Long itemId) {
return orderService.getOrderItemWithinAnOrder(orderId, itemId);
User user = (User) authentication.getPrincipal();
return orderService.getOrderItemWithinAnOrder(orderId, itemId, user.getId());
}

@PatchMapping(value = "/{id}")
Expand Down
20 changes: 0 additions & 20 deletions src/main/java/com/bookstore/mapper/OrderMapper.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,8 @@
import com.bookstore.dto.order.OrderResponseDto;
import com.bookstore.model.Order;
import com.bookstore.model.ShoppingCart;
import java.math.BigDecimal;
import org.mapstruct.AfterMapping;
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.MappingTarget;

@Mapper(config = MapperConfig.class, uses = OrderItemMapper.class)
public interface OrderMapper {
Expand All @@ -21,21 +18,4 @@ public interface OrderMapper {
@Mapping(target = "status", expression = "java(com.bookstore.model.Order.Status.PENDING)")
@Mapping(target = "orderDate", expression = "java(java.time.LocalDateTime.now())")
Order shoppingCartToOrder(ShoppingCart shoppingCart);

@AfterMapping
default void setOrderTotal(@MappingTarget Order order, ShoppingCart shoppingCart) {
order.setTotal(getTotal(shoppingCart));
}

private BigDecimal getTotal(ShoppingCart shoppingCart) {
return shoppingCart.getCartItems()
.stream()
.map(cartItem -> cartItem.getBook()
.getPrice()
.multiply(
BigDecimal.valueOf(cartItem.getQuantity())
)
)
.reduce(BigDecimal.ZERO, BigDecimal::add);
}
}
5 changes: 0 additions & 5 deletions src/main/java/com/bookstore/model/Order.java
Original file line number Diff line number Diff line change
Expand Up @@ -16,10 +16,8 @@
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.Set;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
import org.hibernate.annotations.SQLDelete;
import org.hibernate.annotations.Where;

Expand All @@ -28,7 +26,6 @@
@SQLDelete(sql = "UPDATE orders SET is_deleted=true WHERE id=?")
@Where(clause = "is_deleted=false")
@Entity
@EqualsAndHashCode
@Table(name = "orders")
public class Order {
@Id
Expand All @@ -46,8 +43,6 @@ public class Order {
private LocalDateTime orderDate;
@Column(name = "shipping_address", nullable = false)
private String shippingAddress;
@ToString.Exclude
@EqualsAndHashCode.Exclude
@OneToMany(mappedBy = "order", cascade = CascadeType.ALL, orphanRemoval = true)
private Set<OrderItem> orderItems;
@Column(name = "is_deleted", nullable = false)
Expand Down
13 changes: 13 additions & 0 deletions src/main/java/com/bookstore/model/ShoppingCart.java
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
import jakarta.persistence.OneToOne;
import jakarta.persistence.PrimaryKeyJoinColumn;
import jakarta.persistence.Table;
import java.math.BigDecimal;
import java.util.Set;
import lombok.EqualsAndHashCode;
import lombok.Getter;
Expand Down Expand Up @@ -37,4 +38,16 @@ public void addCartItemToSet(CartItem cartItem) {
cartItems.add(cartItem);
cartItem.setShoppingCart(this);
}

public BigDecimal getTotal() {
return this.getCartItems()
.stream()
.map(cartItem -> cartItem.getBook()
.getPrice()
.multiply(
BigDecimal.valueOf(cartItem.getQuantity())
)
)
.reduce(BigDecimal.ZERO, BigDecimal::add);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,18 @@
import org.springframework.data.jpa.repository.Query;

public interface OrderItemRepository extends JpaRepository<OrderItem, Long> {
List<OrderItem> findOrderItemsByOrderId(Long orderId, Pageable pageable);
@Query(value = "FROM OrderItem oi "
+ "WHERE oi.order.id = :orderId "
+ "AND oi.order.user.id = :userId")
List<OrderItem> findOrderItemsByOrderIdAndByUserId(Long orderId,
Long userId,
Pageable pageable);

@Query(value = "FROM OrderItem oi "
+ "WHERE oi.order.id = :orderId "
+ "AND oi.id = :itemId")
OrderItem findOrderItemByOrderIdAndByItemId(Long orderId, Long itemId);
+ "AND oi.id = :itemId "
+ "AND oi.order.user.id = :userId")
OrderItem findOrderItemByOrderIdAndByItemIdAndByUserId(Long orderId,
Long itemId,
Long userId);
}
8 changes: 5 additions & 3 deletions src/main/java/com/bookstore/service/OrderService.java
Original file line number Diff line number Diff line change
Expand Up @@ -8,13 +8,15 @@
import org.springframework.data.domain.Pageable;

public interface OrderService {
OrderResponseDto saveOrderFromCart(Long userId, OrderCreateDto orderCreateDto);
OrderResponseDto placeOrder(Long userId, OrderCreateDto orderCreateDto);

void updateOrderStatus(Long id, OrderUpdateDto orderUpdateDto);

OrderItemResponseDto getOrderItemWithinAnOrder(Long orderId, Long itemId);
OrderItemResponseDto getOrderItemWithinAnOrder(Long orderId, Long itemId, Long userId);

List<OrderResponseDto> getAllUserOrders(Long userId, Pageable pageable);

List<OrderItemResponseDto> getAllOrderItemsByOrderId(Long orderId, Pageable pageable);
List<OrderItemResponseDto> getAllOrderItemsByOrderId(Long orderId,
Long userId,
Pageable pageable);
}
18 changes: 11 additions & 7 deletions src/main/java/com/bookstore/service/impl/OrderServiceImpl.java
Original file line number Diff line number Diff line change
Expand Up @@ -31,16 +31,17 @@ public class OrderServiceImpl implements OrderService {
private final OrderItemRepository orderItemRepository;

@Override
public OrderResponseDto saveOrderFromCart(Long userId, OrderCreateDto orderCreateDto) {
public OrderResponseDto placeOrder(Long userId, OrderCreateDto orderCreateDto) {
ShoppingCart shoppingCart = shoppingCartService.getShoppingCartByUserId(userId);
Order newOrder = orderMapper.shoppingCartToOrder(shoppingCart);
newOrder.setTotal(shoppingCart.getTotal());
newOrder.setShippingAddress(orderCreateDto.getShippingAddress());

Order savedOrder = orderRepository.save(newOrder);

Set<OrderItem> orderItemSet = getOrderItemsFromCart(shoppingCart);
setOrderForOrderItems(orderItemSet, savedOrder);
savedOrder.setOrderItems(getSavedOrderItems(orderItemSet));
savedOrder.setOrderItems(saveOrderItems(orderItemSet));
shoppingCartService.cleanShoppingCart(shoppingCart);
return orderMapper.toDto(savedOrder);
}
Expand All @@ -53,9 +54,10 @@ public void updateOrderStatus(Long orderId, OrderUpdateDto orderUpdateDto) {
}

@Override
public OrderItemResponseDto getOrderItemWithinAnOrder(Long orderId, Long itemId) {
public OrderItemResponseDto getOrderItemWithinAnOrder(Long orderId, Long itemId, Long userId) {
return orderItemMapper.toDto(
orderItemRepository.findOrderItemByOrderIdAndByItemId(orderId, itemId)
orderItemRepository
.findOrderItemByOrderIdAndByItemIdAndByUserId(orderId, itemId, userId)
);
}

Expand All @@ -68,8 +70,10 @@ public List<OrderResponseDto> getAllUserOrders(Long userId, Pageable pageable) {
}

@Override
public List<OrderItemResponseDto> getAllOrderItemsByOrderId(Long orderId, Pageable pageable) {
return orderItemRepository.findOrderItemsByOrderId(orderId, pageable)
public List<OrderItemResponseDto> getAllOrderItemsByOrderId(Long orderId,
Long userId,
Pageable pageable) {
return orderItemRepository.findOrderItemsByOrderIdAndByUserId(orderId, userId, pageable)
.stream()
.map(orderItemMapper::toDto)
.toList();
Expand All @@ -86,7 +90,7 @@ private void setOrderForOrderItems(Set<OrderItem> orderItemSet, Order order) {
orderItemSet.forEach(orderItem -> orderItem.setOrder(order));
}

private Set<OrderItem> getSavedOrderItems(Set<OrderItem> orderItemSet) {
private Set<OrderItem> saveOrderItems(Set<OrderItem> orderItemSet) {
return orderItemSet.stream()
.map(orderItemRepository::save)
.collect(Collectors.toSet());
Expand Down

0 comments on commit b697397

Please sign in to comment.