AcaMate_iOS/AcaMate/3. ViewModel/LoginViewModel.swift

95 lines
3.8 KiB
Swift

//
// LoginViewModel.swift
// AcaMate
//
// Created by Sean Kim on 12/14/24.
//
import SwiftUI
import Combine
class LoginViewModel: ObservableObject {
private let appVM: AppViewModel
private var cancellables = Set<AnyCancellable>()
// @Published var toggleLoading: Bool = false
// @Published var pathName: PathName = .NONE
@UserDefault(key: "token", defaultValue: "accToken") var accToken
@UserDefault(key: "refresh", defaultValue: "refreshToken") var refresh
@UserDefault(key: "header", defaultValue: "headerValue") var headerValue
@Published var devId: String = ""
var bidArray: [String] = []
init(_ appVM: AppViewModel) {
self.appVM = appVM
}
func loginAction(type: SNSLoginType) {
appVM.isLoading = true
let acctype: String = type == .Apple ? "ST00": (type == .Kakao ? "ST01" : "ST02")
LoginController().login(type, devId)
.flatMap{ snsId in
self.appVM.apiManager.loadAPIData(APIRequest(path: "/api/v1/in/user/login",
headers: [API_HEADER : self.headerValue],
parameters: [
"acctype": acctype,
"snsId": "\(snsId.snsId)"
],
decoding: APIResponse<User_Token>.self))
.map { response in
return (snsId: snsId.snsId, response: response)
}
}
.sink { [weak self] completion in
guard let self = self else { return }
// API
switch completion {
case .failure(let error):
self.appVM.isLoading = false
printLog("\(error)")
case .finished:
self.appVM.isLoading = false
}
} receiveValue: { [weak self] response in
guard let self = self else { return }
let snsId = response.snsId
switch response.response.status.code {
case .success(let code):
if code == "000" {
if let data = response.response.data,
let accToken = data.token,
let refresh = data.refresh {
printLog(accToken)
printLog(refresh)
self.accToken = accToken
self.refresh = refresh
appVM.naviState.set(act: .ADD, path: .SelectAcademy)
}
} else {
//
//
appVM.naviState.set(act: .ADD, path: .Register(type, id: "\(snsId)"))
}
case .anything(let apiCode):
// MARK: TO-DO
// ?
printLog("\(apiCode) : 로그인 정보 없음")
printLog("ERROR")
// self.pathName = .Register(type, id: "\(id)")
default:
//
printLog("ERROR")
}
}
.store(in: &cancellables)
}
}