WindsomeProject - 상품 등록 기능

박민수·2024년 1월 5일
0

WindsomeProject

목록 보기
6/32
post-thumbnail

개요

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

상품 등록 기능 절차

상품 등록 기능의 흐름은 다음과 같다.

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

Controller 로직

  1. 사용자가 입력한 상품의 정보가 담긴 form data를 ItemFormDto 객체에 매핑하고, 이미지 파일들은 @RequestParam 어노테이션을 이용하여 List<MultipartFile> 타입의 itemImgFileList 변수에 매핑하여 전달받는다.
  2. 상품과 상품 이미지 정보를 DB에 저장한다. (Service에 위임)

@PostMapping("/item")
public String itemNew(@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.saveItem(itemFormDto, itemImgFileList);
    } catch (Exception e) {
		...
    }
    return "redirect:/admin/items";
}

Service 로직

ItemService

  1. itemFormDto를 Entity로 변환하여 해당 Entity를 DB에 저장한다.
  2. 아이템 이미지 정보를 DB에 저장한다. (ItemImgService에 위임)
public Long saveItem(ItemFormDto itemFormDto, List<MultipartFile> itemImgFileList) throws Exception {
    Item item = itemFormDto.toEntity();
    itemRepository.save(item);

    for (int i = 0; i < itemImgFileList.size(); i++) {
        ItemImg itemImg = new ItemImg();
        itemImg.setItem(item);

        if (i == 0)
            itemImg.setRepImgYn("Y");
        else
            itemImg.setRepImgYn("N");

        itemImgService.saveItemImg(itemImg, itemImgFileList.get(i));
    }
    return item.getId();
}

ItemImgService

  1. 이미지 파일을 서버에 업로드한다.
  2. ItemImg Entity에 이미지 정보를 업데이트하고 해당 Entity를 DB에 저장한다.
public void saveItemImg(ItemImg itemImg, MultipartFile itemImgFile) throws Exception {
    String oriImgName = itemImgFile.getOriginalFilename();
    String imgName = "";
    String imgUrl = "";

    // 파일 업로드
    if (!StringUtils.isEmpty(oriImgName)) {
        imgName = fileService.uploadFile(itemImgLocation, oriImgName, itemImgFile.getBytes());
        imgUrl = "/images/item/" + imgName;
    }

    // 이미지 정보 update -> DB 저장
    itemImg.updateItemImg(oriImgName, imgName, imgUrl);
    itemImgRepository.save(itemImg);
}

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개의 댓글

관련 채용 정보