WindsomeProject - 상품 수정 기능

박민수·2024년 1월 5일
0

WindsomeProject

목록 보기
7/32
post-thumbnail

개요

해당 포스팅에서는 상품 수정 기능의 흐름에 대해서 정리해 보고자 한다.

상품 수정 기능 절차

  1. Controller
  2. ItemService - 아이템 업데이트
  3. ItemImgService - 아이템 이미지 업데이트
  4. FileService - 파일 업로드

Controller 로직

  1. 사용자가 입력한 상품의 정보가 담긴 form data를 ItemFormDto 객체에 매핑하고, 이미지 파일들은 @RequestParam 어노테이션을 이용하여 List<MultipartFile> 타입의 itemImgFileList 변수에 매핑하여 전달받는다.
  2. 상품과 상품 이미지 정보를 업데이트한다. (Service에 위임)
@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:/";
}

Service 로직

ItemService

  1. DB에서 Item을 조회한다.
  2. 아이템 정보를 업데이트한다.
  3. 아이템 이미지 정보를 업데이트한다. (ItemImgService에 위임)
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();
}

ItemImgService

  1. DB에서 ItemImg를 조회한다.
  2. 기존 이미지가 존재하면 기존 이미지를 삭제한다. (FileService에 위임)
  3. 새 이미지를 서버에 업로드 한다. (FileService에 위임)
  4. 이미지 정보를 새 이미지 정보로 업데이트한다.
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
	}
}

FileService

  • 파일을 업로드 한다.
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;
}
profile
안녕하세요 백엔드 개발자입니다.

0개의 댓글

관련 채용 정보