PROJECT/GDSC 프로젝트 트랙 : 물품 대여 서비스

[SpringBoot] 특정 물품 정보 조회 API 구현

yeonee911 2024. 8. 14. 11:26

~~뉴진스 플레이리스트 들으며 작업 중~~


1. 목표🎯

/item/{itemId}로 접근했을 때, itemId에 해당하는 물품의 정보를 불러오고자 한다. 

response에는 물품 번호(itemId), 물품 대여 상태(itemStatus), 물품 별점(itemReiview) 총 3개의 정보를 포함한다.

 

 

2. 기능 명세서📜

Name Method URI Domain AuthZ
(특정) 물품 정보 조회 GET /item/{itemId} item MEMBER

 

 

3. 코드 작성💻

3.1 ItemController

@RestController
@RequestMapping("/item")
@RequiredArgsConstructor
public class ItemController {

    private final ItemService itemService;

    // 특정 물품 정보 조회
    @PreAuthorize("hasRole('ADMIN') or hasRole('MEMBER')")
    @GetMapping("/{itemId}")
    public ItemDetailResponse getItemDetail(@PathVariable Long itemId){
       Item item = itemService.getItemById(itemId);
       return ItemDetailResponse.from(item);
    }

}

- 관리자와 학생 모두 가능하도록 했다. 

 

3.2 ItemService

@Service
@RequiredArgsConstructor
@Transactional(readOnly = true)
public class ItemService {

    private final ItemRepository itemRepository;
    
    /**
     * 특정 물품 조회
     */
    public Item getItemById(Long itemId) {
       return itemRepository.findById(itemId)
          .orElseThrow(()->new CustomException(ITEM_NOT_FOUND));
    }
}

- 먼저 itemId에 해당하는 물품이 존재하는지 검사한다. 

- 없을 경우 ITEM_NOT_FOUND라는 커스텀 예외를 발생시킴. 상태코드는 404(Not Found)로 정의해뒀다

// 404 NOT_FOUND
ITEM_NOT_FOUND(HttpStatus.NOT_FOUND, "존재하지 않는 물품입니다."),

 

3.3 ItemDetailResponse

package mango.rentalsystem.domain.item.dto.response;

import mango.rentalsystem.domain.item.domain.Item;
import mango.rentalsystem.domain.item.domain.ItemStatus;

public record ItemDetailResponse (
    Long itemId,
    ItemStatus itemStatus,
    Double itemReview
){
    public static ItemDetailResponse from (Item item) {
       return new ItemDetailResponse(
          item.getId(),
          item.getItemStatus(),
          item.getItemReview()
       );
    }
}

 

 

4. 결과

한 번에 성공!!


카테고리 조회 기능과 로직이 똑같아서 쉽게 구현할 수 있었다!

근데 티스토리 글 미리미리 써둘 껄...

이때까지 작업한 category/customException부분도 글 쓰고 싶은데, 그럼 티스토리에 개발 순서가 뒤죽박죽이 되어버린닼큐ㅠ