
--- src/main/java/com/takensoft/cms/mber/dao/MberDAO.java
+++ src/main/java/com/takensoft/cms/mber/dao/MberDAO.java
... | ... | @@ -150,7 +150,7 @@ |
150 | 150 |
* |
151 | 151 |
* 회원 ID로 소셜 계정 목록 조회 |
152 | 152 |
*/ |
153 |
- List<MberSocialAccountVO> findSocialAccountsByMbrId(String mbrId); |
|
153 |
+ List<MberSocialAccountVO> findSocialAccountsByMbrId(String mbrId, boolean searchAll); |
|
154 | 154 |
|
155 | 155 |
/** |
156 | 156 |
* @param params - 회원 ID와 제공자 타입을 포함한 Map |
... | ... | @@ -190,6 +190,17 @@ |
190 | 190 |
int unlinkSocialAccount(HashMap<String, Object> params); |
191 | 191 |
|
192 | 192 |
/** |
193 |
+ * @param params - 재연동 정보를 포함한 Map |
|
194 |
+ * - mbrId: 회원 ID |
|
195 |
+ * - lgnOffrType: 제공자 타입 |
|
196 |
+ * - mdfr: 수정자 |
|
197 |
+ * @return int - 재연동 결과 |
|
198 |
+ * |
|
199 |
+ * 소셜 계정 재연동 |
|
200 |
+ */ |
|
201 |
+ int reLinkSocialAccount(HashMap<String, Object> params); |
|
202 |
+ |
|
203 |
+ /** |
|
193 | 204 |
* @param params - 메인 프로필 설정 정보를 포함한 Map |
194 | 205 |
* - mbrId: 회원 ID |
195 | 206 |
* - lgnOffrType: 제공자 타입 |
--- src/main/java/com/takensoft/cms/mber/service/Impl/UnifiedLoginServiceImpl.java
+++ src/main/java/com/takensoft/cms/mber/service/Impl/UnifiedLoginServiceImpl.java
... | ... | @@ -507,14 +507,14 @@ |
507 | 507 |
public boolean unlinkAccount(String mbrId, String lgnOffrType) { |
508 | 508 |
try { |
509 | 509 |
// 연동된 계정 개수 확인 (최소 1개는 유지해야 함) |
510 |
- List<MberSocialAccountVO> linkedAccounts = getLinkedAccounts(mbrId); |
|
510 |
+ List<MberSocialAccountVO> linkedAccounts = getLinkedAccounts(mbrId, false); |
|
511 | 511 |
if (linkedAccounts.size() <= 1) { |
512 | 512 |
throw new CustomNotFoundException("최소 하나의 로그인 방법은 유지해야 합니다."); |
513 | 513 |
} |
514 | 514 |
|
515 | 515 |
HashMap<String, Object> params = new HashMap<>(); |
516 | 516 |
params.put("mbrId", mbrId); |
517 |
- params.put("lgnOffrType", convertProviderToMbrType(lgnOffrType)); |
|
517 |
+ params.put("lgnOffrType", lgnOffrType); |
|
518 | 518 |
params.put("mdfr", "UNLINK_SYSTEM"); |
519 | 519 |
|
520 | 520 |
mberDAO.unlinkSocialAccount(params); |
... | ... | @@ -546,13 +546,35 @@ |
546 | 546 |
} |
547 | 547 |
|
548 | 548 |
/** |
549 |
+ * 계정 재연동 |
|
550 |
+ */ |
|
551 |
+ @Override |
|
552 |
+ @Transactional(rollbackFor = Exception.class) |
|
553 |
+ public boolean reLinkAccount(String mbrId, String lgnOffrType) { |
|
554 |
+ try { |
|
555 |
+ HashMap<String, Object> params = new HashMap<>(); |
|
556 |
+ params.put("mbrId", mbrId); |
|
557 |
+ params.put("lgnOffrType", lgnOffrType); |
|
558 |
+ params.put("mdfr", "RELINK_SYSTEM"); |
|
559 |
+ |
|
560 |
+ mberDAO.reLinkSocialAccount(params); |
|
561 |
+ |
|
562 |
+ return true; |
|
563 |
+ } catch (DataAccessException dae) { |
|
564 |
+ throw dae; |
|
565 |
+ } catch (Exception e) { |
|
566 |
+ throw e; |
|
567 |
+ } |
|
568 |
+ } |
|
569 |
+ |
|
570 |
+ /** |
|
549 | 571 |
* 연동된 계정 목록 조회 |
550 | 572 |
*/ |
551 | 573 |
@Override |
552 | 574 |
@Transactional(readOnly = true) |
553 |
- public List<MberSocialAccountVO> getLinkedAccounts(String mbrId) { |
|
575 |
+ public List<MberSocialAccountVO> getLinkedAccounts(String mbrId, boolean searchAll) { |
|
554 | 576 |
try { |
555 |
- return mberDAO.findSocialAccountsByMbrId(mbrId); |
|
577 |
+ return mberDAO.findSocialAccountsByMbrId(mbrId, searchAll); |
|
556 | 578 |
} catch (DataAccessException dae) { |
557 | 579 |
throw dae; |
558 | 580 |
} catch (Exception e) { |
... | ... | @@ -595,7 +617,7 @@ |
595 | 617 |
|
596 | 618 |
if (existingUser != null) { |
597 | 619 |
// 기존 계정의 연동 정보 조회 |
598 |
- List<MberSocialAccountVO> linkedAccounts = getLinkedAccounts(existingUser.getMbrId()); |
|
620 |
+ List<MberSocialAccountVO> linkedAccounts = getLinkedAccounts(existingUser.getMbrId(), false); |
|
599 | 621 |
|
600 | 622 |
// 새로운 제공자가 이미 연동되어 있는지 확인 |
601 | 623 |
boolean alreadyLinked = linkedAccounts.stream() |
--- src/main/java/com/takensoft/cms/mber/service/UnifiedLoginService.java
+++ src/main/java/com/takensoft/cms/mber/service/UnifiedLoginService.java
... | ... | @@ -59,11 +59,19 @@ |
59 | 59 |
boolean unlinkAccount(String mbrId, String lgnOffrType); |
60 | 60 |
|
61 | 61 |
/** |
62 |
+ * 계정 재연동 |
|
63 |
+ * @param mbrId 회원 ID |
|
64 |
+ * @param lgnOffrType 제공자 타입 |
|
65 |
+ * @return boolean 재연동 성공 여부 |
|
66 |
+ */ |
|
67 |
+ boolean reLinkAccount(String mbrId, String lgnOffrType); |
|
68 |
+ |
|
69 |
+ /** |
|
62 | 70 |
* 연동된 계정 목록 조회 |
63 | 71 |
* @param mbrId 회원 ID |
64 | 72 |
* @return List<MberSocialAccountVO> 연동된 계정 목록 |
65 | 73 |
*/ |
66 |
- List<MberSocialAccountVO> getLinkedAccounts(String mbrId); |
|
74 |
+ List<MberSocialAccountVO> getLinkedAccounts(String mbrId, boolean searchAll); |
|
67 | 75 |
|
68 | 76 |
/** |
69 | 77 |
* 메인 프로필 설정 |
--- src/main/java/com/takensoft/cms/mber/web/UnifiedLoginController.java
+++ src/main/java/com/takensoft/cms/mber/web/UnifiedLoginController.java
... | ... | @@ -39,7 +39,7 @@ |
39 | 39 |
public ResponseEntity<?> getLinkedAccounts() { |
40 | 40 |
try { |
41 | 41 |
String currentUserId = verificationService.getCurrentUserId(); |
42 |
- List<MberSocialAccountVO> linkedAccounts = unifiedLoginService.getLinkedAccounts(currentUserId); |
|
42 |
+ List<MberSocialAccountVO> linkedAccounts = unifiedLoginService.getLinkedAccounts(currentUserId, true); |
|
43 | 43 |
|
44 | 44 |
return resUtil.successRes(linkedAccounts, MessageCode.COMMON_SUCCESS); |
45 | 45 |
} catch (Exception e) { |
... | ... | @@ -94,6 +94,27 @@ |
94 | 94 |
} |
95 | 95 |
|
96 | 96 |
/** |
97 |
+ * 계정 재연동 |
|
98 |
+ */ |
|
99 |
+ @PostMapping("/reLinkAccount.json") |
|
100 |
+ public ResponseEntity<?> reLinkAccount(@RequestBody HashMap<String, String> params) { |
|
101 |
+ try { |
|
102 |
+ String currentUserId = verificationService.getCurrentUserId(); |
|
103 |
+ String lgnOffrType = params.get("lgnOffrType"); |
|
104 |
+ |
|
105 |
+ boolean success = unifiedLoginService.reLinkAccount(currentUserId, lgnOffrType); |
|
106 |
+ |
|
107 |
+ if (success) { |
|
108 |
+ return resUtil.successRes("계정 연동이 활성화되었습니다.", MessageCode.COMMON_SUCCESS); |
|
109 |
+ } else { |
|
110 |
+ return resUtil.errorRes(MessageCode.COMMON_UNKNOWN_ERROR); |
|
111 |
+ } |
|
112 |
+ } catch (Exception e) { |
|
113 |
+ return resUtil.errorRes(MessageCode.COMMON_UNKNOWN_ERROR); |
|
114 |
+ } |
|
115 |
+ } |
|
116 |
+ |
|
117 |
+ /** |
|
97 | 118 |
* 메인 프로필 설정 |
98 | 119 |
*/ |
99 | 120 |
@PostMapping("/setPrimaryProfile.json") |
--- src/main/resources/mybatis/mapper/mber/mber-SQL.xml
+++ src/main/resources/mybatis/mapper/mber/mber-SQL.xml
... | ... | @@ -420,12 +420,14 @@ |
420 | 420 |
</select> |
421 | 421 |
|
422 | 422 |
<!-- 회원 ID로 소셜 계정 목록 조회 --> |
423 |
- <select id="findSocialAccountsByMbrId" parameterType="String" resultMap="socialAccountMap"> |
|
423 |
+ <select id="findSocialAccountsByMbrId" parameterType="map" resultMap="socialAccountMap"> |
|
424 | 424 |
SELECT id, mbr_id, lgn_offr_type, sns_lgn_id, lgn_id, sns_eml, sns_nm, |
425 | 425 |
main_prfl_yn, link_vtlz_yn, link_dt, link_cncltn_dt, rgtr, reg_dt, mdfr, mdfcn_dt |
426 | 426 |
FROM mbr_sns_acnt_info |
427 | 427 |
WHERE mbr_id = #{mbrId} |
428 |
- AND link_vtlz_yn = true |
|
428 |
+ <if test="searchAll != null and searchAll == false"> |
|
429 |
+ AND link_vtlz_yn = true |
|
430 |
+ </if> |
|
429 | 431 |
ORDER BY main_prfl_yn DESC, link_dt ASC |
430 | 432 |
</select> |
431 | 433 |
|
... | ... | @@ -487,6 +489,18 @@ |
487 | 489 |
</if> |
488 | 490 |
</update> |
489 | 491 |
|
492 |
+ <!-- 소셜 계정 재연동 --> |
|
493 |
+ <update id="reLinkSocialAccount" parameterType="map"> |
|
494 |
+ UPDATE mbr_sns_acnt_info |
|
495 |
+ SET link_vtlz_yn = true, |
|
496 |
+ mdfr = #{mdfr}, |
|
497 |
+ mdfcn_dt = NOW() |
|
498 |
+ WHERE mbr_id = #{mbrId} |
|
499 |
+ <if test="lgnOffrType != null and lgnOffrType != ''"> |
|
500 |
+ AND lgn_offr_type = #{lgnOffrType} |
|
501 |
+ </if> |
|
502 |
+ </update> |
|
503 |
+ |
|
490 | 504 |
<!-- 메인 프로필 설정 --> |
491 | 505 |
<update id="setPrimaryProfile" parameterType="map"> |
492 | 506 |
UPDATE mbr_sns_acnt_info |
Add a comment
Delete comment
Once you delete this comment, you won't be able to recover it. Are you sure you want to delete this comment?