package com.takensoft.cms.mber.service; import com.takensoft.cms.mber.vo.MberSocialAccountVO; import com.takensoft.cms.mber.vo.MberVO; import jakarta.servlet.http.HttpServletRequest; import java.util.HashMap; import java.util.List; /** * @author takensoft * @since 2025.05.29 * @modification * since | author | description * 2025.05.29 | takensoft | 최초 등록 * * 통합 로그인 서비스 인터페이스 */ public interface UnifiedLoginService { /** * 통합 로그인 인증 * @param lgnOffrType 제공자 타입 (SYSTEM, KAKAO, NAVER, GOOGLE) * @param identifier 식별자 (로그인ID 또는 소셜ID) * @param password 비밀번호 (시스템 로그인시만 필요) * @return MberVO 인증된 사용자 정보 */ MberVO authenticateUser(String lgnOffrType, String identifier, String password); /** * OAuth2 사용자 처리 (가입 또는 연동) * @param email 이메일 * @param lgnOffrType 제공자 타입 * @param snsLgnId 소셜 고유 ID * @param name 이름 * @param request HTTP 요청 객체 * @return MberVO 처리된 사용자 정보 */ MberVO processOAuth2User(String email, String lgnOffrType, String snsLgnId, String name, HttpServletRequest request); /** * 계정 연동 * @param mbrId 회원 ID * @param lgnOffrType 제공자 타입 * @param snsLgnId 소셜 ID (시스템일 경우 null) * @param lgnId 로그인 ID (소셜일 경우 null) * @param email 이메일 * @param name 이름 * @return boolean 연동 성공 여부 */ boolean linkAccount(String mbrId, String lgnOffrType, String snsLgnId, String lgnId, String email, String name); /** * 계정 연동 해지 * @param mbrId 회원 ID * @param lgnOffrType 제공자 타입 * @return boolean 해지 성공 여부 */ boolean unlinkAccount(String mbrId, String lgnOffrType); /** * 계정 재연동 * @param mbrId 회원 ID * @param lgnOffrType 제공자 타입 * @return boolean 재연동 성공 여부 */ boolean reLinkAccount(String mbrId, String lgnOffrType); /** * 연동된 계정 목록 조회 * @param mbrId 회원 ID * @return List 연동된 계정 목록 */ List getLinkedAccounts(String mbrId, boolean searchAll); /** * 메인 프로필 설정 * @param mbrId 회원 ID * @param lgnOffrType 제공자 타입 * @return boolean 설정 성공 여부 */ boolean setPrimaryProfile(String mbrId, String lgnOffrType); /** * 계정 통합 제안 * @param email 이메일 * @param newProviderType 새로운 제공자 타입 * @return HashMap 통합 제안 정보 */ HashMap suggestAccountMerge(String email, String newProviderType); /** * 제공자명을 회원타입으로 변환 * @param provider 제공자명 * @return String 변환된 제공자 명 */ String convertProviderToMbrType(String provider); }