From f992a5339d12d35500db3040fb23d8bf9b3db745 Mon Sep 17 00:00:00 2001 From: seojin Yoon <90759319+7zrv@users.noreply.github.com> Date: Mon, 3 Feb 2025 22:55:16 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20=EA=B8=B0=EA=B4=80=20=ED=94=84=EB=A1=9C?= =?UTF-8?q?=ED=95=84=20=EC=9D=B4=EB=AF=B8=EC=A7=80=20=EB=B3=80=EA=B2=BD=20?= =?UTF-8?q?=EC=BB=A8=ED=8A=B8=EB=A1=A4=EB=9F=AC=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 프로필 이미지 업데이트 엔드 포인트 구현 - 테스트및 검증 완료 --- .../CenterCommandApiController.java | 37 ++++++++++++++ .../CenterCommandApiControllerTest.java | 51 +++++++++++++++++++ 2 files changed, 88 insertions(+) create mode 100644 src/main/java/com/somemore/center/controller/CenterCommandApiController.java create mode 100644 src/test/java/com/somemore/center/controller/CenterCommandApiControllerTest.java diff --git a/src/main/java/com/somemore/center/controller/CenterCommandApiController.java b/src/main/java/com/somemore/center/controller/CenterCommandApiController.java new file mode 100644 index 00000000..d8f63ed7 --- /dev/null +++ b/src/main/java/com/somemore/center/controller/CenterCommandApiController.java @@ -0,0 +1,37 @@ +package com.somemore.center.controller; + +import com.somemore.center.dto.request.CenterProfileImgUpdateRequestDto; +import com.somemore.center.usecase.UpdateCenterProfileImgUseCase; +import com.somemore.global.auth.annotation.UserId; +import com.somemore.global.common.response.ApiResponse; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.RequiredArgsConstructor; +import org.springframework.security.access.annotation.Secured; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.UUID; + +@Tag(name = "Center Command API", description = "기관 프로필 수정 API") +@RequiredArgsConstructor +@RequestMapping("/api/center") +@RestController +public class CenterCommandApiController { + + private final UpdateCenterProfileImgUseCase updateCenterProfileImgUseCase; + + @Secured("ROLE_CENTER") + @Operation(summary = "기관 프로필 이미지 수정", description = "기관의 프로필 이미지를 수정합니다.") + @PutMapping("/profileImgUpdate") + public ApiResponse updateCenterProfile( + @UserId UUID centerId, + CenterProfileImgUpdateRequestDto requestDto + ) { + + String presignedUrl = updateCenterProfileImgUseCase.updateCenterProfileImg(centerId, requestDto); + + return ApiResponse.ok(presignedUrl,"센터 프로필 수정 성공"); + } +} diff --git a/src/test/java/com/somemore/center/controller/CenterCommandApiControllerTest.java b/src/test/java/com/somemore/center/controller/CenterCommandApiControllerTest.java new file mode 100644 index 00000000..ac895fa2 --- /dev/null +++ b/src/test/java/com/somemore/center/controller/CenterCommandApiControllerTest.java @@ -0,0 +1,51 @@ +package com.somemore.center.controller; + +import com.somemore.center.dto.request.CenterProfileImgUpdateRequestDto; +import com.somemore.center.usecase.UpdateCenterProfileImgUseCase; +import com.somemore.support.ControllerTestSupport; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.DisplayName; +import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.http.MediaType; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.put; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; + +import java.util.UUID; + +class CenterCommandApiControllerTest extends ControllerTestSupport { + + @MockBean + private UpdateCenterProfileImgUseCase updateCenterProfileImgUseCase; + + @DisplayName("기관 프로필 이미지를 수정할 수 있다. (controller)") + @Test + void updateCenterProfile() throws Exception { + + // given + UUID centerId = UUID.randomUUID(); + CenterProfileImgUpdateRequestDto requestDto = new CenterProfileImgUpdateRequestDto("test.jpg"); + + String expectedPresignedUrl = "https://example.com/presigned-url/test.jpg"; + when(updateCenterProfileImgUseCase.updateCenterProfileImg(centerId, requestDto)) + .thenReturn(expectedPresignedUrl); + + // when & then + mockMvc.perform( + put("/api/center/profileImgUpdate") + .header("X-User-Id", centerId.toString()) // @UserId를 시뮬레이션 + .contentType(MediaType.APPLICATION_JSON) + .content(objectMapper.writeValueAsString(requestDto)) + ) + .andExpect(status().isOk()) + .andExpect(jsonPath("$.code").value("200")) + .andExpect(jsonPath("$.message").value("센터 프로필 수정 성공")) + .andExpect(jsonPath("$.data").value(expectedPresignedUrl)); + + verify(updateCenterProfileImgUseCase, times(1)).updateCenterProfileImg(centerId, requestDto); + } + +} \ No newline at end of file