diff --git a/AcaMate.xcodeproj/project.xcworkspace/xcuserdata/tanine.xcuserdatad/UserInterfaceState.xcuserstate b/AcaMate.xcodeproj/project.xcworkspace/xcuserdata/tanine.xcuserdatad/UserInterfaceState.xcuserstate index 902a2f1..0263ac9 100644 Binary files a/AcaMate.xcodeproj/project.xcworkspace/xcuserdata/tanine.xcuserdatad/UserInterfaceState.xcuserstate and b/AcaMate.xcodeproj/project.xcworkspace/xcuserdata/tanine.xcuserdatad/UserInterfaceState.xcuserstate differ diff --git a/AcaMate/1. View/11. Intro & Login/IntroView.swift b/AcaMate/1. View/11. Intro & Login/IntroView.swift index 9bbe706..7d03394 100644 --- a/AcaMate/1. View/11. Intro & Login/IntroView.swift +++ b/AcaMate/1. View/11. Intro & Login/IntroView.swift @@ -111,9 +111,9 @@ struct IntroView: View { case .finished: break } } receiveValue: { data in - guard let apiData = data as? APIResponse else {return} - printLog("\(apiData.data.toStringDict())") - promise(.success(apiData.data)) + guard let apiData = data as? APIResponse, let version = apiData.data else {return} + printLog("\(version.toStringDict())") + promise(.success(version)) } .store(in: &cancellables) } diff --git a/AcaMate/1. View/11. Intro & Login/LoginView.swift b/AcaMate/1. View/11. Intro & Login/LoginView.swift index c749365..ffdfefb 100644 --- a/AcaMate/1. View/11. Intro & Login/LoginView.swift +++ b/AcaMate/1. View/11. Intro & Login/LoginView.swift @@ -36,7 +36,7 @@ struct LoginView: View { // MARK: - TODO, 애플 계정 로그인 구현 // appVM.naviState.set(act: .ADD, path: .SelectAcademy(bids: ["AA0000", "AA0001"])) loginVM.toggleLoading = true - loginVM.loginTest(type: .Kakao, id: "TestSNSID1") + loginVM.loginTest(type: .Kakao, id: "TestSNSID1@#") } label: { makeButton(image: Image(.Logo.appleIcon), color: Color(.Text.black), "애플 계정으로 시작하기") diff --git a/AcaMate/2. Model/API Response.swift b/AcaMate/2. Model/API Response.swift index d1b0add..f7c3e78 100644 --- a/AcaMate/2. Model/API Response.swift +++ b/AcaMate/2. Model/API Response.swift @@ -9,7 +9,7 @@ import Foundation class APIResponse: Codable { let status: Status - let data: T + let data: T? } class Status: Codable { @@ -17,49 +17,44 @@ class Status: Codable { let message: String } -enum APICode: Codable { - case success - case inputErr - case outputErr - case networkErr - case unknownErr +enum APICode: Codable, RawRepresentable { + case success(String) + case inputErr(String) + case outputErr(String) + case networkErr(String) + case unknownErr(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 { let container = try decoder.singleValueContainer() let rawValue = try container.decode(String.self) - switch 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) - } + self = APICode(rawValue: rawValue) ?? .anything(rawValue) } func encode(to encoder: Encoder) throws { var container = encoder.singleValueContainer() - switch self { - 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) - } + try container.encode(self.rawValue) } } @@ -74,14 +69,14 @@ class VersionData: Codable { // /api/v1/in/user/login ---------------- class User_Token: Codable { - let token: String - let refresh: String -// let bids: [String] + let token: String? + let refresh: String? + // let bids: [String] } // /api/v1/in/member/academy ---------------- class AcademyName: Codable { - let bid: String - let name: String + let bid: String? + let name: String? } diff --git a/AcaMate/3. ViewModel/LoginViewModel.swift b/AcaMate/3. ViewModel/LoginViewModel.swift index 17d7d0e..91a99bf 100644 --- a/AcaMate/3. ViewModel/LoginViewModel.swift +++ b/AcaMate/3. ViewModel/LoginViewModel.swift @@ -37,24 +37,31 @@ class LoginViewModel: ObservableObject { } receiveValue: { [weak self] response in guard let self = self else { return } guard let userToken = response as? APIResponse 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"], - let refresh = userToken.data.toStringDict()["refresh"] { - printLog(token) - printLog(refresh) - accToken = token - refreshToken = refresh - self.pathName = .SelectAcademy + case .success(let code): + if code == "000" { + @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"] { + printLog(token) + printLog(refresh) + accToken = token + refreshToken = refresh + self.pathName = .SelectAcademy + + } + } else { + self.pathName = .Register(type, id: "\(id)") + } case .anything(let apiCode): // MARK: TO-DO // 회원가입 로직 printLog("\(apiCode) : 로그인 정보 없음") - self.pathName = .Register(type, id: "\(id)") +// self.pathName = .Register(type, id: "\(id)") default: // 그외에 서버에서 처리를 하다가 문제가 생겨서 발생하는 에러는 여기로 보낼거임 printLog("ERROR") diff --git a/AcaMate/3. ViewModel/SelectAcademyViewModel.swift b/AcaMate/3. ViewModel/SelectAcademyViewModel.swift index b3b7659..1761568 100644 --- a/AcaMate/3. ViewModel/SelectAcademyViewModel.swift +++ b/AcaMate/3. ViewModel/SelectAcademyViewModel.swift @@ -33,7 +33,8 @@ class SelectAcademyViewModel: ObservableObject { } receiveValue: { [weak self] response in guard let self = self 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) }