@@ -40,6 +40,9 @@ final class AccountViewModel: Store {
4040 }
4141
4242 enum AlertType {
43+ case linkEmailNotFound
44+ case linkEmailMismatch
45+ case linkCredentialAlreadyInUse
4346 case error
4447 }
4548
@@ -114,7 +117,8 @@ final class AccountViewModel: Store {
114117 let ( currentProvider, allProviders) = try await fetchProvidersUseCase. execute ( )
115118 send ( . updateProviders( currentProvider: currentProvider, allProviders: allProviders) )
116119 } catch {
117- send ( . setAlert( isPresented: true , type: . error) )
120+ if error. isSocialLoginCancelled { return }
121+ send ( . setAlert( isPresented: true , type: linkAlertType ( for: error) ) )
118122 }
119123 }
120124 case . unlink( let provider) :
@@ -137,8 +141,34 @@ final class AccountViewModel: Store {
137141}
138142
139143private extension AccountViewModel {
144+ func linkAlertType( for error: Error ) -> AlertType {
145+ guard let authError = error as? AuthError else {
146+ return . error
147+ }
148+
149+ switch authError {
150+ case . linkEmailNotFound:
151+ return . linkEmailNotFound
152+ case . linkEmailMismatch:
153+ return . linkEmailMismatch
154+ case . linkCredentialAlreadyInUse:
155+ return . linkCredentialAlreadyInUse
156+ case . notAuthenticated, . failedToUnlinkLastProvider, . unsupportedProvider:
157+ return . error
158+ }
159+ }
160+
140161 func setAlert( _ state: inout State , isPresented: Bool , type: AlertType ? ) {
141162 switch type {
163+ case . linkEmailNotFound:
164+ state. alertTitle = " 이메일 확인 불가 "
165+ state. alertMessage = " 선택한 계정의 이메일 정보를 확인할 수 없어 연결할 수 없어요. 계정 설정을 확인한 뒤 다시 시도해주세요. "
166+ case . linkEmailMismatch:
167+ state. alertTitle = " 연결할 수 없음 "
168+ state. alertMessage = " 현재 로그인한 계정과 선택한 계정의 이메일이 달라 연결할 수 없어요. 같은 이메일의 계정으로 다시 시도해주세요. "
169+ case . linkCredentialAlreadyInUse:
170+ state. alertTitle = " 이미 연결된 계정 "
171+ state. alertMessage = " 선택한 계정은 이미 다른 계정에 연결되어 있어요. 해당 계정으로 로그인한 뒤 이용해주세요. "
142172 case . error:
143173 state. alertTitle = " 오류 "
144174 state. alertMessage = " 문제가 발생했습니다. 잠시 후 다시 시도해주세요. "
0 commit comments