@@ -55,8 +55,15 @@ public class UserService {
5555 */
5656 @ Transactional
5757 public TokenDto signUp (SignUpRequest request ) {
58+ SignInType signInType = SignInType .convert (request .getSignInType ());
59+ String email = request .getEmail ();
60+ User savedUser ;
5861
59- User savedUser = saveUser (request );
62+ if (signInType .equals (SignInType .KAKAO )) {
63+ savedUser = signUpByKakao (email );
64+ } else {
65+ savedUser = signUpByEmail (email , request .getPassword ());
66+ }
6067
6168 List <MealTime > mealTimes = mealTimeService .saveMealTimes (request .getMealTime (), savedUser .getId ());
6269
@@ -65,8 +72,12 @@ public TokenDto signUp(SignUpRequest request) {
6572 throw new InvalidMealTimeCountException ();
6673 }
6774
68- TokenDto tokenDto = jwtTokenProvider .createAllToken (request .getEmail ());
69- RefreshToken refreshToken = new RefreshToken (tokenDto .getRefreshToken (), request .getEmail ());
75+ TokenDto tokenDto = jwtTokenProvider .createAllToken (email , signInType );
76+ RefreshToken refreshToken = new RefreshToken (
77+ tokenDto .getRefreshToken (),
78+ email ,
79+ signInType
80+ );
7081 refreshTokenRepository .save (refreshToken );
7182 return tokenDto ;
7283 }
@@ -79,24 +90,34 @@ public TokenDto signUp(SignUpRequest request) {
7990 */
8091 @ Transactional
8192 public TokenDto signIn (SignInRequest request ) {
82- Optional <User > optionalUser = userRepository .findByEmail (request .getEmail ());
83- if (optionalUser .isEmpty () || !optionalUser .get ().getSignInType ().name ().equals (request .getSignInType ())) {
93+ String email = request .getEmail ();
94+ SignInType signInType = SignInType .convert (request .getSignInType ());
95+
96+ Optional <User > optionalUser = userRepository
97+ .findByEmailAndSignInType (email , signInType );
98+
99+ if (optionalUser .isEmpty () || !optionalUser .get ().getSignInType ().equals (signInType )) {
84100 throw new NotFoundUserException ();
85101 }
86102
87103 User user = optionalUser .get ();
88104
89- if (request . getSignInType (). equals (" EMAIL" ) && !passwordEncoder .matches (request .getPassword (), user .getPassword ())) {
105+ if (signInType . equals (SignInType . EMAIL ) && !passwordEncoder .matches (request .getPassword (), user .getPassword ())) {
90106 throw new NotMatchPasswordException ();
91107 }
92108
93- TokenDto tokenDto = jwtTokenProvider .createAllToken (request .getEmail ());
94- Optional <RefreshToken > refreshToken = refreshTokenRepository .findRefreshTokenByEmail (request .getEmail ());
109+ TokenDto tokenDto = jwtTokenProvider .createAllToken (email , signInType );
110+ Optional <RefreshToken > refreshToken = refreshTokenRepository
111+ .findRefreshTokenByEmailAndSignInType (email , signInType );
95112
96113 if (refreshToken .isPresent ()) {
97114 refreshTokenRepository .save (refreshToken .get ().updateToken (tokenDto .getRefreshToken ()));
98115 } else {
99- RefreshToken newToken = new RefreshToken (tokenDto .getRefreshToken (), request .getEmail ());
116+ RefreshToken newToken = new RefreshToken (
117+ tokenDto .getRefreshToken (),
118+ email ,
119+ signInType
120+ );
100121 refreshTokenRepository .save (newToken );
101122 }
102123
@@ -158,6 +179,7 @@ public UserDto getUserInfo(CustomUserDetails userDetails) {
158179 public TokenDto reissueToken (ReissueRequest reissueRequest ) {
159180 String refreshToken = reissueRequest .getRefreshToken ();
160181 String email = jwtTokenProvider .getEmailFromToken (refreshToken );
182+ SignInType signInType = jwtTokenProvider .getSignInTypeFromToken (refreshToken );
161183
162184 if (email .isEmpty ()) {
163185 throw new InvalidTokenException ();
@@ -167,14 +189,14 @@ public TokenDto reissueToken(ReissueRequest reissueRequest) {
167189 throw new TokenExpiredExcpetion ();
168190 }
169191
170- RefreshToken storedToken = refreshTokenRepository .findRefreshTokenByEmail (email )
192+ RefreshToken storedToken = refreshTokenRepository .findRefreshTokenByEmailAndSignInType (email , signInType )
171193 .orElseThrow (NotMatchTokenException ::new );
172194
173- String newAccessToken = jwtTokenProvider .createToken (email , "Access" );
195+ String newAccessToken = jwtTokenProvider .createToken (email , signInType , "Access" );
174196 String newRefreshToken = reissueRequest .getRefreshToken ();
175197
176198 if (jwtTokenProvider .validateToken (refreshToken )) {
177- newRefreshToken = jwtTokenProvider .createToken (email , "Refresh" );
199+ newRefreshToken = jwtTokenProvider .createToken (email , signInType , "Refresh" );
178200 storedToken .updateToken (newRefreshToken );
179201 refreshTokenRepository .save (storedToken );
180202 }
@@ -198,8 +220,9 @@ public void signOut(HttpServletRequest request) {
198220 }
199221
200222 String email = jwtTokenProvider .getEmailFromToken (token );
223+ SignInType signInType = jwtTokenProvider .getSignInTypeFromToken (token );
201224
202- refreshTokenRepository .findRefreshTokenByEmail (email )
225+ refreshTokenRepository .findRefreshTokenByEmailAndSignInType (email , signInType )
203226 .ifPresent (refreshTokenRepository ::delete );
204227 }
205228
@@ -212,9 +235,9 @@ public void signOut(HttpServletRequest request) {
212235 public KakaoExistenceResponse validateKakaoUserExists (PostEmailRequest request ) {
213236 String email = request .getEmail ();
214237
215- Optional <User > optionalUser = userRepository .findByEmail (email );
238+ Optional <User > optionalUser = userRepository .findByEmailAndSignInType (email , SignInType . KAKAO );
216239
217- if (optionalUser .isPresent () && optionalUser .get ().getSignInType () == SignInType .KAKAO ) {
240+ if (optionalUser .isPresent () && optionalUser .get ().getSignInType (). equals ( SignInType .KAKAO ) ) {
218241 return KakaoExistenceResponse .from (true );
219242 }
220243
@@ -231,45 +254,26 @@ public void removeUser(Long userId) {
231254 User user = userRepository .findById (userId )
232255 .orElseThrow (NotFoundUserException ::new );
233256
234- refreshTokenRepository .findRefreshTokenByEmail (user .getEmail ())
257+ refreshTokenRepository .findRefreshTokenByEmailAndSignInType (user .getEmail (), user . getSignInType ())
235258 .ifPresent (refreshTokenRepository ::delete );
236259
237260 userRepository .delete (user );
238261 }
239262
240- /**
241- * 유저 정보를 저장한다.
242- *
243- * @param request
244- * @return
245- * @throws UnsupportedSignInTypeException 지원하지 않는 SignInType을 요청한 경우
246- */
247- private User saveUser (SignUpRequest request ) {
248- if (request .getSignInType ().equals ("EMAIL" )) {
249- return signUpByEmail (request );
250- }
251-
252- if (request .getSignInType ().equals ("KAKAO" )) {
253- return signUpByKakao (request );
254- }
255-
256- throw new UnsupportedSignInTypeException ();
257- }
258-
259263 /**
260264 * Kakao 유저를 저장한다.
261265 *
262- * @param request
266+ * @param email
263267 * @return
264268 */
265- private User signUpByKakao (SignUpRequest request ) {
266- Optional <User > optionalUser = userRepository .findByEmail ( request . getEmail () );
269+ private User signUpByKakao (String email ) {
270+ Optional <User > optionalUser = userRepository .findByEmailAndSignInType ( email , SignInType . KAKAO );
267271 if (optionalUser .isPresent () && optionalUser .get ().getSignInType () == SignInType .KAKAO ) {
268272 throw new DuplicateEmailException ();
269273 }
270274
271275 User user = User .builder ()
272- .email (request . getEmail () )
276+ .email (email )
273277 .signInType (SignInType .KAKAO )
274278 .build ();
275279
@@ -279,19 +283,20 @@ private User signUpByKakao(SignUpRequest request) {
279283 /**
280284 * Email 유저를 저장한다.
281285 *
282- * @param request
286+ * @param email
287+ * @param password
283288 * @return
284289 */
285- private User signUpByEmail (SignUpRequest request ) {
286- Optional <User > optionalUser = userRepository .findByEmail ( request . getEmail () );
290+ private User signUpByEmail (String email , String password ) {
291+ Optional <User > optionalUser = userRepository .findByEmailAndSignInType ( email , SignInType . EMAIL );
287292 if (optionalUser .isPresent () && optionalUser .get ().getSignInType () == SignInType .EMAIL ) {
288293 throw new DuplicateEmailException ();
289294 }
290295
291- String encodedPassword = passwordEncoder .encode (request . getPassword () );
296+ String encodedPassword = passwordEncoder .encode (password );
292297
293298 User user = User .builder ()
294- .email (request . getEmail () )
299+ .email (email )
295300 .password (encodedPassword )
296301 .signInType (SignInType .EMAIL )
297302 .build ();
0 commit comments