diff --git a/src/main/java/com/mpnp/baechelin/store/controller/UserRegisterStoreController.java b/src/main/java/com/mpnp/baechelin/store/controller/UserRegisterStoreController.java index c2fc16b..d0f23ee 100644 --- a/src/main/java/com/mpnp/baechelin/store/controller/UserRegisterStoreController.java +++ b/src/main/java/com/mpnp/baechelin/store/controller/UserRegisterStoreController.java @@ -12,6 +12,9 @@ import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.multipart.MultipartFile; + +import java.util.List; @RestController @RequestMapping("/store") @@ -26,6 +29,17 @@ public ResponseEntity registerStore( @ModelAttribute UserRegisterStoreRequestDto userRegisterStoreRequestDto, @AuthenticationPrincipal User userDetails) { + /* + * 이미지 파일 리스트 유효성 체크 + * @Valid 어노테이션은 Collection 에는 적용할 수 없으므로 직접 유효성 체크를 해준다. + */ + List userRegisterStoreImageList = userRegisterStoreRequestDto.getUserRegisterStoreImageList(); + for (MultipartFile multipartFile : userRegisterStoreImageList) { + if (multipartFile.isEmpty()) { + throw new NullPointerException(); + } + } + userRegisterStoreService.registerStore(userRegisterStoreRequestDto, userDetails.getUsername()); return new ResponseEntity<>("업장 등록 성공", HttpStatus.OK); } diff --git a/src/main/java/com/mpnp/baechelin/store/dto/userRegisterStore/UserRegisterStoreImgDto.java b/src/main/java/com/mpnp/baechelin/store/dto/userRegisterStore/UserRegisterStoreImgDto.java index ffd2da6..bf6a594 100644 --- a/src/main/java/com/mpnp/baechelin/store/dto/userRegisterStore/UserRegisterStoreImgDto.java +++ b/src/main/java/com/mpnp/baechelin/store/dto/userRegisterStore/UserRegisterStoreImgDto.java @@ -13,8 +13,4 @@ public class UserRegisterStoreImgDto { public UserRegisterStoreImgDto(String userRegisterStoreImageUrl) { this.userRegisterStoreImageUrl = userRegisterStoreImageUrl; } - - public UserRegisterStoreImgDto(UserRegisterStoreImg userRegisterStoreImg) { - this.userRegisterStoreImageUrl = userRegisterStoreImg.getUserRegisterStoreImageUrl(); - } } diff --git a/src/main/java/com/mpnp/baechelin/store/service/UserRegisterStoreService.java b/src/main/java/com/mpnp/baechelin/store/service/UserRegisterStoreService.java index 821b5ef..b04341e 100644 --- a/src/main/java/com/mpnp/baechelin/store/service/UserRegisterStoreService.java +++ b/src/main/java/com/mpnp/baechelin/store/service/UserRegisterStoreService.java @@ -10,6 +10,7 @@ import com.mpnp.baechelin.util.AwsS3Manager; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; +import org.springframework.web.multipart.MultipartFile; import javax.transaction.Transactional; import java.util.ArrayList; @@ -29,6 +30,7 @@ public class UserRegisterStoreService { /** * 유저 업장 등록 * @param userRegisterStoreRequestDto + * @param socialId */ public void registerStore(UserRegisterStoreRequestDto userRegisterStoreRequestDto, String socialId) { User user = userRepository.findBySocialId(socialId); @@ -45,21 +47,22 @@ public void registerStore(UserRegisterStoreRequestDto userRegisterStoreRequestDt .build(); // 업장의 이미지 여러개 등록 - // s3에 이미지 업로드 후 url 반환 - List uploadedImage = awsS3Manager.uploadFile(userRegisterStoreRequestDto.getUserRegisterStoreImageList()); - // saveAll을 위해 userRegisterStoreImg List에 저장 List userRegisterStoreImgList = new ArrayList<>(); - for (String image : uploadedImage) { + // 유저가 등록한 업장 이미지 리스트 + List userRegisterStoreImageFiles = userRegisterStoreRequestDto.getUserRegisterStoreImageList(); + + for (MultipartFile userRegisterStoreImageFile : userRegisterStoreImageFiles) { UserRegisterStoreImg userRegisterStoreImg = UserRegisterStoreImg.builder() - .userRegisterStoreImageUrl(image) + .userRegisterStoreImageUrl(awsS3Manager.uploadFile(userRegisterStoreImageFile)) // 유저가 등록한 업장 이미지 url 변환 .userRegisterStore(userRegisterStore) .build(); userRegisterStoreImgList.add(userRegisterStoreImg); } + userRegisterStoreRepository.save(userRegisterStore); userRegisterStoreImgRepository.saveAll(userRegisterStoreImgList); } diff --git a/src/main/java/com/mpnp/baechelin/util/AwsS3Manager.java b/src/main/java/com/mpnp/baechelin/util/AwsS3Manager.java index 392d334..34c1d7e 100644 --- a/src/main/java/com/mpnp/baechelin/util/AwsS3Manager.java +++ b/src/main/java/com/mpnp/baechelin/util/AwsS3Manager.java @@ -29,36 +29,6 @@ public class AwsS3Manager { private final AmazonS3 amazonS3; - - // 이미지 여러장 저장 - public List uploadFile(List multipartFile) { - List fileNameList = new ArrayList<>(); - - // 파일이 넘어오지 않으면 빈 리스트 반환 - if (multipartFile == null) { - return fileNameList; - } - - // forEach 구문을 통해 multipartFile로 넘어온 파일들 하나씩 fileNameList에 추가 - multipartFile.forEach(file -> { - String fileName = createFileName(file.getOriginalFilename()); - ObjectMetadata objectMetadata = new ObjectMetadata(); - objectMetadata.setContentLength(file.getSize()); - objectMetadata.setContentType(file.getContentType()); - - try(InputStream inputStream = file.getInputStream()) { - amazonS3.putObject(new PutObjectRequest(bucket, fileName, inputStream, objectMetadata) - .withCannedAcl(CannedAccessControlList.PublicRead)); - } catch(IOException e) { - throw new ResponseStatusException(HttpStatus.INTERNAL_SERVER_ERROR, "파일 업로드에 실패했습니다."); - } - - fileNameList.add(String.format("https://%s.s3.amazonaws.com/%s", bucket, fileName)); - }); - - return fileNameList; - } - // 이미지 단건 저장 public String uploadFile(MultipartFile file) { if (Objects.equals(file.getOriginalFilename(), "")) {