11package com .rhkr8521 .mapping .api .member .service ;
22
33import com .rhkr8521 .mapping .api .aws .s3 .S3Service ;
4- import com .rhkr8521 .mapping .api .member .dto .AppleDTO ;
4+ import com .rhkr8521 .mapping .api .member .dto .AppleLoginDTO ;
55import com .rhkr8521 .mapping .api .member .dto .BlockedUserResponseDTO ;
66import com .rhkr8521 .mapping .api .member .dto .KakaoUserInfoDTO ;
77import com .rhkr8521 .mapping .api .member .dto .UserInfoResponseDTO ;
@@ -33,6 +33,7 @@ public class MemberService {
3333 private final JwtService jwtService ;
3434 private final OAuthService oAuthService ;
3535 private final S3Service s3Service ;
36+ private final AppleService appleService ;
3637 private final MemberBlockRepository memberBlockRepository ;
3738
3839 private static final List <String > FIRST_WORDS = Arrays .asList (
@@ -49,35 +50,6 @@ public class MemberService {
4950 "해파리" , "코알라" , "낙타" , "아기돼지" , "강치" , "이구아나" , "오징어" , "문어" , "갈매기" , "오소리"
5051 );
5152
52- @ Transactional
53- public Member registerOrLoginAppleUser (AppleDTO appleUserInfo ) {
54- Optional <Member > optionalMember = memberRepository .findBySocialId (appleUserInfo .getId ());
55- if (optionalMember .isPresent ()) {
56- Member member = optionalMember .get ();
57- // 탈퇴한 회원인 경우 복구 처리
58- if (member .isDeleted ()) {
59- member = member .toBuilder ()
60- .deleted (false )
61- .deletedAt (null )
62- .build ();
63- memberRepository .save (member );
64- }
65- return member ;
66- } else {
67- Member member = Member .builder ()
68- .socialId (appleUserInfo .getId ())
69- .email (appleUserInfo .getEmail () != null ? appleUserInfo .getEmail () : UUID .randomUUID () + "@socialUser.com" )
70- .nickname (generateRandomNickname ())
71- .imageUrl (null )
72- .role (Role .USER )
73- .deleted (false )
74- .deletedAt (null )
75- .build ();
76- memberRepository .save (member );
77- return member ;
78- }
79- }
80-
8153 private static String generateRandomNickname () {
8254 Random random = new Random ();
8355
@@ -152,6 +124,59 @@ private Member registerNewKakaoUser(KakaoUserInfoDTO kakaoUserInfo) {
152124 return member ;
153125 }
154126
127+ @ Transactional
128+ public Map <String , Object > loginWithApple (String code ) {
129+ if (code == null || code .isEmpty ()) {
130+ throw new BadRequestException (ErrorStatus .MISSING_APPLE_AUTHORIZATION_CODE_EXCEPTION .getMessage ());
131+ }
132+ AppleLoginDTO appleInfo ;
133+ try {
134+ appleInfo = appleService .getAppleInfo (code );
135+ } catch (Exception e ) {
136+ throw new BadRequestException (ErrorStatus .FAIL_ACCESS_APPLE_OAUTH_SERVICE .getMessage () + e .getMessage ());
137+ }
138+ // Apple 사용자 정보를 통한 회원가입 또는 로그인 처리
139+ Member member = registerOrLoginAppleUser (appleInfo );
140+ // JWT 토큰 발급
141+ Map <String , String > tokens = jwtService .createAccessAndRefreshToken (member .getEmail ());
142+ Map <String , Object > response = new HashMap <>();
143+ response .put ("tokens" , tokens );
144+ response .put ("role" , member .getRole ());
145+ response .put ("nickname" , member .getNickname ());
146+ response .put ("profileImage" , member .getImageUrl ());
147+ return response ;
148+ }
149+
150+ // 애플 사용자 정보를 사용해 회원가입 또는 로그인 처리
151+ @ Transactional
152+ public Member registerOrLoginAppleUser (AppleLoginDTO appleUserInfo ) {
153+ Optional <Member > optionalMember = memberRepository .findBySocialId (appleUserInfo .getId ());
154+ if (optionalMember .isPresent ()) {
155+ Member member = optionalMember .get ();
156+ // 탈퇴한 회원 복구 처리
157+ if (member .isDeleted ()) {
158+ member = member .toBuilder ()
159+ .deleted (false )
160+ .deletedAt (null )
161+ .build ();
162+ memberRepository .save (member );
163+ }
164+ return member ;
165+ } else {
166+ Member member = Member .builder ()
167+ .socialId (appleUserInfo .getId ())
168+ .email (appleUserInfo .getEmail () != null ? appleUserInfo .getEmail () : UUID .randomUUID () + "@socialUser.com" )
169+ .nickname (generateRandomNickname ())
170+ .imageUrl (null )
171+ .role (Role .USER )
172+ .deleted (false )
173+ .deletedAt (null )
174+ .build ();
175+ memberRepository .save (member );
176+ return member ;
177+ }
178+ }
179+
155180 @ Transactional (readOnly = true )
156181 public Long getUserIdByEmail (String email ) {
157182 Member member = memberRepository .findByEmail (email )
0 commit comments