forked from AcaMate/AcaMate_iOS
[♻️] API 받아오는 로직 수정
This commit is contained in:
parent
f4233f4562
commit
05f11df5e8
Binary file not shown.
|
@ -111,9 +111,9 @@ struct IntroView: View {
|
||||||
case .finished: break
|
case .finished: break
|
||||||
}
|
}
|
||||||
} receiveValue: { data in
|
} receiveValue: { data in
|
||||||
guard let apiData = data as? APIResponse<VersionData> else {return}
|
guard let apiData = data as? APIResponse<VersionData>, let version = apiData.data else {return}
|
||||||
printLog("\(apiData.data.toStringDict())")
|
printLog("\(version.toStringDict())")
|
||||||
promise(.success(apiData.data))
|
promise(.success(version))
|
||||||
}
|
}
|
||||||
.store(in: &cancellables)
|
.store(in: &cancellables)
|
||||||
}
|
}
|
||||||
|
|
|
@ -36,7 +36,7 @@ struct LoginView: View {
|
||||||
// MARK: - TODO, 애플 계정 로그인 구현
|
// MARK: - TODO, 애플 계정 로그인 구현
|
||||||
// appVM.naviState.set(act: .ADD, path: .SelectAcademy(bids: ["AA0000", "AA0001"]))
|
// appVM.naviState.set(act: .ADD, path: .SelectAcademy(bids: ["AA0000", "AA0001"]))
|
||||||
loginVM.toggleLoading = true
|
loginVM.toggleLoading = true
|
||||||
loginVM.loginTest(type: .Kakao, id: "TestSNSID1")
|
loginVM.loginTest(type: .Kakao, id: "TestSNSID1@#")
|
||||||
|
|
||||||
} label: {
|
} label: {
|
||||||
makeButton(image: Image(.Logo.appleIcon), color: Color(.Text.black), "애플 계정으로 시작하기")
|
makeButton(image: Image(.Logo.appleIcon), color: Color(.Text.black), "애플 계정으로 시작하기")
|
||||||
|
|
|
@ -9,7 +9,7 @@ import Foundation
|
||||||
|
|
||||||
class APIResponse<T: Codable>: Codable {
|
class APIResponse<T: Codable>: Codable {
|
||||||
let status: Status
|
let status: Status
|
||||||
let data: T
|
let data: T?
|
||||||
}
|
}
|
||||||
|
|
||||||
class Status: Codable {
|
class Status: Codable {
|
||||||
|
@ -17,49 +17,44 @@ class Status: Codable {
|
||||||
let message: String
|
let message: String
|
||||||
}
|
}
|
||||||
|
|
||||||
enum APICode: Codable {
|
enum APICode: Codable, RawRepresentable {
|
||||||
case success
|
case success(String)
|
||||||
case inputErr
|
case inputErr(String)
|
||||||
case outputErr
|
case outputErr(String)
|
||||||
case networkErr
|
case networkErr(String)
|
||||||
case unknownErr
|
case unknownErr(String)
|
||||||
case anything(String)
|
case anything(String)
|
||||||
|
|
||||||
|
var rawValue: String {
|
||||||
|
switch self {
|
||||||
|
case .success(let value),
|
||||||
|
.inputErr(let value),
|
||||||
|
.outputErr(let value),
|
||||||
|
.networkErr(let value),
|
||||||
|
.unknownErr(let value),
|
||||||
|
.anything(let value):
|
||||||
|
return value
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
init?(rawValue: String){
|
||||||
|
if rawValue.hasPrefix("0") {self = .success(rawValue)}
|
||||||
|
else if rawValue.hasPrefix("1") {self = .inputErr(rawValue)}
|
||||||
|
else if rawValue.hasPrefix("2") {self = .outputErr(rawValue)}
|
||||||
|
else if rawValue.hasPrefix("3") {self = .networkErr(rawValue)}
|
||||||
|
else if rawValue == "999" {self = .unknownErr(rawValue)}
|
||||||
|
else { self = .anything(rawValue)}
|
||||||
|
}
|
||||||
|
|
||||||
init(from decoder: Decoder) throws {
|
init(from decoder: Decoder) throws {
|
||||||
let container = try decoder.singleValueContainer()
|
let container = try decoder.singleValueContainer()
|
||||||
let rawValue = try container.decode(String.self)
|
let rawValue = try container.decode(String.self)
|
||||||
switch rawValue {
|
self = APICode(rawValue: rawValue) ?? .anything(rawValue)
|
||||||
case "000":
|
|
||||||
self = .success
|
|
||||||
case "001":
|
|
||||||
self = .inputErr
|
|
||||||
case "002":
|
|
||||||
self = .outputErr
|
|
||||||
case "003":
|
|
||||||
self = .networkErr
|
|
||||||
case "999":
|
|
||||||
self = .unknownErr
|
|
||||||
default:
|
|
||||||
self = .anything(rawValue)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func encode(to encoder: Encoder) throws {
|
func encode(to encoder: Encoder) throws {
|
||||||
var container = encoder.singleValueContainer()
|
var container = encoder.singleValueContainer()
|
||||||
switch self {
|
try container.encode(self.rawValue)
|
||||||
case .success:
|
|
||||||
try container.encode("000")
|
|
||||||
case .inputErr:
|
|
||||||
try container.encode("001")
|
|
||||||
case .outputErr:
|
|
||||||
try container.encode("002")
|
|
||||||
case .networkErr:
|
|
||||||
try container.encode("003")
|
|
||||||
case .unknownErr:
|
|
||||||
try container.encode("999")
|
|
||||||
case .anything(let value):
|
|
||||||
try container.encode(value)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -74,14 +69,14 @@ class VersionData: Codable {
|
||||||
// /api/v1/in/user/login ----------------
|
// /api/v1/in/user/login ----------------
|
||||||
|
|
||||||
class User_Token: Codable {
|
class User_Token: Codable {
|
||||||
let token: String
|
let token: String?
|
||||||
let refresh: String
|
let refresh: String?
|
||||||
// let bids: [String]
|
// let bids: [String]
|
||||||
}
|
}
|
||||||
|
|
||||||
// /api/v1/in/member/academy ----------------
|
// /api/v1/in/member/academy ----------------
|
||||||
class AcademyName: Codable {
|
class AcademyName: Codable {
|
||||||
let bid: String
|
let bid: String?
|
||||||
let name: String
|
let name: String?
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -37,24 +37,31 @@ class LoginViewModel: ObservableObject {
|
||||||
} receiveValue: { [weak self] response in
|
} receiveValue: { [weak self] response in
|
||||||
guard let self = self else { return }
|
guard let self = self else { return }
|
||||||
guard let userToken = response as? APIResponse<User_Token> else {return}
|
guard let userToken = response as? APIResponse<User_Token> else {return}
|
||||||
|
|
||||||
switch userToken.status.code {
|
switch userToken.status.code {
|
||||||
case .success:
|
case .success(let code):
|
||||||
@UserDefault(key: "token", defaultValue: "accToken") var accToken
|
if code == "000" {
|
||||||
@UserDefault(key: "refresh", defaultValue: "arefreshToken") var refreshToken
|
@UserDefault(key: "token", defaultValue: "accToken") var accToken
|
||||||
|
@UserDefault(key: "refresh", defaultValue: "arefreshToken") var refreshToken
|
||||||
if let token = userToken.data.toStringDict()["token"],
|
|
||||||
let refresh = userToken.data.toStringDict()["refresh"] {
|
if let token = userToken.data.toStringDict()["token"],
|
||||||
printLog(token)
|
let refresh = userToken.data.toStringDict()["refresh"] {
|
||||||
printLog(refresh)
|
printLog(token)
|
||||||
accToken = token
|
printLog(refresh)
|
||||||
refreshToken = refresh
|
accToken = token
|
||||||
self.pathName = .SelectAcademy
|
refreshToken = refresh
|
||||||
|
self.pathName = .SelectAcademy
|
||||||
|
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
self.pathName = .Register(type, id: "\(id)")
|
||||||
|
|
||||||
}
|
}
|
||||||
case .anything(let apiCode):
|
case .anything(let apiCode):
|
||||||
// MARK: TO-DO
|
// MARK: TO-DO
|
||||||
// 회원가입 로직
|
// 회원가입 로직
|
||||||
printLog("\(apiCode) : 로그인 정보 없음")
|
printLog("\(apiCode) : 로그인 정보 없음")
|
||||||
self.pathName = .Register(type, id: "\(id)")
|
// self.pathName = .Register(type, id: "\(id)")
|
||||||
default:
|
default:
|
||||||
// 그외에 서버에서 처리를 하다가 문제가 생겨서 발생하는 에러는 여기로 보낼거임
|
// 그외에 서버에서 처리를 하다가 문제가 생겨서 발생하는 에러는 여기로 보낼거임
|
||||||
printLog("ERROR")
|
printLog("ERROR")
|
||||||
|
|
|
@ -33,7 +33,8 @@ class SelectAcademyViewModel: ObservableObject {
|
||||||
} receiveValue: { [weak self] response in
|
} receiveValue: { [weak self] response in
|
||||||
guard let self = self else {return}
|
guard let self = self else {return}
|
||||||
guard let academyNames = response as? APIResponse<[AcademyName]> else {return}
|
guard let academyNames = response as? APIResponse<[AcademyName]> else {return}
|
||||||
self.academyList = academyNames.data
|
guard let academyList = academyNames.data else { return }
|
||||||
|
self.academyList = academyList
|
||||||
}
|
}
|
||||||
.store(in: &cancellables)
|
.store(in: &cancellables)
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user