해당 포스팅에서는 상품 수정 기능의 흐름에 대해서 정리해 보고자 한다.
- Controller
- ItemService - 아이템 업데이트
- ItemImgService - 아이템 이미지 업데이트
- FileService - 파일 업로드
@PostMapping("/item/{itemId}")
public String itemUpdate(@Valid ItemFormDto itemFormDto, BindingResult bindingResult, Model model,
@RequestParam("itemImgFile") List<MultipartFile> itemImgFileList,
@RequestParam(value = "parent_cate_id", required = true) Long parentCateId,
@RequestParam(value = "child_cate_id", required = false) Long childCateId) throws Exception {
...
try {
Category category = categoryService.getCategory(parentCateId, childCateId);
itemFormDto.setCategory(category);
itemService.updateItem(itemFormDto, itemImgFileList);
} catch (Exception e) {
model.addAttribute("errorMessage", "상품 수정 중 에러가 발생하였습니다.");
model.addAttribute("categories", categoryService.getJsonCategories());
return "admin/item/itemForm";
}
return "redirect:/";
}
public Long updateItem(ItemFormDto itemFormDto, List<MultipartFile> itemImgFileList) throws Exception {
Item item = itemRepository.findById(itemFormDto.getId()).orElseThrow(EntityNotFoundException::new);
item.updateItem(itemFormDto);
List<Long> itemImgIds = itemFormDto.getItemImgIds();
for (int i = 0; i < itemImgFileList.size(); i++) {
itemImgService.updateItemImg(itemImgIds.get(i), itemImgFileList.get(i));
}
return item.getId();
}
public void updateItemImg(Long itemImgId, MultipartFile itemImgFile) throws Exception {
f (!itemImgFile.isEmpty()) {
ItemImg savedItemImg = itemImgRepository.findById(itemImgId).orElseThrow(EntityNotFoundException::new); // itemImg 조회
if (!StringUtils.isEmpty(savedItemImg.getImgName())) {
fileService.deleteFile(itemImgLocation + "/" + savedItemImg.getImgName()); // 기존 이미지 삭제
}
String oriImgName = itemImgFile.getOriginalFilename();
String imgName = fileService.uploadFile(itemImgLocation, oriImgName, itemImgFile.getBytes()); // 새 이미지 업로드
String imgUrl = "/images/item/" + imgName;
savedItemImg.updateItemImg(oriImgName, imgName, imgUrl); // 새 이미지 정보 update
}
}
public String uploadFile(String uploadPath, String originalFileName, byte[] fileData) throws Exception {
UUID uuid = UUID.randomUUID();
String extension = originalFileName.substring(originalFileName.lastIndexOf("."));
String savedFileName = uuid.toString() + extension;
String fileUploadFullUrl = uploadPath + "/" + savedFileName;
FileOutputStream fos = new FileOutputStream(fileUploadFullUrl);
fos.write(fileData);
fos.close();
return savedFileName;
}