Skip to content

Commit 30e52b3

Browse files
committed
feat #47: 남은 API 연동
1 parent 5b156fc commit 30e52b3

7 files changed

+46
-10
lines changed

dogether/Data/Network/Response/GetMySummaryResponse.swift

-2
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,7 @@ import Foundation
99

1010
struct GetMySummaryResponse: Decodable {
1111
let totalTodoCount: Int
12-
/// 인증한 전체 투두 개수
1312
let totalCertificatedCount: Int
14-
/// 인정받은 투두 개수
1513
let totalApprovedCount: Int
1614
let totalRejectedCount: Int
1715
}

dogether/Domain/UseCases/AppleSignInDelegate.swift

+7-5
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,11 @@ import AuthenticationServices
1010

1111
final class AppleSignInDelegate: NSObject, ASAuthorizationControllerDelegate {
1212

13-
private var continuation: CheckedContinuation<(identityToken: String, fullUserName: String), Error>?
13+
private var continuation: CheckedContinuation<(identityToken: String, fullUserName: String, authorizationCode: String), Error>?
1414

15+
// TODO: 회원 탈퇴 부분 임시로 추가, 추후 수정
1516
// 애플 로그인 결과 비동기 반환
16-
var signInResult: (identityToken: String, fullUserName: String)? {
17+
var signInResult: (identityToken: String, fullUserName: String, authorizationCode: String)? {
1718
get async throws {
1819
return try await withCheckedThrowingContinuation { continuation in
1920
self.continuation = continuation
@@ -33,7 +34,8 @@ final class AppleSignInDelegate: NSObject, ASAuthorizationControllerDelegate {
3334

3435
guard let identityTokenData = appleIDCrendential.identityToken,
3536
let identityTokenString = String(data: identityTokenData, encoding: .utf8),
36-
let authrizationCode = appleIDCrendential.authorizationCode else {
37+
let authorizationCode = appleIDCrendential.authorizationCode,
38+
let authorizationCodeString = String(data: authorizationCode, encoding: .utf8) else {
3739
continuation?.resume(throwing: NetworkError.unknown)
3840
return
3941
}
@@ -48,11 +50,11 @@ final class AppleSignInDelegate: NSObject, ASAuthorizationControllerDelegate {
4850
print("사용자 ID: \(userIdentifier)")
4951
print("사용자 이름: \(fullUserName)")
5052
print("사용자 Token: \(identityTokenString)")
51-
print("사용자 authorizationCode: \(authrizationCode)")
53+
print("사용자 authorizationCode: \(authorizationCodeString)")
5254
print("===========================================")
5355

5456
// 비동기 결과 반환
55-
continuation?.resume(returning: (identityTokenString, fullUserName))
57+
continuation?.resume(returning: (identityTokenString, fullUserName, authorizationCodeString))
5658

5759
// MARK: - 암호 기반 인증에 성공한 경우, 사용자의 인증 정보를 확인하고 필요한 작업을 수행합니다
5860
case let passwordCredential as ASPasswordCredential:

dogether/Presentation/View/GroupJoinViewController.swift

+1
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,7 @@ final class GroupJoinViewController: BaseViewController {
101101
Task {
102102
do {
103103
let request = JoinGroupRequest(joinCode: enterCode) // "kelly-join-code"
104+
// TODO: 추후 이슈 #6 수정되면 response 수정하고 completeViewController로 데이터 넘기는 작업 추가
104105
let response: Void = try await NetworkManager.shared.request(GroupsRouter.joinGroup(joinGroupRequest: request))
105106

106107
// 가입 성공 시 다음 화면 이동

dogether/Presentation/View/MyPageViewController.swift

+14-2
Original file line numberDiff line numberDiff line change
@@ -177,6 +177,8 @@ final class MyPageViewController: BaseViewController {
177177
}
178178

179179
private func setupGestureReconizers() {
180+
goToButton.addTarget(self, action: #selector(goToDashBoard), for: .touchUpInside)
181+
180182
let leaveGroupTap = UITapGestureRecognizer(target: self, action: #selector(leaveGroupTapped))
181183
leaveGroupView.addGestureRecognizer(leaveGroupTap)
182184

@@ -187,6 +189,10 @@ final class MyPageViewController: BaseViewController {
187189
withdrawView.addGestureRecognizer(withdrawTap)
188190
}
189191

192+
@objc private func goToDashBoard() {
193+
NavigationManager.shared.pushViewController(MyDashboardViewController())
194+
}
195+
190196
@objc private func leaveGroupTapped() {
191197
AlertHelper.alert(on: self,
192198
title: "현재 그룹을 탈퇴하시겠어요?",
@@ -226,8 +232,14 @@ final class MyPageViewController: BaseViewController {
226232
message: "탈퇴하면 모든 데이터가 삭제되며\n복구할 수 없어요.",
227233
okTitle: "탈퇴하기") {
228234

229-
// 온보딩 화면으로 이동
230-
DispatchQueue.main.asyncAfter(deadline: .now() + 1) {
235+
// TODO: 회원 탈퇴 부분 임시로 추가, 추후 수정
236+
Task { @MainActor in
237+
let viewModel = OnboardingViewModel()
238+
try await viewModel.withdraw()
239+
240+
UserDefaultsManager.shared.accessToken = nil
241+
UserDefaultsManager.shared.userFullName = nil
242+
231243
NavigationManager.shared.setNavigationController(OnboardingViewController())
232244
}
233245
} cancelAction: { } }

dogether/Presentation/View/OnboardingViewController.swift

+1-1
Original file line numberDiff line numberDiff line change
@@ -119,7 +119,7 @@ final class OnboardingViewController: BaseViewController {
119119

120120
@objc private func signInButtonClicked() {
121121
Task { @MainActor in
122-
let response = try await viewModel.singInWithApple()
122+
let response = try await viewModel.signInWithApple()
123123
print("✅ 로그인 성공: \(response.name), 토큰: \(response.accessToken)")
124124

125125
UserDefaultsManager.shared.userFullName = response.name

dogether/Presentation/ViewModel/CompleteViewModel.swift

+1
Original file line numberDiff line numberDiff line change
@@ -9,4 +9,5 @@ import Foundation
99

1010
final class CompleteViewModel {
1111
var joinCode: String = ""
12+
var groupInfo: GroupInfo = GroupInfo()
1213
}

dogether/Presentation/ViewModel/OnboardingViewModel.swift

+22
Original file line numberDiff line numberDiff line change
@@ -36,4 +36,26 @@ final class OnboardingViewModel: ObservableObject {
3636

3737
return try await NetworkManager.shared.request(AuthRouter.appleLogin(appleLoginRequest: loginRequest))
3838
}
39+
40+
// TODO: 추후 MyPageViewModel로 이동
41+
func withdraw() async throws {
42+
let request = ASAuthorizationAppleIDProvider().createRequest()
43+
request.requestedScopes = [.fullName, .email] // 유저로부터 알 수 있는 정보들
44+
45+
let controller = ASAuthorizationController(authorizationRequests: [request])
46+
// 인증창을 보여주기 위해 로그인 정보 관련 대리자 설정
47+
controller.delegate = appleSignInDelegate
48+
controller.performRequests()
49+
50+
// 애플 로그인 결과
51+
guard let result = try await appleSignInDelegate.signInResult else {
52+
throw NetworkError.unknown
53+
}
54+
55+
let authorizationCode = result.authorizationCode
56+
57+
let withdrawRequst = WithdrawRequest(authorizationCode: authorizationCode)
58+
59+
try await NetworkManager.shared.request(AuthRouter.withdraw(withdrawRequest: withdrawRequst))
60+
}
3961
}

0 commit comments

Comments
 (0)