Skip to content

Commit

Permalink
Merge pull request #41 from kea-dpang/feature-item
Browse files Browse the repository at this point in the history
Fix: add changeStock & delete increaseStock, decreaseStock.
  • Loading branch information
oo-ni authored Feb 2, 2024
2 parents 3f87226 + 57e2179 commit 5863a59
Show file tree
Hide file tree
Showing 6 changed files with 34 additions and 84 deletions.
41 changes: 15 additions & 26 deletions src/main/java/kea/dpang/item/controller/ItemController.java
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ public ResponseEntity<BaseResponse> createItem(@RequestBody ItemCreateDto itemCr
);
}

@GetMapping("/cardlist")
@GetMapping("/card/list")
@Operation(summary = "상품 카드 리스트 조회", description = "페이지 정보에 따라 상품 카드 리스트를 조회합니다.")
public ResponseEntity<SuccessResponse<List<ItemCardDto>>> getItemCard(Pageable pageable) {
List<ItemCardDto> items = itemService.getItemCard(pageable);
Expand All @@ -54,7 +54,7 @@ public ResponseEntity<SuccessResponse<List<ItemCardDto>>> getItemCard(Pageable p
);
}

@GetMapping("/managelist")
@GetMapping("/manage/list")
@Operation(summary = "상품 관리 리스트 조회", description = "페이지 정보에 따라 관리자용 상품 리스트를 조회합니다.")
public ResponseEntity<SuccessResponse<List<ItemManageListDto>>> getItemManageList(Pageable pageable) {
List<ItemManageListDto> items = itemService.getItemManageList(pageable);
Expand Down Expand Up @@ -87,7 +87,7 @@ public ResponseEntity<SuccessResponse<ItemResponseDto>> getItem(@PathVariable @P
);
}

@GetMapping("/popular")
@GetMapping("/popular/list")
@Operation(summary = "인기 상품 리스트 조회", description = "지정된 상품 ID 리스트에 대한 인기 상품 정보를 페이지 정보에 따라 조회합니다.")
public ResponseEntity<SuccessResponse<List<PopularItemDto>>> getPopularItems(@RequestParam List<Long> itemIdList, Pageable pageable) {
List<PopularItemDto> popularItems = itemService.getPopularItems();
Expand All @@ -109,11 +109,11 @@ public ResponseEntity<BaseResponse> updateItem(@PathVariable @Parameter(descript
);
}

@DeleteMapping("/{itemIds}")
@DeleteMapping("/{itemId}/list")
@Operation(summary = "상품 삭제", description = "상품 ID에 해당하는 상품 정보를 삭제합니다.")
public ResponseEntity<BaseResponse> deleteItem(@PathVariable @Parameter(description = "상품ID", example = "1") List<Long> itemIds) {
itemService.deleteItem(itemIds);
log.info("상품 정보 삭제 완료. 상품 ID 리스트: {}", itemIds);
public ResponseEntity<BaseResponse> deleteItem(@PathVariable @Parameter(description = "상품ID", example = "1") List<Long> itemId) {
itemService.deleteItem(itemId);
log.info("상품 정보 삭제 완료. 상품 ID 리스트: {}", itemId);
return new ResponseEntity<>(
new BaseResponse(HttpStatus.NO_CONTENT.value(), "상품이 삭제되었습니다."),
HttpStatus.NO_CONTENT
Expand All @@ -131,27 +131,16 @@ public ResponseEntity<SuccessResponse<Integer>> getStockQuantity(@PathVariable @
);
}

@PutMapping("/{itemId}/increase/{quantity}")
@Operation(summary = "재고 수량 증가", description = "재고 수량을 증가시킵니다.")
public ResponseEntity<SuccessResponse<StockManageDto>> increaseStock(
@PutMapping("/{itemId}/stock/{quantity}")
@Operation(summary = "재고 수량 변경", description = "재고 수량을 변경합니다.")
public ResponseEntity<SuccessResponse<StockManageDto>> changeStock(
@PathVariable @Parameter(description = "상품ID", example = "1") Long itemId,
@PathVariable @Parameter(description = "재고 수량 입력", example = "100") int quantity
) {
StockManageDto increaseStock = itemService.increaseStock(itemId, quantity);
log.info("재고 수량 증가 완료. 상품 ID: {}", itemId);
StockManageDto stockManageDto = itemService.changeStock(itemId, quantity);
log.info("재고 수량 변경 완료. 상품 ID: {}", itemId);
return new ResponseEntity<>(
new SuccessResponse<>(HttpStatus.OK.value(), "상품 재고 수량이 증가되었습니다.", increaseStock),
HttpStatus.OK
);
}

@PutMapping("/{itemId}/decrease/{quantity}")
@Operation(summary = "재고 수량 감소", description = "재고 수량을 감소시킵니다.")
public ResponseEntity<SuccessResponse<StockManageDto>> decreaseStock(@PathVariable @Parameter(description = "상품ID", example = "1") Long itemId, @PathVariable @Parameter(description = "재고 수량 입력", example = "100") int quantity) {
StockManageDto decreaseStock = itemService.decreaseStock(itemId, quantity);
log.info("재고 수량 감소 완료. 상품 ID: {}", itemId);
return new ResponseEntity<>(
new SuccessResponse<>(HttpStatus.OK.value(), "상품 재고 수량이 조회되었습니다.", decreaseStock),
new SuccessResponse<>(HttpStatus.OK.value(), "상품 재고 수량이 변경되었습니다.", stockManageDto),
HttpStatus.OK
);
}
Expand All @@ -170,7 +159,7 @@ public ResponseEntity<SuccessResponse<String>> getEventItemName(@RequestParam Lo

// 주문(Order)
@GetMapping("/inquiryItem")
@Operation(summary = "(BE) 상품 조회", description = "상품 정보를 조회합니다.")
@Operation(summary = "(BE) 상품 정보 조회", description = "상품 정보를 조회합니다.")
public ResponseEntity<SuccessResponse<ItemInquiryDto>> getInquiryItem(@RequestParam Long itemId) {
Item item = itemService.getItemInquiry(itemId);
ItemInquiryDto itemInquiryDto = new ItemInquiryDto(item);
Expand All @@ -182,7 +171,7 @@ public ResponseEntity<SuccessResponse<ItemInquiryDto>> getInquiryItem(@RequestPa

// 유저(User) - 장바구니 및 위시리스트에 전달할 상품 정보 리스트
@GetMapping("/cart/inquiryItem")
@Operation(summary = "(BE) 상품 정보 조회", description = "상품의 일부 정보를 조회합니다.")
@Operation(summary = "(BE) 상품 요약 정보 조회", description = "상품의 일부 정보를 조회합니다.")
public ResponseEntity<SuccessResponse<List<ItemSimpleListDto>>> getCartInquiryItem(@RequestParam List<Long> itemIds) {
List<ItemSimpleListDto> data = itemService.getCartItemsInquiry(itemIds);
return new ResponseEntity<>(
Expand Down
1 change: 1 addition & 0 deletions src/main/java/kea/dpang/item/dto/ItemCreateDto.java
Original file line number Diff line number Diff line change
Expand Up @@ -18,4 +18,5 @@ public class ItemCreateDto {
private int itemPrice;
private int stockQuantity;
private String itemImage;
private List<String> images;
}
24 changes: 7 additions & 17 deletions src/main/java/kea/dpang/item/entity/Item.java
Original file line number Diff line number Diff line change
Expand Up @@ -45,17 +45,14 @@ public class Item extends BaseEntity {
@Enumerated(EnumType.STRING)
private SubCategory subCategory;

// // 평점
// private float rating;

// 평균 평점
private float averageRating;

// 리뷰 리스트
@OneToMany(mappedBy = "itemId", cascade = CascadeType.ALL)
private List<Review> reviews;

// 이벤트 할인율
// 할인율
private int discountRate;

// 할인가
Expand All @@ -64,12 +61,6 @@ public class Item extends BaseEntity {
// 재고 수량
private int stockQuantity;

// // 최소 재고 수량
// private int minStock;

// // 최대 재고 수량
// private int maxStock;

// 상품 상세정보
@Column(length = 1000)
private String description;
Expand All @@ -93,6 +84,7 @@ public static Item from(ItemCreateDto dto) {
.itemPrice(dto.getItemPrice())
.stockQuantity(dto.getStockQuantity())
.itemImage(dto.getItemImage())
.images(dto.getImages())
.build();
}

Expand Down Expand Up @@ -122,20 +114,18 @@ public void updateInformation(ItemUpdateDto dto) {
this.category = dto.getCategory();
this.subCategory = dto.getSubCategory();
this.itemPrice = dto.getItemPrice();
this.discountRate = dto.getDiscountRate();
this.stockQuantity = dto.getStockQuantity();
this.itemImage = dto.getItemImage();
this.images = dto.getImages();
}

public void increaseStock(int quantity) {
this.stockQuantity += quantity;
}

public void decreaseStock(int quantity) {
if (this.stockQuantity < quantity) {
public void changeStock(int quantity) {
int newStockQuantity = this.stockQuantity + quantity;
if (newStockQuantity < 0) {
throw new IllegalArgumentException("Not enough stock");
}
this.stockQuantity -= quantity;
this.stockQuantity = newStockQuantity;
}
}

Original file line number Diff line number Diff line change
Expand Up @@ -11,5 +11,5 @@ public interface SellerServiceFeignClient {

// 판매처 이름을 받아오기 위한 API
@GetMapping("/api/seller/findName")
ResponseEntity<SuccessResponse<String>> getSeller (@RequestParam Long sellerId);
ResponseEntity<SuccessResponse<String>> getSeller (@RequestParam Long id);
}
22 changes: 5 additions & 17 deletions src/main/java/kea/dpang/item/service/ItemService.java
Original file line number Diff line number Diff line change
Expand Up @@ -76,21 +76,12 @@ public interface ItemService {
int getStockQuantity(Long itemId);

/**
* 주어진 ID에 해당하는 상품의 재고 수량을 증가시킵니다.
* 주어진 ID에 해당하는 상품의 재고 수량을 업데이트 합니다.
*
* @param itemId 재고 수량을 증가시킬 상품의 ID
* @param quantity 증가시킬 재고 수량
* @param itemId 재고 수량을 수정시킬 상품의 ID
* @param quantity 수정시킬 재고 수량
*/
StockManageDto increaseStock(Long itemId, int quantity);

/**
* 주어진 ID에 해당하는 상품의 재고 수량을 감소시킵니다.
*
* @param itemId 재고 수량을 감소시킬 상품의 ID
* @param quantity 감소시킬 재고 수량
*/
StockManageDto decreaseStock(Long itemId, int quantity);

StockManageDto changeStock(Long itemId, int quantity);

/* feign */
// 이벤트
Expand All @@ -99,14 +90,11 @@ public interface ItemService {
// 주문
Item getItemInquiry(Long itemId);

// 판매처
String getSellerName(Long SellerId);

// 사용자
/**
* 장바구니, 위시리스트 // 백엔드용 상품 리스트 조회
*
* @return 조회된 모든 상품 목록이 담긴 DTO 리스트
*/

List<ItemSimpleListDto> getCartItemsInquiry(List<Long> itemIds);
}
28 changes: 5 additions & 23 deletions src/main/java/kea/dpang/item/service/ItemServiceImpl.java
Original file line number Diff line number Diff line change
Expand Up @@ -121,26 +121,13 @@ public int getStockQuantity(Long itemId) {
return item.getStockQuantity();
}

// 재고 수량 증가
// 재고 수량 증감
@Override
@Transactional
public StockManageDto increaseStock(Long itemId, int quantity) {
public StockManageDto changeStock(Long itemId, int quantity) {
Item item = itemRepository.findById(itemId)
.orElseThrow(() -> new ItemNotFoundException(itemId));
item.increaseStock(quantity);
return StockManageDto.builder()
.stockQuantity(item.getStockQuantity())
.itemId(item.getItemId())
.build();
}

// 재고 수량 감소
@Override
@Transactional
public StockManageDto decreaseStock(Long itemId, int quantity) {
Item item = itemRepository.findById(itemId)
.orElseThrow(() -> new ItemNotFoundException(itemId));
item.decreaseStock(quantity);
item.changeStock(quantity);
return StockManageDto.builder()
.stockQuantity(item.getStockQuantity())
.itemId(item.getItemId())
Expand All @@ -149,6 +136,8 @@ public StockManageDto decreaseStock(Long itemId, int quantity) {

/* feign */
// 이벤트 - 상품명 조회
@Override
@Transactional
public String getItemName(Long itemId) {
return itemRepository.findById(itemId)
.orElseThrow(() -> new ItemNotFoundException(itemId)).getItemName();
Expand All @@ -162,13 +151,6 @@ public Item getItemInquiry(Long itemId) {
.orElseThrow(() -> new ItemNotFoundException(itemId));
}

// 판매처 - 판매처명 조회
@Override
@Transactional(readOnly = true)
public String getSellerName(Long sellerId) {
return sellerServiceFeignClient.getSeller(sellerId).getBody().getData();
}

// 장바구니, 위시리스트 - 상품 리스트 조회
@Override
@Transactional
Expand Down

0 comments on commit 5863a59

Please sign in to comment.