상품 수정
1. 상품 조회
- 상품을 수정하려면 해당 상품을 불러와야 함
- 따라서, ItemService 에 상품 조회 메소드 추가 (조회 기능이므로 읽기 전용으로 불러옴)
- Transactional(readOnly = true) 에 대한 궁금증 (참고) - item 엔티티와 img 정보 엔티티를 itemFormDto 객체로 변환 후 반환하는 조회 기능
2. 상품 수정 페이지 Controller
- 상품 등록 페이지를 동일하게 사용 ("저장" 버튼을 "수정" 버튼으로 출력)
- 수정 대상 상품의 Id 값을 포함한 Get URL 요청으로 상품 수정 페이지를 요청
- 해당 상품을 조회한 뒤 itemFormDto 객체를 기반으로 상품 수정 페이지 생성 및 반환
// "/admin/item/{값}" 형태로 URL 요청이 들어오면 itemId 변수에 값을 저장
// {값} 부분은 다른 Controller 매핑 패턴을 모두 조회한 후에 없으면 조회됨
@GetMapping(value = "/admin/item/{itemId}")
public String itemDtl(@PathVariable("itemId") Long itemId, Model model) {
- 상품 수정 페이지
- /admin/item/{상품 id}
3. ItemImgService 수정
- 상품 이미지를 수정한 경우, 기존의 이미지 정보 객체를 불러옴 (조회)
- 기존 이미지 파일이 존재한다면 삭제 (존재하지 않는다면 이미지를 추가한 것)
- 수정한 이미지 파일을 fileService.uploadFile() 메소드를 통해 업로드
- itemImgRepository.save() 가 아닌 savedItemImg.updateItemImg() 메소드로 객체를 수정
- 변경 감지에 대한 궁금증 (참고)
- 상품 수정 페이지에서 기존 이미지 파일을 수정하지 않았다면 "null" 객체로 넘어옴 (상품 이미지 라벨에는 이름이 표시되어 있지만 파일이 등록된 것은 아님)
4. 상품 업데이트 로직
- Item Entity 클래스에 업데이트 로직 생성
- 엔티티 클래스에 로직을 추가한다면 좀 더 객체지향적이고 코드 재활용이 가능, 또한 변경 포인트를 한군데에서 관리할 수 있음
5. ItemService 수정
- 상품 Id 를 이용하여 기존의 상품 Entity 객체를 불러온 뒤, Post 입력값으로 들어온 상품 정보로 수정
- itemImgService.updateItemImg() 메소드를 이용하여 상품 이미지 수정
6. 상품 수정 Controller
- 상품 등록 Controller 과 거의 동일 (itemService. saveItem -> updateItem)
7. 상품 등록 동작 과정
- 상품 등록은 save() 메소드만을 수행
- 상품 수정은 조회 -> update() 메소드를 수행 (변경 감지 이용)
① "ADMIN" 권한을 가진 아이디로 상품 수정 페이지 Get 요청 ("/admin/item/{itemId}")
② Item Controller 에서 itemService.getItemDtl(itemId) 수행하여 해당 상품 조회
③ Item Controller 에서 상품 수정 페이지 반환하면서 해당 상품 Dto 객체 넘김
④ 상품 수정 페이지에서 수정한 후 "수정" (POST 요청)
⑤ Item Controller 에서 입력값을 검증하고 itemService.updateItem() 메소드를 수행
- 이 때, 파라미터는 입력받은 itemFormDto 객체와 이미지 정보를 담고있는 itemImgFileList 를 넘김
⑥ itemService 에서 Item 객체를 조회하여 불러온 뒤 item.updateItem(itemFormDto) 수행
⑦ itemService 에서 itemImgService.updateItemImg() 메소드 수행
- 이 때, 파라미터는 "상품 이미지의 id", "상품 이미지 파일"
⑧ itemImgService 에서 기존 이미지 파일 삭제 후 savedItemImg.updateItemImg () 수행
'JAVA > SpringBoot Shoppingmall' 카테고리의 다른 글
[VSCODE] SpringBoot 쇼핑몰(MVN) 상품 관리 - 상품 목록 페이지 (0) | 2022.06.27 |
---|---|
[VSCODE] SpringBoot 쇼핑몰(MVN) 상품 관리 - 상품 목록 조회 Querydsl (0) | 2022.06.27 |
[VSCODE] SpringBoot 쇼핑몰(MVN) 상품 등록하기 - Controller, Service, Repository, Test (0) | 2022.06.27 |
[VSCODE] SpringBoot 쇼핑몰(MVN) 상품 등록하기 - Entity, DTO, View (0) | 2022.06.27 |
[VSCODE] JPA Auditing (0) | 2022.06.27 |