AcaMate_iOS/AcaMate/3. ViewModel/LoginViewModel.swift

108 lines
4.6 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: "token", defaultValue: "accToken") var accToken
@UserDefault(key: "refresh", defaultValue: "refreshToken") var refresh
let acc = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJBTVRlc3RFbWFpbDIwMjUwMzE4IiwianRpIjoiMjgwMjIwZDMtYzUwNS00YjFjLTgwMzgtZjBlNGJjYzM4MTE3IiwiZXhwIjoxNzQyMjYzMzgwLCJpc3MiOiJBY2FNYXRlIiwiYXVkIjoiaHR0cHM6L2RldmFjYW1hdGUuaXBzdGVpbi5teWRzLm1lIn0.f6kLKnsWhzlllSuYKxpFNuXuV4vOtJ2ox4IGSnxE67Y"
refresh = "MRo+1HIvaPgECXrvwmGvtUpxSk7Pip7KtGSoWDqmjVA="
let request = APIRequest(path: "/api/v1/in/user",
parameters: ["token": accToken],
decoding: APIResponse<User>.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<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)
}
}