코드 그라데이션

shop 구현 (12) 상품 상세 페이지 본문

Spring/SpringShop

shop 구현 (12) 상품 상세 페이지

완벽한 장면 2023. 7. 20. 03:39

상세페이지는 Item 하나만 보여주면 되는 것이니까 여러개 들고 올 필요 없이

ItemService

  @Transactional(readOnly = true)
  public ItemFormDto getItemDtl(Long itemId){
    List<ItemImg> itemImgList = itemImgRepository.findByItemIdOrderByIdAsc(itemId);
    // DB에서 데이터를 가지고 옵니다.
    List<ItemImgDto> itemImgDtoList = new ArrayList<>();

    for (ItemImg itemImg : itemImgList) {
      ItemImgDto itemImgDto = ItemImgDto.of(itemImg);
      itemImgDtoList.add(itemImgDto);
    }

    Item item = itemRepository.findById(itemId)
        .orElseThrow(EntityNotFoundException::new);
        
    ItemFormDto itemFormDto = ItemFormDto.of(item);
    itemFormDto.setItemImgDtoList(itemImgDtoList);
    return itemFormDto;
  }

 설정이 아이템 하나에 여러 이미지(7개)를 등록할 수 있었으므로 

public ItemFormDto getItemDtl(Long itemId){
    List<ItemImg> itemImgList

받아오는 아이디는 하난데, 리턴은 List로 해주는 것이다.

 

ItemImg도 하나의 엔티티기 때문에 그대로 리턴해줄 수가 없어서 Dto로 매번 매핑해주는 게 필요

for (ItemImg itemImg : itemImgList) {
      ItemImgDto itemImgDto = ItemImgDto.of(itemImg);
      itemImgDtoList.add(itemImgDto);
    }

 

Item과 ItemImg를 묶어서 ItemFormDto에 넣는다.

// 아이템 이미지 가져오고

    for (ItemImg itemImg : itemImgList) {
      ItemImgDto itemImgDto = ItemImgDto.of(itemImg);
      itemImgDtoList.add(itemImgDto);
    }

 

// 아이템 가져와서 
    Item item = itemRepository.findById(itemId)
        .orElseThrow(EntityNotFoundException::new);
        

// 둘을 ItemFormDto에 묶어주는 과
    ItemFormDto itemFormDto = ItemFormDto.of(item);
    itemFormDto.setItemImgDtoList(itemImgDtoList);
    return itemFormDto;


Thymeleaf에서

T(~)는 

Enum 같은 것을 쓸 때 자바 클래스를 명시해야 하는 경우가 있다.

패키지 경로까지 같이 묶어줘야 인식한다.

 

 

728x90
Comments