From d816afe0fbe313ec053a4f320b0b8ede6ae74c5c Mon Sep 17 00:00:00 2001 From: Hwangseoeun Date: Sun, 30 Nov 2025 17:47:49 +0900 Subject: [PATCH] =?UTF-8?q?refactor:=20=ED=94=84=EB=A1=9C=ED=95=84=20?= =?UTF-8?q?=EC=9D=B4=EB=AF=B8=EC=A7=80,=20=EC=9D=BC=EA=B8=B0=EC=9D=98=20?= =?UTF-8?q?=EC=9D=B4=EB=AF=B8=EC=A7=80=20=EB=93=B1=EB=A1=9D=EC=9D=84=20?= =?UTF-8?q?=EC=9C=84=ED=95=B4=20diaryId=EA=B0=80=20=EC=95=84=EB=8B=8C=20me?= =?UTF-8?q?mberId=EB=A5=BC=20=ED=86=B5=ED=95=B4=20=EA=B2=BD=EB=A1=9C?= =?UTF-8?q?=EB=A5=BC=20=EC=83=9D=EC=84=B1=ED=95=98=EB=8F=84=EB=A1=9D=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/petlog/docs/S3ControllerDocs.java | 3 ++- .../petlog/s3/controller/S3Controller.java | 6 +++-- .../request/S3PresignedUrlsRequestDto.java | 4 +++- .../java/com/petlog/s3/service/FileType.java | 9 +++++++ .../java/com/petlog/s3/service/S3Service.java | 24 ++++++++++++------- 5 files changed, 34 insertions(+), 12 deletions(-) create mode 100644 src/main/java/com/petlog/s3/service/FileType.java 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 ))