11package com .back .domain .user .service ;
22
33import com .back .domain .user .dto .RefreshTokenResDto ;
4+ import com .back .domain .user .dto .UserMeResDto ;
45import com .back .domain .user .entity .User ;
56import com .back .domain .user .repository .UserRepository ;
67import com .back .global .exception .ServiceException ;
78import com .back .global .jwt .JwtUtil ;
89import com .back .global .jwt .refreshToken .entity .RefreshToken ;
910import com .back .global .jwt .refreshToken .repository .RefreshTokenRepository ;
1011import com .back .global .jwt .refreshToken .service .RefreshTokenService ;
12+ import com .back .global .rq .Rq ;
1113import com .back .global .rsData .RsData ;
1214import jakarta .servlet .http .HttpServletRequest ;
1315import jakarta .servlet .http .HttpServletResponse ;
@@ -76,6 +78,7 @@ public class UserAuthService {
7678 private final UserRepository userRepository ;
7779 private final RefreshTokenService refreshTokenService ;
7880 private final RefreshTokenRepository refreshTokenRepository ;
81+ private final Rq rq ;
7982
8083 //OAuth 관련
8184
@@ -211,4 +214,50 @@ public void setFirstLoginFalse(Long id) {
211214 Optional <User > userOpt = userRepository .findById (id );
212215 userOpt .ifPresent (user -> user .setFirstLogin (false ));
213216 }
217+
218+ // 현재 로그인한 사용자 정보 조회 (세션 검증용)
219+ public UserMeResDto getCurrentUser () {
220+ try {
221+ User actor = rq .getActor ();
222+
223+ if (actor == null ) {
224+ log .debug ("인증되지 않은 사용자" );
225+ throw new ServiceException (401 , "인증되지 않은 사용자" );
226+ }
227+
228+ Optional <User > userOpt = userRepository .findById (actor .getId ());
229+ if (userOpt .isEmpty ()) {
230+ log .warn ("사용자 ID {}를 DB에서 찾을 수 없음 (토큰은 유효하나 사용자 삭제됨)" , actor .getId ());
231+ throw new ServiceException (401 , "인증되지 않은 사용자" );
232+ }
233+
234+ User user = userOpt .get ();
235+ String provider = extractProvider (user .getOauthId ());
236+
237+ return UserMeResDto .builder ()
238+ .user (UserMeResDto .UserInfo .builder ()
239+ .id (user .getId ().toString ())
240+ .email (user .getEmail ())
241+ .nickname (user .getNickname ())
242+ .isFirstLogin (user .isFirstLogin ())
243+ .abvDegree (user .getAbvDegree ())
244+ .provider (provider )
245+ .build ())
246+ .build ();
247+
248+ } catch (ServiceException e ) {
249+ throw e ;
250+ } catch (Exception e ) {
251+ log .error ("사용자 정보 조회 중 서버 오류 발생: {}" , e .getMessage (), e );
252+ throw new ServiceException (500 , "서버 내부 오류" );
253+ }
254+ }
255+
256+ private String extractProvider (String oauthId ) {
257+ if (oauthId == null || oauthId .isBlank ()) {
258+ return "unknown" ;
259+ }
260+ String [] parts = oauthId .split ("_" , 2 );
261+ return parts .length > 0 ? parts [0 ] : "unknown" ;
262+ }
214263}
0 commit comments