AcaMate_iOS/AcaMate/3. ViewModel/LoginViewModel.swift

122 lines
5.4 KiB
Swift

//
// LoginViewModel.swift
// AcaMate
//
// Created by Sean Kim on 12/14/24.
//
import SwiftUI
import Combine
class LoginViewModel: ObservableObject {
private var cancellables = Set<AnyCancellable>()
@Published var toggleLoading: Bool = false
@Published var pathName: PathName = .NONE
var bidArray: [String] = []
func USERPAITEST() {
@UserDefault(key: "refresh", defaultValue: "refreshToken") var refresh
var acc = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJBTVRlc3RFbWFpbDIwMjUwMzE3IiwianRpIjoiYTQzN2Q4YjUtNzQyMi00NWVhLWFiNTktZWI2MTBkNDMwNWRlIiwiZXhwIjoxNzQyMjAwODQ3LCJpc3MiOiJBY2FNYXRlIiwiYXVkIjoiaHR0cHM6L2RldmFjYW1hdGUuaXBzdGVpbi5teWRzLm1lIn0.Y-xxdQWyu3BX_y5hlwWjAdxG5-QRZyHEgJ6T2pDkFRc"
refresh = "tsLeVEtZTjy8iWDvT9vf7Kv7qQr3WgPjeNkFdMb9Rv4="
APIManager.shared.loadAPIData(url: "\(API_URL)",
path: "/api/v1/in/user/cancel",
parameters: ["token": acc],
decodingType: APIResponse<String>.self)
.flatMap { response -> AnyPublisher<APIResponse<String>, Error> in
switch response.status.code {
case .inputErr(let code) where code == "101":
return APIManager.shared.reloadAccessToken()
.flatMap { newAcc -> AnyPublisher<APIResponse<String>, Error> in
APIManager.shared.loadAPIData(url: "\(API_URL)",
path: "/api/v1/in/user/cancel",
parameters: ["token": (newAcc as! Access).access],
decodingType: APIResponse<String>.self)
.eraseToAnyPublisher()
}
.eraseToAnyPublisher()
default:
return Just(response)
.setFailureType(to: Error.self)
.eraseToAnyPublisher()
}
}
.sink { completion in
switch completion {
case .failure(let error):
printLog("최종 \(error)")
case .finished:
break
}
} receiveValue: { response in
printLog("최종: \(response)")
}
.store(in: &cancellables)
}
func loginAction(type: SNSLoginType) {
LoginController().login(type)
.flatMap{ snsId in
APIManager.shared.loadAPIData(url: "\(API_URL)",
path: "/api/v1/in/user/login",
parameters: [
"acctype": "\(type == .Apple ? "ST00": "ST01")",
"sns_id": "\(snsId.snsId)"
],
decodingType: APIResponse<User_Token>.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<User_Token> 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)
}
}