diff --git a/src/main/java/com/petlog/docs/S3ControllerDocs.java b/src/main/java/com/petlog/docs/S3ControllerDocs.java index bfc880b..0d157fb 100644 --- a/src/main/java/com/petlog/docs/S3ControllerDocs.java +++ b/src/main/java/com/petlog/docs/S3ControllerDocs.java @@ -1,5 +1,6 @@ package com.petlog.docs; +import com.petlog.auth.resolver.Authenticated; import com.petlog.common.response.ApiResponse; import com.petlog.s3.controller.dto.request.S3PresignedUrlsRequestDto; import com.petlog.s3.controller.dto.response.S3PresignedUrlsResponseDto; @@ -13,5 +14,5 @@ public interface S3ControllerDocs { @io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "201", description = "S3 presigned URL 생성에 성공하였습니다.") @Operation(summary = "S3 Presigned URL 발급 API") - ResponseEntity> issueS3PresignedUrls(@RequestBody S3PresignedUrlsRequestDto request); + ResponseEntity> issueS3PresignedUrls(@Authenticated final Long memberId, @RequestBody final S3PresignedUrlsRequestDto request); } diff --git a/src/main/java/com/petlog/s3/controller/S3Controller.java b/src/main/java/com/petlog/s3/controller/S3Controller.java index aac216c..18f8987 100644 --- a/src/main/java/com/petlog/s3/controller/S3Controller.java +++ b/src/main/java/com/petlog/s3/controller/S3Controller.java @@ -1,5 +1,6 @@ package com.petlog.s3.controller; +import com.petlog.auth.resolver.Authenticated; import com.petlog.common.response.ApiResponse; import com.petlog.docs.S3ControllerDocs; import com.petlog.s3.controller.dto.request.S3PresignedUrlsRequestDto; @@ -24,9 +25,10 @@ public class S3Controller implements S3ControllerDocs { @PostMapping("/presigned-urls") public ResponseEntity> issueS3PresignedUrls( - @RequestBody S3PresignedUrlsRequestDto request + @Authenticated final Long memberId, + @RequestBody final S3PresignedUrlsRequestDto request ) { - final GeneratedS3PresignedUrlDto generatedS3PresignedUrl = s3Service.generateS3PresignedUrl(request.diaryId(), request.fileNames()); + final GeneratedS3PresignedUrlDto generatedS3PresignedUrl = s3Service.generateS3PresignedUrl(memberId, request.fileType(), request.fileNames()); final S3PresignedUrlsResponseDto response = S3PresignedUrlsResponseDto.from(generatedS3PresignedUrl); return ResponseEntity.ok( diff --git a/src/main/java/com/petlog/s3/controller/dto/request/S3PresignedUrlsRequestDto.java b/src/main/java/com/petlog/s3/controller/dto/request/S3PresignedUrlsRequestDto.java index f80e490..b4d57d0 100644 --- a/src/main/java/com/petlog/s3/controller/dto/request/S3PresignedUrlsRequestDto.java +++ b/src/main/java/com/petlog/s3/controller/dto/request/S3PresignedUrlsRequestDto.java @@ -1,10 +1,12 @@ package com.petlog.s3.controller.dto.request; +import com.petlog.s3.service.FileType; + import java.util.List; public record S3PresignedUrlsRequestDto( - Long diaryId, + FileType fileType, List fileNames ) { diff --git a/src/main/java/com/petlog/s3/service/FileType.java b/src/main/java/com/petlog/s3/service/FileType.java new file mode 100644 index 0000000..d498cca --- /dev/null +++ b/src/main/java/com/petlog/s3/service/FileType.java @@ -0,0 +1,9 @@ +package com.petlog.s3.service; + +public enum FileType { + + PROFILE_IMAGE, + DIARY_IMAGE, + ; + +} diff --git a/src/main/java/com/petlog/s3/service/S3Service.java b/src/main/java/com/petlog/s3/service/S3Service.java index 45bb7ac..c503ec4 100644 --- a/src/main/java/com/petlog/s3/service/S3Service.java +++ b/src/main/java/com/petlog/s3/service/S3Service.java @@ -1,5 +1,7 @@ package com.petlog.s3.service; +import com.petlog.member.entity.Member; +import com.petlog.member.repository.MemberRepository; import com.petlog.s3.generator.PresignedUrlGenerator; import com.petlog.s3.service.dto.GeneratedS3PresignedUrlDto; import com.petlog.s3.service.dto.S3PresignedUrlItem; @@ -13,22 +15,28 @@ @Service public class S3Service { - private static final String DIARY_IMAGE_ROOT_DIRECTORY = "diary_image"; - private final PresignedUrlGenerator presignedUrlGenerator; + private final MemberRepository memberRepository; + + public GeneratedS3PresignedUrlDto generateS3PresignedUrl(final Long memberId, final FileType fileType, final List fileNames) { + getMember(memberId); - public GeneratedS3PresignedUrlDto generateS3PresignedUrl(final Long diaryId, final List fileNames) { - final List keys = keys(diaryId, fileNames); + final List keys = keys(memberId, fileType, fileNames); final List items = presignedUrlGenerator.generate(keys); return new GeneratedS3PresignedUrlDto(items); } - private List keys(final Long diaryId, final List fileNames) { + private Member getMember(final Long memberId) { + return memberRepository.findById(memberId) + .orElseThrow(() -> new IllegalArgumentException("존재하지 않는 회원입니다.")); + } + + private List keys(final Long memberId, final FileType fileType, final List fileNames) { return fileNames.stream() - .map(fileName -> "%s/%d/%s/%s".formatted( - DIARY_IMAGE_ROOT_DIRECTORY, - diaryId, + .map(fileName -> "%d/%s/%s/%s".formatted( + memberId, + fileType, UUID.randomUUID(), fileName ))