// // LoginViewModel.swift // AcaMate // // Created by Sean Kim on 12/14/24. // import SwiftUI import Combine class LoginViewModel: ObservableObject { private var cancellables = Set() @Published var toggleLoading: Bool = false @Published var pathName: PathName = .NONE var bidArray: [String] = [] func USERPAITEST() { @UserDefault(key: "token", defaultValue: "accToken") var accToken @UserDefault(key: "refresh", defaultValue: "refreshToken") var refresh @UserDefault(key: "header", defaultValue: "headerValue") var headerValue // UIDevice의 identifierForVendor를 사용하여 고유 식별자 (UUID)를 문자열로 반환 guard let deviceId = UIDevice.current.identifierForVendor?.uuidString else { return } guard let bundleId = Bundle.main.bundleIdentifier else { return } // let request = APIRequest(path: "/api/v1/in/app", parameters: ["type": "I", "specific": deviceId, "project": bundleId], decoding: APIResponse
.self) // APIManager.shared.loadAPIData(request) .sink { completion in switch completion { case .failure(let error): printLog("최종 에러: \(error)") case .finished: break } } receiveValue: { response in // guard let response = response as? APIResponse
else { return } printLog(response.data?.header) } .store(in: &cancellables) /* let acc = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJBTVRlc3RFbWFpbDIwMjUwMzE4IiwianRpIjoiMjgwMjIwZDMtYzUwNS00YjFjLTgwMzgtZjBlNGJjYzM4MTE3IiwiZXhwIjoxNzQyMjYzMzgwLCJpc3MiOiJBY2FNYXRlIiwiYXVkIjoiaHR0cHM6L2RldmFjYW1hdGUuaXBzdGVpbi5teWRzLm1lIn0.f6kLKnsWhzlllSuYKxpFNuXuV4vOtJ2ox4IGSnxE67Y" refresh = "MRo+1HIvaPgECXrvwmGvtUpxSk7Pip7KtGSoWDqmjVA=" let request = APIRequest(path: "/api/v1/in/user", parameters: ["token": accToken], decoding: APIResponse.self) APIManager.shared.loadUserAPIData(request: request) .sink { completion in switch completion { case .failure(let error): printLog("최종 에러: \(error)") case .finished: break } } receiveValue: { response in guard let user = response.data as? User else { return } printLog("최종 값 : \(user.name), \(user.birth)") } .store(in: &cancellables) */ } func loginAction(type: SNSLoginType) { LoginController().login(type) .flatMap{ snsId in APIManager.shared.loadAPIData(APIRequest(path: "/api/v1/in/user/login", parameters: [ "acctype": "\(type == .Apple ? "ST00": "ST01")", "sns_id": "\(snsId.snsId)" ], decoding: APIResponse.self)) .map { response in return (snsId: snsId.snsId, response: response) } } .sink { [weak self] completion in // API 자체적으로 내보내는 에러는 여기서 거를거고 switch completion { case .failure(let error): self?.toggleLoading = false printLog("\(error)") case .finished: self?.toggleLoading = false } } receiveValue: { [weak self] response in guard let self = self else { return } // let userToken = response.response // as? APIResponse else {return} let snsId = response.snsId switch response.response.status.code { case .success(let code): if code == "000" { @UserDefault(key: "token", defaultValue: "accToken") var accToken @UserDefault(key: "refresh", defaultValue: "refreshToken") var refreshToken if let token = response.response.data.toStringDict()["token"], let refresh = response.response.data.toStringDict()["refresh"] { printLog(token) printLog(refresh) accToken = token refreshToken = refresh self.pathName = .SelectAcademy } } else { // 회원가입 진행 // 여기다가 타입도 추가해야 함 self.pathName = .Register(type, id: "\(snsId)") } case .anything(let apiCode): // MARK: TO-DO // 회원가입 로직 printLog("\(apiCode) : 로그인 정보 없음") // self.pathName = .Register(type, id: "\(id)") default: // 그외에 서버에서 처리를 하다가 문제가 생겨서 발생하는 에러는 여기로 보낼거임 printLog("ERROR") } } .store(in: &cancellables) } }