forked from AcaMate/AcaMate_iOS
108 lines
4.6 KiB
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)
|
|
}
|
|
}
|