From fc7c5dabf0b786d718c6f2778ffa48cd7c183fc3 Mon Sep 17 00:00:00 2001 From: GOMUNGNAM Date: Mon, 2 Dec 2024 17:20:06 +0900 Subject: [PATCH 01/20] feat: add `S3PresignedUrlGenerator.java` --- src/main/java/com/dowe/util/s3/S3PresignedUrlGenerator.java | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 src/main/java/com/dowe/util/s3/S3PresignedUrlGenerator.java diff --git a/src/main/java/com/dowe/util/s3/S3PresignedUrlGenerator.java b/src/main/java/com/dowe/util/s3/S3PresignedUrlGenerator.java new file mode 100644 index 0000000..8a150cd --- /dev/null +++ b/src/main/java/com/dowe/util/s3/S3PresignedUrlGenerator.java @@ -0,0 +1,5 @@ +package com.dowe.util.s3; + +public class S3PresignedUrlGenerator { + +} From e1546b82b39045c77b2f00a1470fc042418732bd Mon Sep 17 00:00:00 2001 From: GOMUNGNAM Date: Mon, 2 Dec 2024 17:23:47 +0900 Subject: [PATCH 02/20] feat: add `CreateTeamRequest.java` --- .../java/com/dowe/team/dto/request/CreateTeamRequest.java | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 src/main/java/com/dowe/team/dto/request/CreateTeamRequest.java diff --git a/src/main/java/com/dowe/team/dto/request/CreateTeamRequest.java b/src/main/java/com/dowe/team/dto/request/CreateTeamRequest.java new file mode 100644 index 0000000..b58e82e --- /dev/null +++ b/src/main/java/com/dowe/team/dto/request/CreateTeamRequest.java @@ -0,0 +1,5 @@ +package com.dowe.team.dto.request; + +public record CreateTeamRequest() { + +} From c4bb77355c389223176cb90bf3dc63e79363e298 Mon Sep 17 00:00:00 2001 From: GOMUNGNAM Date: Mon, 2 Dec 2024 17:30:26 +0900 Subject: [PATCH 03/20] feat: add necessary fields in `CreateTeamRequest.java` --- .../java/com/dowe/team/dto/request/CreateTeamRequest.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/dowe/team/dto/request/CreateTeamRequest.java b/src/main/java/com/dowe/team/dto/request/CreateTeamRequest.java index b58e82e..51fcd46 100644 --- a/src/main/java/com/dowe/team/dto/request/CreateTeamRequest.java +++ b/src/main/java/com/dowe/team/dto/request/CreateTeamRequest.java @@ -1,5 +1,8 @@ package com.dowe.team.dto.request; -public record CreateTeamRequest() { +public record CreateTeamRequest( + String title, + String description +) { } From 8d870fb36c1b5799eb1724c9a6c8c67f82bab7c1 Mon Sep 17 00:00:00 2001 From: GOMUNGNAM Date: Mon, 2 Dec 2024 17:53:42 +0900 Subject: [PATCH 04/20] feat: add necessary constants in `AppConstants.java` --- src/main/java/com/dowe/util/AppConstants.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/main/java/com/dowe/util/AppConstants.java b/src/main/java/com/dowe/util/AppConstants.java index 51c4c7b..0004677 100644 --- a/src/main/java/com/dowe/util/AppConstants.java +++ b/src/main/java/com/dowe/util/AppConstants.java @@ -27,4 +27,7 @@ public final class AppConstants { public static final int NO_MORE_LAST_HIT_OFFSET = 1; public static final int HAS_MORE_LAST_HIT_OFFSET = 2; + public static final String TEAM_IMAGE_DIRECTORY = "team/"; + public static final String TEAM_IMAGE_PREFIX = "team_"; + } From 05754c993f7614f7092d8763c16ef475b63593af Mon Sep 17 00:00:00 2001 From: GOMUNGNAM Date: Mon, 2 Dec 2024 17:54:57 +0900 Subject: [PATCH 05/20] feat: add `CreateTeamResponse.java` --- .../java/com/dowe/team/dto/response/CreateTeamResponse.java | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 src/main/java/com/dowe/team/dto/response/CreateTeamResponse.java diff --git a/src/main/java/com/dowe/team/dto/response/CreateTeamResponse.java b/src/main/java/com/dowe/team/dto/response/CreateTeamResponse.java new file mode 100644 index 0000000..2bd7ae0 --- /dev/null +++ b/src/main/java/com/dowe/team/dto/response/CreateTeamResponse.java @@ -0,0 +1,5 @@ +package com.dowe.team.dto.response; + +public record CreateTeamResponse() { + +} From 02b08d76e30bcd2923dd661f3f12e83f30be114b Mon Sep 17 00:00:00 2001 From: GOMUNGNAM Date: Mon, 2 Dec 2024 18:06:30 +0900 Subject: [PATCH 06/20] feat: add necessary fields in `CreateTeamResponse.java` --- .../java/com/dowe/team/dto/response/CreateTeamResponse.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/dowe/team/dto/response/CreateTeamResponse.java b/src/main/java/com/dowe/team/dto/response/CreateTeamResponse.java index 2bd7ae0..17298dc 100644 --- a/src/main/java/com/dowe/team/dto/response/CreateTeamResponse.java +++ b/src/main/java/com/dowe/team/dto/response/CreateTeamResponse.java @@ -1,5 +1,8 @@ package com.dowe.team.dto.response; -public record CreateTeamResponse() { +public record CreateTeamResponse( + Long teamId, + String presignedUrl +) { } From bf0c4fb6134a991966dbd18bb056393de18191fe Mon Sep 17 00:00:00 2001 From: GOMUNGNAM Date: Mon, 2 Dec 2024 18:07:26 +0900 Subject: [PATCH 07/20] feat: add `AssignImageRequest.java` --- .../java/com/dowe/team/dto/request/AssignImageRequest.java | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 src/main/java/com/dowe/team/dto/request/AssignImageRequest.java diff --git a/src/main/java/com/dowe/team/dto/request/AssignImageRequest.java b/src/main/java/com/dowe/team/dto/request/AssignImageRequest.java new file mode 100644 index 0000000..2b5deaa --- /dev/null +++ b/src/main/java/com/dowe/team/dto/request/AssignImageRequest.java @@ -0,0 +1,5 @@ +package com.dowe.team.dto.request; + +public record AssignImageRequest() { + +} From 90058d9f572bcca520085203bf8342488746ed6b Mon Sep 17 00:00:00 2001 From: GOMUNGNAM Date: Mon, 2 Dec 2024 18:07:49 +0900 Subject: [PATCH 08/20] feat: add `AssignImageResponse.java` --- .../java/com/dowe/team/dto/response/AssignImageResponse.java | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 src/main/java/com/dowe/team/dto/response/AssignImageResponse.java diff --git a/src/main/java/com/dowe/team/dto/response/AssignImageResponse.java b/src/main/java/com/dowe/team/dto/response/AssignImageResponse.java new file mode 100644 index 0000000..1703ec8 --- /dev/null +++ b/src/main/java/com/dowe/team/dto/response/AssignImageResponse.java @@ -0,0 +1,5 @@ +package com.dowe.team.dto.response; + +public record AssignImageResponse() { + +} From 33dac99120de62542938b4fc39e06348f189cb45 Mon Sep 17 00:00:00 2001 From: GOMUNGNAM Date: Mon, 2 Dec 2024 18:27:35 +0900 Subject: [PATCH 09/20] feat: add necessary field in `AssignImageRequest.java` --- .../java/com/dowe/team/dto/request/AssignImageRequest.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/dowe/team/dto/request/AssignImageRequest.java b/src/main/java/com/dowe/team/dto/request/AssignImageRequest.java index 2b5deaa..db9467c 100644 --- a/src/main/java/com/dowe/team/dto/request/AssignImageRequest.java +++ b/src/main/java/com/dowe/team/dto/request/AssignImageRequest.java @@ -1,5 +1,7 @@ package com.dowe.team.dto.request; -public record AssignImageRequest() { +public record AssignImageRequest( + String image +) { } From 46432a5a5432d273e8d9e9f6c8522391fd046252 Mon Sep 17 00:00:00 2001 From: GOMUNGNAM Date: Mon, 2 Dec 2024 18:27:46 +0900 Subject: [PATCH 10/20] feat: add necessary field in `AssignImageResponse.java` --- .../java/com/dowe/team/dto/response/AssignImageResponse.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/dowe/team/dto/response/AssignImageResponse.java b/src/main/java/com/dowe/team/dto/response/AssignImageResponse.java index 1703ec8..757c45b 100644 --- a/src/main/java/com/dowe/team/dto/response/AssignImageResponse.java +++ b/src/main/java/com/dowe/team/dto/response/AssignImageResponse.java @@ -1,5 +1,7 @@ package com.dowe.team.dto.response; -public record AssignImageResponse() { +public record AssignImageResponse( + Long teamId +) { } From 8ac114500a4cf86c7e4e6be563f3581091526396 Mon Sep 17 00:00:00 2001 From: GOMUNGNAM Date: Mon, 2 Dec 2024 18:28:08 +0900 Subject: [PATCH 11/20] feat: add `TEAM_IMAGE_ASSIGN_SUCCESS` in `ResponseResult.java` --- src/main/java/com/dowe/util/api/ResponseResult.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/com/dowe/util/api/ResponseResult.java b/src/main/java/com/dowe/util/api/ResponseResult.java index b4819bd..6ab15d5 100644 --- a/src/main/java/com/dowe/util/api/ResponseResult.java +++ b/src/main/java/com/dowe/util/api/ResponseResult.java @@ -18,6 +18,7 @@ public enum ResponseResult { // Team TEAM_CREATE_SUCCESS("팀 생성에 성공했습니다"), + TEAM_IMAGE_ASSIGN_SUCCESS("팀 이미지 저장에 성공했습니다."), // Random RANDOM_TEAMS_SUCCESS("랜덤 팀 조회에 성공했습니다."), From dda236b41a3b1e96c3ded71047649f113b036323 Mon Sep 17 00:00:00 2001 From: GOMUNGNAM Date: Mon, 2 Dec 2024 18:29:44 +0900 Subject: [PATCH 12/20] feat: add necessary annotations in `S3PresignedUrlGenerator.java` --- src/main/java/com/dowe/util/s3/S3PresignedUrlGenerator.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/main/java/com/dowe/util/s3/S3PresignedUrlGenerator.java b/src/main/java/com/dowe/util/s3/S3PresignedUrlGenerator.java index 8a150cd..b8f9f93 100644 --- a/src/main/java/com/dowe/util/s3/S3PresignedUrlGenerator.java +++ b/src/main/java/com/dowe/util/s3/S3PresignedUrlGenerator.java @@ -1,5 +1,10 @@ package com.dowe.util.s3; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Component; + +@Component +@RequiredArgsConstructor public class S3PresignedUrlGenerator { } From 430de830e287ad7ea32dc705210295e8687adf20 Mon Sep 17 00:00:00 2001 From: GOMUNGNAM Date: Mon, 2 Dec 2024 18:30:26 +0900 Subject: [PATCH 13/20] feat: add necessary fields and annotations in `S3PresignedUrlGenerator.java` --- .../java/com/dowe/util/s3/S3PresignedUrlGenerator.java | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/main/java/com/dowe/util/s3/S3PresignedUrlGenerator.java b/src/main/java/com/dowe/util/s3/S3PresignedUrlGenerator.java index b8f9f93..bf8527e 100644 --- a/src/main/java/com/dowe/util/s3/S3PresignedUrlGenerator.java +++ b/src/main/java/com/dowe/util/s3/S3PresignedUrlGenerator.java @@ -1,10 +1,17 @@ package com.dowe.util.s3; import lombok.RequiredArgsConstructor; +import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; +import software.amazon.awssdk.services.s3.presigner.S3Presigner; @Component @RequiredArgsConstructor public class S3PresignedUrlGenerator { + private final S3Presigner s3Presigner; + + @Value("${cloud.aws.s3.bucket}") + private String bucketName; + } From 8865dd2ecb1df79142e33fc4ab59a5b16f15fd06 Mon Sep 17 00:00:00 2001 From: GOMUNGNAM Date: Mon, 2 Dec 2024 18:30:46 +0900 Subject: [PATCH 14/20] feat: add `generatePresignedUrl()` in `S3PresignedUrlGenerator.java` --- .../dowe/util/s3/S3PresignedUrlGenerator.java | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/src/main/java/com/dowe/util/s3/S3PresignedUrlGenerator.java b/src/main/java/com/dowe/util/s3/S3PresignedUrlGenerator.java index bf8527e..cfc3556 100644 --- a/src/main/java/com/dowe/util/s3/S3PresignedUrlGenerator.java +++ b/src/main/java/com/dowe/util/s3/S3PresignedUrlGenerator.java @@ -1,9 +1,13 @@ package com.dowe.util.s3; +import java.net.URL; +import java.time.Duration; import lombok.RequiredArgsConstructor; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; +import software.amazon.awssdk.services.s3.model.PutObjectRequest; import software.amazon.awssdk.services.s3.presigner.S3Presigner; +import software.amazon.awssdk.services.s3.presigner.model.PutObjectPresignRequest; @Component @RequiredArgsConstructor @@ -14,4 +18,28 @@ public class S3PresignedUrlGenerator { @Value("${cloud.aws.s3.bucket}") private String bucketName; + public String generatePresignedUrl( + String directory, + String imagePrefix, + Long teamId + ) { + + String key = directory + imagePrefix + teamId; + + PutObjectRequest putObjectRequest = PutObjectRequest.builder() + .bucket(bucketName) + .key(key) + .build(); + + PutObjectPresignRequest presignRequest = PutObjectPresignRequest.builder() + .putObjectRequest(putObjectRequest) + .signatureDuration(Duration.ofMinutes(15)) + .build(); + + URL presignedUrl = s3Presigner.presignPutObject(presignRequest).url(); + + return presignedUrl.toString(); + + } + } From 7e5ccb44fe04f0debdef75f8c744d0b526c2de6e Mon Sep 17 00:00:00 2001 From: GOMUNGNAM Date: Mon, 2 Dec 2024 18:31:01 +0900 Subject: [PATCH 15/20] feat: add `assignImage()` in `Team.java` --- src/main/java/com/dowe/team/Team.java | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/dowe/team/Team.java b/src/main/java/com/dowe/team/Team.java index d32d7cc..f66cc53 100644 --- a/src/main/java/com/dowe/team/Team.java +++ b/src/main/java/com/dowe/team/Team.java @@ -37,16 +37,18 @@ public class Team extends BaseEntity { @Builder public Team( String title, - String description, - String image + String description ) { this.title = title; this.description = description; - this.image = image; } public void assignManagerProfile(Profile profile) { this.managerProfile = profile; } + public void assignImage(String image) { + this.image = image; + } + } From a631c96bd40fd4f55cb10f6e225441a99c02faa1 Mon Sep 17 00:00:00 2001 From: GOMUNGNAM Date: Mon, 2 Dec 2024 18:31:18 +0900 Subject: [PATCH 16/20] feat: add `assignImage()` in `TeamController.java` --- .../team/presentation/TeamController.java | 33 ++++++++++++++----- 1 file changed, 25 insertions(+), 8 deletions(-) diff --git a/src/main/java/com/dowe/team/presentation/TeamController.java b/src/main/java/com/dowe/team/presentation/TeamController.java index 9d9ec52..1bc00f7 100644 --- a/src/main/java/com/dowe/team/presentation/TeamController.java +++ b/src/main/java/com/dowe/team/presentation/TeamController.java @@ -1,21 +1,23 @@ package com.dowe.team.presentation; -import com.dowe.elasticsearch.application.SearchService; +import com.dowe.team.dto.request.AssignImageRequest; +import com.dowe.team.dto.request.CreateTeamRequest; +import com.dowe.team.dto.response.AssignImageResponse; +import com.dowe.team.dto.response.CreateTeamResponse; import lombok.extern.slf4j.Slf4j; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.ModelAttribute; +import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RestController; import com.dowe.team.application.TeamService; -import com.dowe.team.dto.NewTeam; -import com.dowe.team.dto.TeamSettings; import com.dowe.util.api.ApiResponse; import com.dowe.util.api.ResponseResult; import com.dowe.util.resolver.Login; -import jakarta.validation.Valid; import lombok.RequiredArgsConstructor; @Slf4j @@ -26,16 +28,31 @@ public class TeamController { private final TeamService teamService; @PostMapping("/teams") - public ResponseEntity> create( + public ResponseEntity> create( @Login Long memberId, - @ModelAttribute @Valid TeamSettings teamSettings + @RequestBody CreateTeamRequest createTeamRequest ) { log.info(">>> TeamController create()"); return ResponseEntity.status(HttpStatus.CREATED) .body(ApiResponse.created( ResponseResult.TEAM_CREATE_SUCCESS, - teamService.create(memberId, teamSettings) + teamService.create(memberId, createTeamRequest) ) ); } + + @PutMapping("/teams/{teamId}/image") + public ResponseEntity> assignImage( + @Login Long memberId, + @PathVariable Long teamId, + @RequestBody AssignImageRequest assignImageRequest + ) { + log.info(">>> TeamController assignImage()"); + return ResponseEntity.status(HttpStatus.OK) + .body(ApiResponse.ok( + ResponseResult.TEAM_IMAGE_ASSIGN_SUCCESS, + teamService.assignImage(memberId, teamId, assignImageRequest) + )); + } + } From da257b07a2edd46dac4f082374d15b82712f6413 Mon Sep 17 00:00:00 2001 From: GOMUNGNAM Date: Mon, 2 Dec 2024 18:31:55 +0900 Subject: [PATCH 17/20] feat: add `assignImage()` in `TeamService.java` --- .../dowe/team/application/TeamService.java | 68 +++++++++++++------ 1 file changed, 49 insertions(+), 19 deletions(-) diff --git a/src/main/java/com/dowe/team/application/TeamService.java b/src/main/java/com/dowe/team/application/TeamService.java index f3396a0..179ed36 100644 --- a/src/main/java/com/dowe/team/application/TeamService.java +++ b/src/main/java/com/dowe/team/application/TeamService.java @@ -4,6 +4,12 @@ import com.dowe.exception.team.TeamCreationLimitException; import com.dowe.profile.application.ProfileService; +import com.dowe.profile.infrastructure.ProfileRepository; +import com.dowe.team.dto.request.AssignImageRequest; +import com.dowe.team.dto.request.CreateTeamRequest; +import com.dowe.team.dto.response.AssignImageResponse; +import com.dowe.team.dto.response.CreateTeamResponse; +import com.dowe.util.s3.S3PresignedUrlGenerator; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -13,10 +19,7 @@ import com.dowe.member.infrastructure.MemberRepository; import com.dowe.profile.Profile; import com.dowe.team.Team; -import com.dowe.team.dto.NewTeam; -import com.dowe.team.dto.TeamSettings; import com.dowe.team.infrastructure.TeamRepository; -import com.dowe.util.S3Uploader; import com.dowe.util.StringUtil; import lombok.RequiredArgsConstructor; @@ -26,16 +29,19 @@ @RequiredArgsConstructor public class TeamService { - private static final String TEAM_IMAGE_DIRECTORY = "team"; - private final TeamRepository teamRepository; private final MemberRepository memberRepository; - private final S3Uploader s3Uploader; private final ProfileService profileService; + private final S3PresignedUrlGenerator s3PresignedUrlGenerator; + private final ProfileRepository profileRepository; + @Transactional - public NewTeam create(Long memberId, TeamSettings teamSettings) { + public CreateTeamResponse create( + Long memberId, + CreateTeamRequest request + ) { log.info(">>> TeamService create()"); @@ -43,23 +49,14 @@ public NewTeam create(Long memberId, TeamSettings teamSettings) { .orElseThrow(MemberNotFoundException::new); long profileCount = profileService.countProfiles(member.getId()); - log.info(">>> ProfileService create() profileCount for member {} : {}", memberId, profileCount); if (profileCount == MAXIMUM_TEAM_COUNT) { throw new TeamCreationLimitException(); } - String image = null; - if (teamSettings.getImage() != null && !teamSettings.getImage().isEmpty()) { - image = s3Uploader.upload(TEAM_IMAGE_DIRECTORY, teamSettings.getImage()); - } - - log.info(">>> image: {}", image); - Team team = Team.builder() - .title(StringUtil.removeExtraSpaces(teamSettings.getTitle())) - .description(StringUtil.removeExtraSpaces(teamSettings.getDescription())) - .image(image) + .title(StringUtil.removeExtraSpaces(request.title())) + .description(StringUtil.removeExtraSpaces(request.description())) .build(); Profile defaultManagerProfile = profileService.createDefaultProfile( @@ -69,8 +66,41 @@ public NewTeam create(Long memberId, TeamSettings teamSettings) { team.assignManagerProfile(defaultManagerProfile); + Team savedTeam = teamRepository.save(team); + Long teamId = savedTeam.getId(); + + String presignedUrl = s3PresignedUrlGenerator.generatePresignedUrl( + TEAM_IMAGE_DIRECTORY, + TEAM_IMAGE_PREFIX, + teamId + ); + + return new CreateTeamResponse( + teamId, + presignedUrl + ); + } + + @Transactional + public AssignImageResponse assignImage( + Long memberId, + Long teamId, + AssignImageRequest assignImageRequest + ) { + + Team team = teamRepository.findById(teamId) + .orElseThrow(() -> new IllegalArgumentException("Team not found")); + + if (!isTeamManager(team, memberId)) { + throw new IllegalArgumentException("Member is not a manager"); + } + + team.assignImage(assignImageRequest.image()); + teamRepository.save(team); - return new NewTeam(team.getId()); + return new AssignImageResponse(team.getId()); + } + } From 55b66d3baf93ff749964814f59bd76f9d793b69f Mon Sep 17 00:00:00 2001 From: GOMUNGNAM Date: Mon, 2 Dec 2024 18:32:08 +0900 Subject: [PATCH 18/20] feat: add `isTeamManager()` in `TeamService.java` --- src/main/java/com/dowe/team/application/TeamService.java | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/main/java/com/dowe/team/application/TeamService.java b/src/main/java/com/dowe/team/application/TeamService.java index 179ed36..114de6a 100644 --- a/src/main/java/com/dowe/team/application/TeamService.java +++ b/src/main/java/com/dowe/team/application/TeamService.java @@ -103,4 +103,11 @@ public AssignImageResponse assignImage( } + private boolean isTeamManager( + Team team, + Long memberId + ) { + Member manager = team.getManagerProfile().getMember(); + return manager.getId().equals(memberId); + } } From dffc6871df199f254c43339123fd7ce9eb4bf3e5 Mon Sep 17 00:00:00 2001 From: GOMUNGNAM Date: Mon, 2 Dec 2024 18:51:35 +0900 Subject: [PATCH 19/20] refactor: edit `createSuccess()` in `TeamControllerTest.java` --- .../team/presentation/TeamControllerTest.java | 31 ++++++++++++------- 1 file changed, 20 insertions(+), 11 deletions(-) diff --git a/src/test/java/com/dowe/team/presentation/TeamControllerTest.java b/src/test/java/com/dowe/team/presentation/TeamControllerTest.java index 06e9d70..2c40bb4 100644 --- a/src/test/java/com/dowe/team/presentation/TeamControllerTest.java +++ b/src/test/java/com/dowe/team/presentation/TeamControllerTest.java @@ -13,14 +13,15 @@ import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.*; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; +import com.dowe.team.dto.request.CreateTeamRequest; +import com.dowe.team.dto.response.CreateTeamResponse; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import org.springframework.http.HttpStatus; -import org.springframework.mock.web.MockMultipartFile; +import org.springframework.http.MediaType; import org.springframework.restdocs.payload.JsonFieldType; import com.dowe.RestDocsSupport; -import com.dowe.team.dto.NewTeam; import com.dowe.util.api.ResponseResult; class TeamControllerTest extends RestDocsSupport { @@ -30,19 +31,26 @@ class TeamControllerTest extends RestDocsSupport { void createSuccess() throws Exception { // given String authorizationHeader = BEARER + "accessToken"; - NewTeam newTeam = new NewTeam(20L); - MockMultipartFile image = new MockMultipartFile("image", "test-image.png", "image/png", "some-image".getBytes()); + + CreateTeamRequest createTeamRequest = new CreateTeamRequest( + "Sample Team", + "Sample Description" + ); + + CreateTeamResponse createTeamResponse = new CreateTeamResponse( + 20L, + "pre-signed url" + ); given(tokenManager.parse(anyString(), any())) .willReturn(1L); given(teamService.create(anyLong(), any())) - .willReturn(newTeam); + .willReturn(createTeamResponse); // when / then - mockMvc.perform(multipart("/teams") - .file(image) - .param("title", "Sample Team") - .param("description", "This is a sample description.") + mockMvc.perform(post("/teams") + .content(objectMapper.writeValueAsString(createTeamRequest)) + .contentType(MediaType.APPLICATION_JSON) .header(AUTHORIZATION, authorizationHeader) .header(ORIGIN, FRONTEND_DOMAIN) .header(HOST, BACKEND_DOMAIN)) @@ -51,14 +59,15 @@ void createSuccess() throws Exception { .andExpect(jsonPath("$.code").value(HttpStatus.CREATED.value())) .andExpect(jsonPath("$.status").value(HttpStatus.CREATED.getReasonPhrase())) .andExpect(jsonPath("$.result").value(ResponseResult.TEAM_CREATE_SUCCESS.getDescription())) - .andExpect(jsonPath("$.data.teamId").value(newTeam.getTeamId())) + .andExpect(jsonPath("$.data.teamId").value(createTeamResponse.teamId())) .andDo(restDocs.document( responseFields( fieldWithPath("code").type(JsonFieldType.NUMBER).description("코드"), fieldWithPath("status").type(JsonFieldType.STRING).description("상태"), fieldWithPath("result").type(JsonFieldType.STRING).description("결과"), fieldWithPath("data").type(JsonFieldType.OBJECT).description("응답 데이터"), - fieldWithPath("data.teamId").type(JsonFieldType.NUMBER).description("팀 ID") + fieldWithPath("data.teamId").type(JsonFieldType.NUMBER).description("팀 ID"), + fieldWithPath("data.presignedUrl").type(JsonFieldType.STRING).description("Pre-signed URL") ) )); } From de00ec5e589baaa83c8b432be57ce86f81b51c35 Mon Sep 17 00:00:00 2001 From: GOMUNGNAM Date: Mon, 2 Dec 2024 18:53:38 +0900 Subject: [PATCH 20/20] feat: add `public-read` permission in `S3PresignedUrlGenerator.java` --- src/main/java/com/dowe/util/s3/S3PresignedUrlGenerator.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/com/dowe/util/s3/S3PresignedUrlGenerator.java b/src/main/java/com/dowe/util/s3/S3PresignedUrlGenerator.java index cfc3556..74121b4 100644 --- a/src/main/java/com/dowe/util/s3/S3PresignedUrlGenerator.java +++ b/src/main/java/com/dowe/util/s3/S3PresignedUrlGenerator.java @@ -29,6 +29,7 @@ public String generatePresignedUrl( PutObjectRequest putObjectRequest = PutObjectRequest.builder() .bucket(bucketName) .key(key) + .acl("public-read") .build(); PutObjectPresignRequest presignRequest = PutObjectPresignRequest.builder()