[♻️] API 받아오는 로직 수정

This commit is contained in:
김선규 2025-02-26 17:25:32 +09:00
parent f4233f4562
commit 05f11df5e8
6 changed files with 60 additions and 57 deletions

View File

@ -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)
} }

View File

@ -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), "애플 계정으로 시작하기")

View File

@ -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?
} }

View File

@ -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 {
case .success:
@UserDefault(key: "token", defaultValue: "accToken") var accToken
@UserDefault(key: "refresh", defaultValue: "arefreshToken") var refreshToken
if let token = userToken.data.toStringDict()["token"], switch userToken.status.code {
let refresh = userToken.data.toStringDict()["refresh"] { case .success(let code):
printLog(token) if code == "000" {
printLog(refresh) @UserDefault(key: "token", defaultValue: "accToken") var accToken
accToken = token @UserDefault(key: "refresh", defaultValue: "arefreshToken") var refreshToken
refreshToken = refresh
self.pathName = .SelectAcademy if let token = userToken.data.toStringDict()["token"],
let refresh = userToken.data.toStringDict()["refresh"] {
printLog(token)
printLog(refresh)
accToken = token
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")

View File

@ -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)
} }