From 85c5acf895aa32fdd0d658195d499e755f4460ed Mon Sep 17 00:00:00 2001 From: yschoi123 Date: Wed, 22 Jan 2025 11:11:43 +0900 Subject: [PATCH 1/8] =?UTF-8?q?Feat:=20multipart=20=ED=8C=8C=EC=9D=BC=20?= =?UTF-8?q?=EC=B5=9C=EB=8C=80=20=EC=82=AC=EC=9D=B4=EC=A6=88=20=EC=84=A4?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/resources/application.properties | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index 62bc7559..10c95e33 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -47,3 +47,9 @@ cloud.aws.credentials.access-key=${AWS_ACCESS_KEY_ID} cloud.aws.credentials.secret-key=${AWS_SECRET_ACCESS_KEY} cloud.aws.region.static=${AWS_REGION} cloud.aws.s3.bucket=${S3_BUCKET_NAME} +# MultipartFile +spring.servlet.multipart.max-file-size=3MB +spring.servlet.multipart.max-request-size=15MB +# HTTP form ?? ??? +server.tomcat.max-http-form-post-size=15MB + From 0ede9e0749090265b620d21448f7938ea69639b2 Mon Sep 17 00:00:00 2001 From: yschoi123 Date: Wed, 22 Jan 2025 11:12:05 +0900 Subject: [PATCH 2/8] =?UTF-8?q?Feat:=20=ED=8C=8C=EC=9D=BC=20=EC=82=AC?= =?UTF-8?q?=EC=9D=B4=EC=A6=88=20=EC=B4=88=EA=B3=BC=20=EC=98=88=EC=99=B8=20?= =?UTF-8?q?=EC=B2=98=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../unsemawang/common/constants/ResponseCode.java | 3 +++ .../common/exception/GlobalExceptionHandler.java | 11 +++++++++++ 2 files changed, 14 insertions(+) diff --git a/src/main/java/com/palbang/unsemawang/common/constants/ResponseCode.java b/src/main/java/com/palbang/unsemawang/common/constants/ResponseCode.java index 39f02a40..7184441b 100644 --- a/src/main/java/com/palbang/unsemawang/common/constants/ResponseCode.java +++ b/src/main/java/com/palbang/unsemawang/common/constants/ResponseCode.java @@ -76,6 +76,9 @@ public enum ResponseCode implements Codable { EMPTY_PARAM_08("6308", HttpStatus.BAD_REQUEST, "08번 Parameter 데이터 누락"), EMPTY_PARAM_09("6309", HttpStatus.BAD_REQUEST, "09번 Parameter 데이터 누락"), + // 파일 관련 ( 값: 7xxx) + FILE_TOO_LARGE("7000", HttpStatus.PAYLOAD_TOO_LARGE, "파일 크기가 최대 허용치를 초과했습니다"), + // 강제 에러 TEST_ERROR("9999", HttpStatus.INTERNAL_SERVER_ERROR, "강제 발생 ERROR"); diff --git a/src/main/java/com/palbang/unsemawang/common/exception/GlobalExceptionHandler.java b/src/main/java/com/palbang/unsemawang/common/exception/GlobalExceptionHandler.java index b82fcb03..c105bc95 100644 --- a/src/main/java/com/palbang/unsemawang/common/exception/GlobalExceptionHandler.java +++ b/src/main/java/com/palbang/unsemawang/common/exception/GlobalExceptionHandler.java @@ -7,6 +7,7 @@ import org.springframework.web.bind.MethodArgumentNotValidException; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.RestControllerAdvice; +import org.springframework.web.multipart.MaxUploadSizeExceededException; import com.palbang.unsemawang.common.constants.ResponseCode; import com.palbang.unsemawang.common.response.ErrorResponse; @@ -141,4 +142,14 @@ public ResponseEntity handleInvalidFileFormatException(InvalidFil .status(HttpStatus.BAD_REQUEST) .body(response); } + + @ExceptionHandler(MaxUploadSizeExceededException.class) + public ResponseEntity handleMaxSizeException(MaxUploadSizeExceededException exc) { + log.error("Maximum upload size exceeded: {}", exc.getMessage()); + ErrorResponse response = ErrorResponse.of(ResponseCode.FILE_TOO_LARGE); + + return ResponseEntity + .status(HttpStatus.PAYLOAD_TOO_LARGE) + .body(response); + } } From 4aa7669e40239d1077755c7580423edfa0701a5e Mon Sep 17 00:00:00 2001 From: yschoi123 Date: Wed, 22 Jan 2025 11:12:38 +0900 Subject: [PATCH 3/8] =?UTF-8?q?Feat:=20=EC=BB=A8=EB=B2=84=ED=84=B0?= =?UTF-8?q?=EA=B0=80=20octet-stream=20=ED=83=80=EC=9E=85=EC=9D=84=20?= =?UTF-8?q?=ED=97=88=EC=9A=A9=ED=95=98=EB=8F=84=EB=A1=9D=20=EC=84=A4?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../unsemawang/config/ConverterConfig.java | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 src/main/java/com/palbang/unsemawang/config/ConverterConfig.java diff --git a/src/main/java/com/palbang/unsemawang/config/ConverterConfig.java b/src/main/java/com/palbang/unsemawang/config/ConverterConfig.java new file mode 100644 index 00000000..b5937b57 --- /dev/null +++ b/src/main/java/com/palbang/unsemawang/config/ConverterConfig.java @@ -0,0 +1,19 @@ +package com.palbang.unsemawang.config; + +import java.util.ArrayList; +import java.util.List; + +import org.springframework.context.annotation.Configuration; +import org.springframework.http.MediaType; +import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter; + +@Configuration +public class ConverterConfig { + + public ConverterConfig(MappingJackson2HttpMessageConverter converter) { + // octet-stream 타입을 허용하도록 설정 + List supportedMediaTypes = new ArrayList<>(converter.getSupportedMediaTypes()); + supportedMediaTypes.add(MediaType.APPLICATION_OCTET_STREAM); + converter.setSupportedMediaTypes(supportedMediaTypes); + } +} From a7d8600560df3442091a009b9e7582a3919576e7 Mon Sep 17 00:00:00 2001 From: yschoi123 Date: Wed, 22 Jan 2025 11:13:04 +0900 Subject: [PATCH 4/8] =?UTF-8?q?Feat:=20=EC=9D=B4=EB=AF=B8=EC=A7=80=20?= =?UTF-8?q?=EB=A6=AC=EC=8A=A4=ED=8A=B8=20=EC=97=85=EB=A1=9C=EB=93=9C=20?= =?UTF-8?q?=EB=A9=94=EC=84=9C=EB=93=9C=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../unsemawang/common/util/file/service/FileService.java | 7 +++++++ .../common/util/file/service/FileServiceImpl.java | 5 +++++ 2 files changed, 12 insertions(+) diff --git a/src/main/java/com/palbang/unsemawang/common/util/file/service/FileService.java b/src/main/java/com/palbang/unsemawang/common/util/file/service/FileService.java index 6b9b7537..1fd0ec06 100644 --- a/src/main/java/com/palbang/unsemawang/common/util/file/service/FileService.java +++ b/src/main/java/com/palbang/unsemawang/common/util/file/service/FileService.java @@ -15,6 +15,13 @@ public interface FileService { */ void uploadImage(MultipartFile file, FileRequest fileRequest); + /** + * 이미지 업로드 + * @param files 업로드 할 이미지 파일 리스트 + * @param fileRequest ReferenceType과 ReferenceId 입력 + */ + void uploadImagesAtOnce(List files, FileRequest fileRequest); + /** * 프로필 이미지 url 반환 * @param referenceId 참조된 회원 id, referenceId로 사용된 id diff --git a/src/main/java/com/palbang/unsemawang/common/util/file/service/FileServiceImpl.java b/src/main/java/com/palbang/unsemawang/common/util/file/service/FileServiceImpl.java index c1ee9f72..94a3fb52 100644 --- a/src/main/java/com/palbang/unsemawang/common/util/file/service/FileServiceImpl.java +++ b/src/main/java/com/palbang/unsemawang/common/util/file/service/FileServiceImpl.java @@ -43,6 +43,11 @@ public void uploadImage(MultipartFile file, FileRequest fileRequest) { saveFileOrRollback(fileEntity, path, fileRequest); } + @Override + public void uploadImagesAtOnce(List files, FileRequest fileRequest) { + files.forEach(f -> uploadImage(f, fileRequest)); + } + /* upload 업로드 From 10e00342f4811c5ff4671fe07f2658ccc255de37 Mon Sep 17 00:00:00 2001 From: yschoi123 Date: Wed, 22 Jan 2025 11:14:51 +0900 Subject: [PATCH 5/8] =?UTF-8?q?Feat:=20=EA=B2=8C=EC=8B=9C=EA=B8=80=20?= =?UTF-8?q?=EB=93=B1=EB=A1=9D=20=ED=9B=84=20=EC=9D=B4=EB=AF=B8=EC=A7=80=20?= =?UTF-8?q?=EC=97=85=EB=A1=9C=EB=93=9C=ED=95=98=EB=8A=94=20=EB=A1=9C?= =?UTF-8?q?=EC=A7=81=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../community/service/PostService.java | 24 ++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/palbang/unsemawang/community/service/PostService.java b/src/main/java/com/palbang/unsemawang/community/service/PostService.java index 7f95f0d6..e3be3e9b 100644 --- a/src/main/java/com/palbang/unsemawang/community/service/PostService.java +++ b/src/main/java/com/palbang/unsemawang/community/service/PostService.java @@ -1,14 +1,19 @@ package com.palbang.unsemawang.community.service; +import java.util.List; + import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.multipart.MultipartFile; import com.palbang.unsemawang.common.constants.ResponseCode; import com.palbang.unsemawang.common.exception.GeneralException; +import com.palbang.unsemawang.common.util.file.dto.FileReferenceType; +import com.palbang.unsemawang.common.util.file.dto.FileRequest; +import com.palbang.unsemawang.common.util.file.service.FileService; import com.palbang.unsemawang.community.dto.request.PostDeleteRequest; import com.palbang.unsemawang.community.dto.request.PostRegisterRequest; import com.palbang.unsemawang.community.dto.request.PostUpdateRequest; -import com.palbang.unsemawang.community.dto.response.PostRegisterResponse; import com.palbang.unsemawang.community.entity.Post; import com.palbang.unsemawang.community.repository.PostRepository; import com.palbang.unsemawang.member.entity.Member; @@ -19,11 +24,12 @@ @Service @RequiredArgsConstructor public class PostService { + private final FileService fileService; private final PostRepository postRepository; private final MemberRepository memberRepository; @Transactional(rollbackFor = Exception.class) - public PostRegisterResponse register(PostRegisterRequest postRegisterRequest) { + public Post register(PostRegisterRequest postRegisterRequest) { // 0. 유효한 회원인지 확인 Member member = memberRepository.findById(postRegisterRequest.getMemberId()) @@ -39,7 +45,19 @@ public PostRegisterResponse register(PostRegisterRequest postRegisterRequest) { throw new GeneralException(ResponseCode.ERROR_INSERT, "게시글 등록에 실패했습니다"); } - return PostRegisterResponse.of("게시글 등록이 성공했습니다!"); + return savedPost; + } + + @Transactional(rollbackFor = Exception.class) + public Post register(PostRegisterRequest postRegisterRequest, List fileList) { + + // 1. 게시글 등록 + Post savedPost = register(postRegisterRequest); + + // 2. 이미지 업로드 + fileService.uploadImagesAtOnce(fileList, FileRequest.of(FileReferenceType.COMMUNITY_BOARD, savedPost.getId())); + + return savedPost; } @Transactional(rollbackFor = Exception.class) From 93571cb77b55595fe47e2f728677b57c220fb31a Mon Sep 17 00:00:00 2001 From: yschoi123 Date: Wed, 22 Jan 2025 11:20:18 +0900 Subject: [PATCH 6/8] =?UTF-8?q?Feat:=20=EC=9A=94=EC=B2=AD=20=ED=97=A4?= =?UTF-8?q?=EB=8D=94=20=EB=B0=8F=20=ED=8C=8C=EB=9D=BC=EB=AF=B8=ED=84=B0=20?= =?UTF-8?q?=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../community/controller/PostController.java | 11 ++++++++--- .../controller/PostControllerImpl.java | 17 ++++++++++++----- 2 files changed, 20 insertions(+), 8 deletions(-) diff --git a/src/main/java/com/palbang/unsemawang/community/controller/PostController.java b/src/main/java/com/palbang/unsemawang/community/controller/PostController.java index 7e0d8bfc..984aa20c 100644 --- a/src/main/java/com/palbang/unsemawang/community/controller/PostController.java +++ b/src/main/java/com/palbang/unsemawang/community/controller/PostController.java @@ -1,5 +1,7 @@ package com.palbang.unsemawang.community.controller; +import java.util.List; + import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.security.core.annotation.AuthenticationPrincipal; @@ -8,6 +10,8 @@ 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.RequestPart; +import org.springframework.web.multipart.MultipartFile; import com.palbang.unsemawang.community.dto.request.PostRegisterRequest; import com.palbang.unsemawang.community.dto.request.PostUpdateRequest; @@ -25,10 +29,11 @@ public interface PostController { description = "커뮤니티 게시글 등록 API 입니다. 인증 토큰이 담긴 쿠키를 직접 보내셔야 테스트가 가능합니다!", summary = "커뮤니티 게시글 등록" ) - @PostMapping(produces = MediaType.APPLICATION_JSON_VALUE) + @PostMapping(consumes = MediaType.MULTIPART_FORM_DATA_VALUE) ResponseEntity write( @AuthenticationPrincipal CustomOAuth2User auth, - @Valid @RequestBody PostRegisterRequest postRegisterRequest + @RequestPart List fileList, + @Valid @RequestPart PostRegisterRequest postRegisterRequest ); /* 게시글 수정 */ @@ -36,7 +41,7 @@ ResponseEntity write( description = "커뮤니티 게시글 수정 API 입니다. 인증 토큰이 담긴 쿠키를 보내셔야 테스트가 가능합니다!", summary = "커뮤니티 게시글 수정" ) - @PutMapping(path = "/{id}", produces = MediaType.APPLICATION_JSON_VALUE) + @PutMapping(path = "/{id}", consumes = MediaType.APPLICATION_JSON_VALUE) ResponseEntity modify( @AuthenticationPrincipal CustomOAuth2User auth, @PathVariable("id") Long postId, diff --git a/src/main/java/com/palbang/unsemawang/community/controller/PostControllerImpl.java b/src/main/java/com/palbang/unsemawang/community/controller/PostControllerImpl.java index 8b5fff55..db07346c 100644 --- a/src/main/java/com/palbang/unsemawang/community/controller/PostControllerImpl.java +++ b/src/main/java/com/palbang/unsemawang/community/controller/PostControllerImpl.java @@ -1,5 +1,8 @@ package com.palbang.unsemawang.community.controller; +import java.net.URI; +import java.util.List; + import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.security.core.annotation.AuthenticationPrincipal; @@ -9,7 +12,9 @@ import org.springframework.web.bind.annotation.PutMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestPart; import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.multipart.MultipartFile; import com.palbang.unsemawang.common.constants.ResponseCode; import com.palbang.unsemawang.common.exception.GeneralException; @@ -17,6 +22,7 @@ import com.palbang.unsemawang.community.dto.request.PostRegisterRequest; import com.palbang.unsemawang.community.dto.request.PostUpdateRequest; import com.palbang.unsemawang.community.dto.response.PostRegisterResponse; +import com.palbang.unsemawang.community.entity.Post; import com.palbang.unsemawang.community.service.PostService; import com.palbang.unsemawang.oauth2.dto.CustomOAuth2User; @@ -31,11 +37,12 @@ public class PostControllerImpl implements PostController { private final PostService postService; /* 게시글 등록 */ - @PostMapping(produces = MediaType.APPLICATION_JSON_VALUE) + @PostMapping(consumes = MediaType.MULTIPART_FORM_DATA_VALUE) @Override public ResponseEntity write( @AuthenticationPrincipal CustomOAuth2User auth, - @Valid @RequestBody PostRegisterRequest postRegisterRequest + @RequestPart(value = "imageFiles", required = false) List imageFileList, + @Valid @RequestPart(value = "postDetail") PostRegisterRequest postRegisterRequest ) { if (auth == null || auth.getId() == null) { throw new GeneralException(ResponseCode.EMPTY_TOKEN); @@ -43,13 +50,13 @@ public ResponseEntity write( postRegisterRequest.updateMemberId(auth.getId()); - PostRegisterResponse postRegisterResponse = postService.register(postRegisterRequest); + Post savedPost = postService.register(postRegisterRequest, imageFileList); - return ResponseEntity.ok(postRegisterResponse); + return ResponseEntity.created(URI.create("/posts/" + savedPost.getId())).build(); } /* 게시글 수정 */ - @PutMapping(path = "/{id}", produces = MediaType.APPLICATION_JSON_VALUE) + @PutMapping(path = "/{id}", consumes = MediaType.APPLICATION_JSON_VALUE) @Override public ResponseEntity modify( @AuthenticationPrincipal CustomOAuth2User auth, From ae9154b82044555f7b9fe0e8c8d89964ef82ac39 Mon Sep 17 00:00:00 2001 From: yschoi123 Date: Wed, 22 Jan 2025 11:20:45 +0900 Subject: [PATCH 7/8] =?UTF-8?q?Test:=20=EB=B3=80=EA=B2=BD=EC=82=AC?= =?UTF-8?q?=ED=95=AD=EC=97=90=20=EB=94=B0=EB=A5=B8=20=ED=85=8C=EC=8A=A4?= =?UTF-8?q?=ED=8A=B8=20=EC=BD=94=EB=93=9C=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../community/controller/PostControllerTest.java | 11 +++++++---- .../unsemawang/community/service/PostServiceTest.java | 11 +++++++---- .../repository/FortuneContentReadRepositoryTest.java | 2 +- 3 files changed, 15 insertions(+), 9 deletions(-) diff --git a/src/test/java/com/palbang/unsemawang/community/controller/PostControllerTest.java b/src/test/java/com/palbang/unsemawang/community/controller/PostControllerTest.java index 26b0b51b..89d27400 100644 --- a/src/test/java/com/palbang/unsemawang/community/controller/PostControllerTest.java +++ b/src/test/java/com/palbang/unsemawang/community/controller/PostControllerTest.java @@ -10,6 +10,8 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest; import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.http.MediaType; +import org.springframework.mock.web.MockPart; import org.springframework.test.web.servlet.MockMvc; import com.fasterxml.jackson.databind.ObjectMapper; @@ -48,10 +50,11 @@ public void post_failedValidation_titleSize() throws Exception { .build(); // when, then : 요청을 보내면 Vaild 예외가 발생해야한다 - mockMvc.perform(post("/posts") - .contentType("application/json") - .content(objectMapper.writeValueAsString(postRegisterRequest)) - .with(csrf()) + mockMvc.perform( + multipart("/posts") + .part(new MockPart("postDetail", null, objectMapper.writeValueAsBytes(postRegisterRequest), + MediaType.APPLICATION_JSON)) + .with(csrf()) ) .andExpect(status().isBadRequest()) .andExpect(jsonPath("$.message").value("제목은 30자 이내여야 합니다")); diff --git a/src/test/java/com/palbang/unsemawang/community/service/PostServiceTest.java b/src/test/java/com/palbang/unsemawang/community/service/PostServiceTest.java index b09d350e..0fb9249b 100644 --- a/src/test/java/com/palbang/unsemawang/community/service/PostServiceTest.java +++ b/src/test/java/com/palbang/unsemawang/community/service/PostServiceTest.java @@ -12,10 +12,10 @@ import org.springframework.boot.test.mock.mockito.MockBean; import com.palbang.unsemawang.common.exception.GeneralException; +import com.palbang.unsemawang.common.util.file.service.FileService; import com.palbang.unsemawang.community.constant.CommunityCategory; import com.palbang.unsemawang.community.dto.request.PostRegisterRequest; import com.palbang.unsemawang.community.dto.request.PostUpdateRequest; -import com.palbang.unsemawang.community.dto.response.PostRegisterResponse; import com.palbang.unsemawang.community.entity.Post; import com.palbang.unsemawang.community.repository.PostRepository; import com.palbang.unsemawang.member.constant.MemberRole; @@ -34,6 +34,9 @@ class PostServiceTest { @MockBean private MemberRepository memberRepository; + @MockBean + private FileService fileService; + @Test @DisplayName(value = "게시글 등록 - 모든 값이 정상적으로 들어온 경우") public void postRegisterTest() { @@ -61,9 +64,9 @@ public void postRegisterTest() { when(postRepository.save(any(Post.class))).thenReturn(post); // then - PostRegisterResponse postRegisterResponse = postService.register(postRegisterRequest); - assertNotNull(postRegisterResponse); - assertEquals("게시글 등록이 성공했습니다!", postRegisterResponse.getMessage()); + Post registeredPost = postService.register(postRegisterRequest); + assertNotNull(registeredPost.getId()); + verify(postRepository, times(1)).save(any()); } diff --git a/src/test/java/com/palbang/unsemawang/fortune/repository/FortuneContentReadRepositoryTest.java b/src/test/java/com/palbang/unsemawang/fortune/repository/FortuneContentReadRepositoryTest.java index f3d4d114..718d0f04 100644 --- a/src/test/java/com/palbang/unsemawang/fortune/repository/FortuneContentReadRepositoryTest.java +++ b/src/test/java/com/palbang/unsemawang/fortune/repository/FortuneContentReadRepositoryTest.java @@ -56,7 +56,7 @@ private FortuneContent initFortuneContentEntity(int i, FortuneCategory category) .nameKo("테스트명" + i) .fortuneCategory(category) .path("/test-path" + i) - .isVisible(false) + .isVisible(true) .isDeleted(true) .registeredAt(LocalDateTime.now()) .updatedAt(LocalDateTime.now()) From dd5d36b13a48b1dadf513c5f5476f48321b99eaf Mon Sep 17 00:00:00 2001 From: yschoi123 Date: Wed, 22 Jan 2025 11:43:45 +0900 Subject: [PATCH 8/8] =?UTF-8?q?Feat:=20=EB=AA=85=EC=84=B8=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../community/controller/PostController.java | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/src/main/java/com/palbang/unsemawang/community/controller/PostController.java b/src/main/java/com/palbang/unsemawang/community/controller/PostController.java index 984aa20c..a2d3e7d5 100644 --- a/src/main/java/com/palbang/unsemawang/community/controller/PostController.java +++ b/src/main/java/com/palbang/unsemawang/community/controller/PostController.java @@ -7,10 +7,8 @@ import org.springframework.security.core.annotation.AuthenticationPrincipal; import org.springframework.web.bind.annotation.DeleteMapping; 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.RequestPart; import org.springframework.web.multipart.MultipartFile; import com.palbang.unsemawang.community.dto.request.PostRegisterRequest; @@ -19,21 +17,24 @@ import com.palbang.unsemawang.oauth2.dto.CustomOAuth2User; import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.responses.ApiResponse; import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.validation.Valid; -@Tag(name = "커뮤니티 게시글") +@Tag(name = "커뮤니티") public interface PostController { /* 게시글 등록 */ @Operation( description = "커뮤니티 게시글 등록 API 입니다. 인증 토큰이 담긴 쿠키를 직접 보내셔야 테스트가 가능합니다!", summary = "커뮤니티 게시글 등록" ) - @PostMapping(consumes = MediaType.MULTIPART_FORM_DATA_VALUE) + @ApiResponse(responseCode = "201", description = "이미지 업로드 및 게시글 등록 성공") + @ApiResponse(responseCode = "413", description = "이미지 용량 초과로 등록 실패") + @ApiResponse(responseCode = "400", description = "권한이 없는 회원이거나 유효하지 않는 데이터로 등록 실패") ResponseEntity write( - @AuthenticationPrincipal CustomOAuth2User auth, - @RequestPart List fileList, - @Valid @RequestPart PostRegisterRequest postRegisterRequest + CustomOAuth2User auth, + List fileList, + PostRegisterRequest postRegisterRequest ); /* 게시글 수정 */