diff --git a/AcaMate.xcodeproj/project.xcworkspace/xcuserdata/tanine.xcuserdatad/UserInterfaceState.xcuserstate b/AcaMate.xcodeproj/project.xcworkspace/xcuserdata/tanine.xcuserdatad/UserInterfaceState.xcuserstate index 32e9431..50b4d96 100644 Binary files a/AcaMate.xcodeproj/project.xcworkspace/xcuserdata/tanine.xcuserdatad/UserInterfaceState.xcuserstate and b/AcaMate.xcodeproj/project.xcworkspace/xcuserdata/tanine.xcuserdatad/UserInterfaceState.xcuserstate differ diff --git a/AcaMate/1. View/11. Intro & Login/RegisterView.swift b/AcaMate/1. View/11. Intro & Login/RegisterView.swift index daad524..da555cd 100644 --- a/AcaMate/1. View/11. Intro & Login/RegisterView.swift +++ b/AcaMate/1. View/11. Intro & Login/RegisterView.swift @@ -10,6 +10,7 @@ import SwiftUI struct RegisterView: View { @EnvironmentObject var appVM: AppViewModel @StateObject private var topVM = TopViewModel() + @StateObject var btnVM = ButtonViewModel() @State private var scrollOffset: CGPoint = .zero @@ -41,6 +42,7 @@ struct RegisterView: View { } .frame(maxWidth: .infinity, maxHeight: .infinity) + } .onAppear { topVM.titleName = "회원가입" diff --git a/AcaMate/2. Model/API Response.swift b/AcaMate/2. Model/API Response.swift index f7c3e78..5a82663 100644 --- a/AcaMate/2. Model/API Response.swift +++ b/AcaMate/2. Model/API Response.swift @@ -66,6 +66,13 @@ class VersionData: Codable { } +// /api/v1/in/app/retryAccess ---------------- +class Access: Codable { + let access: String +} + + + // /api/v1/in/user/login ---------------- class User_Token: Codable { diff --git a/AcaMate/2. Model/CustomError.swift b/AcaMate/2. Model/CustomError.swift new file mode 100644 index 0000000..183a443 --- /dev/null +++ b/AcaMate/2. Model/CustomError.swift @@ -0,0 +1,16 @@ +// +// CustomError.swift +// AcaMate +// +// Created by TAnine on 3/14/25. +// + +import Foundation + +class ACA_ERROR: Error { + let message: String + + init(_ msg: String) { + message = msg + } +} diff --git a/AcaMate/3. ViewModel/SelectAcademyViewModel.swift b/AcaMate/3. ViewModel/SelectAcademyViewModel.swift index 1761568..e4c6c46 100644 --- a/AcaMate/3. ViewModel/SelectAcademyViewModel.swift +++ b/AcaMate/3. ViewModel/SelectAcademyViewModel.swift @@ -17,7 +17,7 @@ class SelectAcademyViewModel: ObservableObject { func loadAcademy() { @UserDefault(key: "token", defaultValue: "accToken") var token - @UserDefault(key: "refresh", defaultValue: "arefreshToken") var refresh + @UserDefault(key: "refresh", defaultValue: "refreshToken") var refresh loadAPIData(url: "\(API_URL)", path: "/api/v1/in/user/academy", method: .get, diff --git a/AcaMate/5. Manager/APIManager.swift b/AcaMate/5. Manager/APIManager.swift index efbe6bf..64ad373 100644 --- a/AcaMate/5. Manager/APIManager.swift +++ b/AcaMate/5. Manager/APIManager.swift @@ -40,4 +40,45 @@ public func loadAPIData(url: String, path: String, } } +public func reloadAccessToken() -> Future { + @UserDefault(key: "refresh", defaultValue: "refreshToken") var refresh + return Future { promise in + _ = loadAPIData(url: "\(API_URL)", + path: "/api/v1/in/app/retryAccess", + parameters: ["refresh": refresh], + decodingType: APIResponse.self) + .sink { completion in + switch completion { + case .failure(let error): + promise(.failure(error)) + printLog("\(error)") + case .finished: + printLog("엑세스 토큰 재발급 완료") + break + } + } receiveValue: { response in + guard let accToken = response as? APIResponse else { + promise(.failure(ACA_ERROR("Unknown ERROR"))) + return + } + + switch accToken.status.code { + case .success(let code): + if code == "000" { + if let tknData = accToken.data { promise(.success(tknData)) } + } + case .inputErr(let code): + // 로그인 화면으로 전환하기 + promise(.failure(ACA_ERROR("Refresh token ERROR(\(code), \(accToken.status.message)"))) + default: + // 그외에 서버에서 처리를 하다가 문제가 생겨서 발생하는 에러는 여기로 보낼거임 + promise(.failure(ACA_ERROR("Unknown ERROR"))) + } + } + + } + + +} +