AcaMate_iOS/AcaMate/3. ViewModel/LoginViewModel.swift

98 lines
3.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 loginTest(type: SNSLoginType, id: String) {
loadAPIData(url: "\(API_URL)",
path: "/api/v1/in/user/login",
parameters: [
"acctype": "\(type == .Apple ? "ST00": "ST01")",
"sns_id": "\(id)"
],
decodingType: APIResponse<User_Academy>.self)
.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 }
guard let userAcademy = response as? APIResponse<User_Academy> else {return}
switch userAcademy.status.code {
case .success:
if let bids = userAcademy.data.toStringDict()["bid"] {
printLog(bids)
if let bidArray: [String] = jsonToSwift(bids) {
self.pathName = .SelectAcademy(bids: bidArray)
} else {
printLog("JSON 변환 실패")
}
}
case .anything(let apiCode):
// MARK: TO-DO
//
printLog("\(apiCode) : 로그인 정보 없음")
self.pathName = .Register(type, id: "\(id)")
default:
//
printLog("ERROR")
}
}
.store(in: &cancellables)
}
func loginAction(type: SNSLoginType) {
LoginController().login(type)
.flatMap{ snsId in
loadAPIData(url: "\(API_URL)",
path: "/api/v1/in/user/login",
parameters: [
"acctype": "\(type == .Apple ? "ST00": "ST01")",
"sns_id": "\(snsId.snsId)"
],
decodingType: APIResponse<User_Academy>.self)
}
.sink { [weak self] completion in
switch completion {
case .failure(let error):
printLog("\(error)")
self?.toggleLoading = false
case .finished:
self?.toggleLoading = false
}
} receiveValue: { [weak self] response in
guard let self = self else { return }
guard let userAcademy = response as? APIResponse<User_Academy> else {return}
if let bids = userAcademy.data.toStringDict()["bid"] {
printLog(bids)
if let bidArray: [String] = jsonToSwift(bids) {
self.pathName = .SelectAcademy(bids: bidArray)
} else {
printLog("JSON 변환 실패")
}
}
}
.store(in: &cancellables)
}
}