Skip to content

Commit

Permalink
create POST carts/{username}/items
Browse files Browse the repository at this point in the history
  • Loading branch information
naruepracht-s committed Mar 24, 2024
1 parent b0ad55c commit 9e786ed
Show file tree
Hide file tree
Showing 8 changed files with 87 additions and 13 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@

import java.math.BigDecimal;
import java.util.List;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
Expand Down
12 changes: 4 additions & 8 deletions kbazaar/src/main/java/com/kampus/kbazaar/cart/Cart.java
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
package com.kampus.kbazaar.cart;

import com.kampus.kbazaar.product.Product;
import com.kampus.kbazaar.shopper.Shopper;
import jakarta.persistence.*;
import lombok.AllArgsConstructor;
import lombok.Data;
Expand All @@ -18,11 +16,9 @@ public class Cart {
@Column(name = "id")
private Integer id;

@OneToOne
@JoinColumn(name = "shopper_id", referencedColumnName = "id")
private Shopper shopper;
@Column(name = "shopperid")
private Long shopperId;

@OneToMany
@JoinColumn(name = "product_id", referencedColumnName = "id")
private Product[] products;
@Column(name = "quantity")
private int quantity;
}
12 changes: 12 additions & 0 deletions kbazaar/src/main/java/com/kampus/kbazaar/cart/CartController.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.kampus.kbazaar.cart;

import com.kampus.kbazaar.promotion.ApplyCodeRequest;
import io.swagger.v3.oas.annotations.Operation;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
Expand All @@ -25,4 +26,15 @@ public ResponseEntity<ApplyCodeResponse> applyCode(
@PathVariable("username") String username, @RequestBody ApplyCodeRequest request) {
return new ResponseEntity<>(cartService.applyCode(username, request), HttpStatus.OK);
}

@Operation(summary = "add item to carts")
@PostMapping("/carts/{username}/items")
public ResponseEntity<CreateCartResponse> createCart(
@PathVariable(name = "username") String userName,
@RequestBody CartRequest cartRequest) {

CreateCartResponse cartResponse = cartService.createCart(userName, cartRequest);

return ResponseEntity.status(HttpStatus.CREATED).body(cartResponse);
}
}
Original file line number Diff line number Diff line change
@@ -1,12 +1,11 @@
package com.kampus.kbazaar.cart;

import jakarta.persistence.*;
import java.math.BigDecimal;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.math.BigDecimal;

@Entity(name = "CartDetail")
@Data
@AllArgsConstructor
Expand Down Expand Up @@ -35,5 +34,4 @@ public class CartDetail {

@Column(name = "finalPrice")
private BigDecimal finalPrice;

}
26 changes: 26 additions & 0 deletions kbazaar/src/main/java/com/kampus/kbazaar/cart/CartRepository.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
package com.kampus.kbazaar.cart;

import java.util.List;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;

@Repository
public interface CartRepository extends JpaRepository<Cart, Long> {

String sqlCart =
"SELECT "
+ "c.id AS cart_id, "
+ "p.name AS product_name, "
+ "s.username AS user_name "
+ "FROM "
+ "cart c "
+ "INNER JOIN product p ON c.productid = p.id "
+ "INNER JOIN shopper s ON c.shopperid = s.id "
+ "WHERE "
+ "c.shopperid = :shopperId";

@Query(value = sqlCart, nativeQuery = true)
public List<Object[]> findCartDetailById(@Param("shopperId") Long shopperId);
}
13 changes: 13 additions & 0 deletions kbazaar/src/main/java/com/kampus/kbazaar/cart/CartRequest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package com.kampus.kbazaar.cart;

import jakarta.validation.constraints.Min;
import jakarta.validation.constraints.NotNull;
import lombok.Data;

@Data
public class CartRequest {
@NotNull private String sku;

@Min(value = 1, message = "QTY must be greater than or equal to 0")
private Integer qty;
}
24 changes: 23 additions & 1 deletion kbazaar/src/main/java/com/kampus/kbazaar/cart/CartService.java
Original file line number Diff line number Diff line change
Expand Up @@ -16,10 +16,15 @@ public class CartService {
private final PromotionRepository promotionRepository;
private final ShopperRepository shopperRepository;

private final CartRepository cartRepository;

public CartService(
PromotionRepository promotionRepository, ShopperRepository shopperRepository) {
PromotionRepository promotionRepository,
ShopperRepository shopperRepository,
CartRepository cartRepository) {
this.promotionRepository = promotionRepository;
this.shopperRepository = shopperRepository;
this.cartRepository = cartRepository;
}

// story_6
Expand Down Expand Up @@ -47,4 +52,21 @@ public ApplyCodeResponse applyCode(String username, ApplyCodeRequest request) {
throw new BadRequestException("Username not found");
}
}

public CreateCartResponse createCart(String userName, CartRequest cartRequest) {
Optional<Shopper> shopper = shopperRepository.findByUsername(userName);
if (shopper.isPresent()) {

CreateCartResponse response = new CreateCartResponse();
Cart cart = new Cart();
cart.setShopperId(shopper.get().getId());
cart.setQuantity(cartRequest.getQty());
cartRepository.save(cart);

response.setCartId(cart.getId());
return response;
} else {
throw new BadRequestException("Create cart failed");
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package com.kampus.kbazaar.cart;

import lombok.Data;

@Data
public class CreateCartResponse {
private Integer cartId;
}

0 comments on commit 9e786ed

Please sign in to comment.