From 7985d485dde236025ed04a21db1f3854c4a89c0a Mon Sep 17 00:00:00 2001 From: finger9999 <161580182+finger9999@users.noreply.github.com> Date: Sun, 6 Jul 2025 04:07:49 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20=EB=82=B4=20=EB=8B=89=EB=84=A4=EC=9E=84?= =?UTF-8?q?=20=EC=A1=B0=ED=9A=8C=20api?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../user/controller/UserController.java | 54 +++++++++++++++++++ .../domain/user/converter/UserConverter.java | 14 +++++ .../umc/domain/user/dto/UserResponseDTO.java | 17 ++++++ 3 files changed, 85 insertions(+) create mode 100644 src/main/java/com/umc/domain/user/controller/UserController.java create mode 100644 src/main/java/com/umc/domain/user/converter/UserConverter.java create mode 100644 src/main/java/com/umc/domain/user/dto/UserResponseDTO.java diff --git a/src/main/java/com/umc/domain/user/controller/UserController.java b/src/main/java/com/umc/domain/user/controller/UserController.java new file mode 100644 index 0000000..1c1e045 --- /dev/null +++ b/src/main/java/com/umc/domain/user/controller/UserController.java @@ -0,0 +1,54 @@ +package com.umc.domain.user.controller; + +import com.umc.auth.util.JwtUtil; +import com.umc.common.response.ApiResponse; +import com.umc.domain.user.converter.UserConverter; +import com.umc.domain.user.dto.UserResponseDTO; +import com.umc.domain.user.entity.User; +import com.umc.domain.user.repository.UserRepository; +import com.umc.global.exception.BusinessException; +import com.umc.global.exception.ErrorCode; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.security.SecurityRequirement; +import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.servlet.http.HttpServletRequest; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestHeader; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.HashMap; +import java.util.Map; + +@RestController +@RequestMapping("/api/users") +@RequiredArgsConstructor +@Tag(name = "유저 API", description = "유저 정보 관련 API") +@Slf4j +public class UserController { + + private final JwtUtil jwtUtil; + + @GetMapping("/me") + @Operation(summary = "자신의 닉네임 조회", description = "JWT 토큰을 기반으로 현재 유저의 닉네임을 조회합니다.", + security = @SecurityRequirement(name = "bearerAuth")) + public ResponseEntity> getMyNickname(HttpServletRequest request) { + String authorization = request.getHeader("Authorization"); + log.info("닉네임 조회 요청 - Authorization: {}", authorization); + + if (authorization == null || authorization.trim().isEmpty()) { + throw new BusinessException(ErrorCode.TOKEN_INVALID, "Authorization 헤더가 없습니다."); + } + + User user = jwtUtil.getUserFromHeader(authorization); + UserResponseDTO.MyNameDTO response = UserConverter.toMyNameDTO(user); + + return ResponseEntity.ok(ApiResponse.success("닉네임 조회 성공", response)); + } +} + + + diff --git a/src/main/java/com/umc/domain/user/converter/UserConverter.java b/src/main/java/com/umc/domain/user/converter/UserConverter.java new file mode 100644 index 0000000..c54fcd9 --- /dev/null +++ b/src/main/java/com/umc/domain/user/converter/UserConverter.java @@ -0,0 +1,14 @@ +package com.umc.domain.user.converter; + +import com.umc.domain.user.dto.UserResponseDTO; +import com.umc.domain.user.entity.User; + +public class UserConverter { + + public static UserResponseDTO.MyNameDTO toMyNameDTO(User user) { + return UserResponseDTO.MyNameDTO.builder() + .nickname(user.getNickname()) + .build(); + } +} + diff --git a/src/main/java/com/umc/domain/user/dto/UserResponseDTO.java b/src/main/java/com/umc/domain/user/dto/UserResponseDTO.java new file mode 100644 index 0000000..20eaf6c --- /dev/null +++ b/src/main/java/com/umc/domain/user/dto/UserResponseDTO.java @@ -0,0 +1,17 @@ +package com.umc.domain.user.dto; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; + +public class UserResponseDTO { + + @Builder + @Getter + @NoArgsConstructor + @AllArgsConstructor + public static class MyNameDTO { + private String nickname; + } +}