Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: 마이페이지 회원탈퇴, 받은 명함 초기화 구현 (#460) #461

Merged
merged 8 commits into from
Apr 26, 2023
46 changes: 3 additions & 43 deletions NADA-iOS-forRelease/Sources/NetworkService/Group/GroupAPI.swift
Original file line number Diff line number Diff line change
Expand Up @@ -127,8 +127,8 @@ public class GroupAPI {
}
}

func groupReset(token: String, completion: @escaping (NetworkResult<Any>) -> Void) {
groupProvider.request(.groupReset(token: token)) { (result) in
func groupReset(completion: @escaping (NetworkResult<Any>) -> Void) {
groupProvider.request(.groupReset) { (result) in
switch result {
case .success(let response):
let statusCode = response.statusCode
Expand All @@ -144,47 +144,7 @@ public class GroupAPI {
}

// MARK: - JudgeStatus methods

private func judgeGroupListFetchStatus(by statusCode: Int, _ data: Data) -> NetworkResult<Any> {

let decoder = JSONDecoder()
guard let decodedData = try? decoder.decode(GenericResponse<Groups>.self, from: data)
else {
return .pathErr
}

switch statusCode {
case 200:
return .success(decodedData.data ?? "None-Data")
case 400..<500:
return .requestErr(decodedData.message ?? "error message")
case 500:
return .serverErr
default:
return .networkFail
}
}

private func judgeCardListFetchInGroupStatus(by statusCode: Int, _ data: Data) -> NetworkResult<Any> {

let decoder = JSONDecoder()
guard let decodedData = try? decoder.decode(GenericResponse<CardsInGroupResponse>.self, from: data)
else {
return .pathErr
}

switch statusCode {
case 200:
return .success(decodedData.data ?? "None-Data")
case 400..<500:
return .requestErr(decodedData.message ?? "error message")
case 500:
return .serverErr
default:
return .networkFail
}
}


private func judgeStatus<T: Codable>(by statusCode: Int, data: Data, type: T.Type) -> NetworkResult<Any> {
let decoder = JSONDecoder()
guard let decodedData = try? decoder.decode(GenericResponse<T>.self, from: data)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ enum GroupService {
case cardAddInGroup(cardRequest: CardAddInGroupRequest)
case cardListFetchInGroup(cardListInGroupRequest: CardListInGroupRequest)
case cardDeleteInGroup(groupID: Int, cardID: String)
case groupReset(token: String)
case groupReset
}

extension GroupService: TargetType {
Expand All @@ -35,8 +35,10 @@ extension GroupService: TargetType {

var path: String {
switch self {
case .groupListFetch, .groupReset:
case .groupListFetch:
return "/card-group/list"
case .groupReset:
return "/card-group/clear"
case .groupDelete(let groupID, _):
return "/group/\(groupID)"
case .groupAdd, .groupEdit:
Expand All @@ -54,9 +56,9 @@ extension GroupService: TargetType {
switch self {
case .groupListFetch, .cardListFetchInGroup:
return .get
case .groupDelete, .cardDeleteInGroup, .groupReset:
case .groupDelete, .cardDeleteInGroup:
return .delete
case .groupAdd, .cardAddInGroup:
case .groupAdd, .cardAddInGroup, .groupReset:
return .post
case .groupEdit:
return .put
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -56,15 +56,15 @@ final class MoyaLoggerPlugin: PluginType {
log.append("------------------- END HTTP (\(response.data.count)-byte body) -------------------")
print(log)

switch statusCode {
case 401:
let acessToken = UserDefaults.standard.string(forKey: Const.UserDefaultsKey.accessToken)
let refreshToken = UserDefaults.standard.string(forKey: Const.UserDefaultsKey.refreshToken)
userTokenReissueWithAPI(request: UserReissueToken(accessToken: acessToken ?? "",
refreshToken: refreshToken ?? ""))
default:
return
}
// switch statusCode {
// case 401:
// let acessToken = UserDefaults.standard.string(forKey: Const.UserDefaultsKey.accessToken)
// let refreshToken = UserDefaults.standard.string(forKey: Const.UserDefaultsKey.refreshToken)
// userTokenReissueWithAPI(request: UserReissueToken(accessToken: acessToken ?? "",
// refreshToken: refreshToken ?? ""))
// default:
// return
// }
}

func onFail(_ error: MoyaError, target: TargetType) {
Expand All @@ -88,32 +88,32 @@ final class MoyaLoggerPlugin: PluginType {

extension MoyaLoggerPlugin {
func userTokenReissueWithAPI(request: UserReissueToken) {
UserAPI.shared.userTokenReissue(request: request) { response in
switch response {
case .success(let data):
if let tokenData = data as? UserReissueToken {
UserDefaults.standard.set(tokenData.accessToken, forKey: Const.UserDefaultsKey.accessToken)
UserDefaults.standard.set(tokenData.refreshToken, forKey: Const.UserDefaultsKey.refreshToken)
print("userTokenReissueWithAPI - success")
}
case .requestErr(let statusCode):
if let statusCode = statusCode as? Int, statusCode == 406 {
let loginVC = UIStoryboard(name: Const.Storyboard.Name.login, bundle: nil).instantiateViewController(withIdentifier: Const.ViewController.Identifier.loginViewController)
UIApplication.shared.windows.first {$0.isKeyWindow}?.rootViewController = loginVC
UserDefaults.standard.removeObject(forKey: Const.UserDefaultsKey.accessToken)
UserDefaults.standard.removeObject(forKey: Const.UserDefaultsKey.refreshToken)
UserDefaults.standard.removeObject(forKey: Const.UserDefaultsKey.userID)
}
print("userTokenReissueWithAPI - requestErr: \(statusCode)")
case .pathErr:
print("userTokenReissueWithAPI - pathErr")
case .serverErr:
print("userTokenReissueWithAPI - serverErr")
case .networkFail:
print("userTokenReissueWithAPI - networkFail")
}
}
// UserAPI.shared.userTokenReissue(request: request) { response in
// switch response {
// case .success(let data):
// if let tokenData = data as? UserReissueToken {
// UserDefaults.standard.set(tokenData.accessToken, forKey: Const.UserDefaultsKey.accessToken)
// UserDefaults.standard.set(tokenData.refreshToken, forKey: Const.UserDefaultsKey.refreshToken)
//
// print("userTokenReissueWithAPI - success")
// }
// case .requestErr(let statusCode):
// if let statusCode = statusCode as? Int, statusCode == 406 {
// let loginVC = UIStoryboard(name: Const.Storyboard.Name.login, bundle: nil).instantiateViewController(withIdentifier: Const.ViewController.Identifier.loginViewController)
// UIApplication.shared.windows.first {$0.isKeyWindow}?.rootViewController = loginVC
//
// UserDefaults.standard.removeObject(forKey: Const.UserDefaultsKey.accessToken)
// UserDefaults.standard.removeObject(forKey: Const.UserDefaultsKey.refreshToken)
// UserDefaults.standard.removeObject(forKey: Const.UserDefaultsKey.userID)
// }
// print("userTokenReissueWithAPI - requestErr: \(statusCode)")
// case .pathErr:
// print("userTokenReissueWithAPI - pathErr")
// case .serverErr:
// print("userTokenReissueWithAPI - serverErr")
// case .networkFail:
// print("userTokenReissueWithAPI - networkFail")
// }
// }
}
}
103 changes: 6 additions & 97 deletions NADA-iOS-forRelease/Sources/NetworkService/User/UserAPI.swift
Original file line number Diff line number Diff line change
Expand Up @@ -15,14 +15,14 @@ public class UserAPI {

public init() { }

func userDelete(token: String, completion: @escaping (NetworkResult<Any>) -> Void) {
userProvider.request(.userDelete(token: token)) { (result) in
func userDelete(completion: @escaping (NetworkResult<Any>) -> Void) {
userProvider.request(.userDelete) { (result) in
switch result {
case .success(let response):
let statusCode = response.statusCode
let data = response.data

let networkResult = self.judgeStatus(by: statusCode, data)
let networkResult = self.judgeStatus(by: statusCode, data: data, type: String.self)
completion(networkResult)

case .failure(let err):
Expand All @@ -37,7 +37,7 @@ public class UserAPI {
case .success(let response):
let statusCode = response.statusCode
let data = response.data
let networkResult = self.judgeUserSocialSignUpStatus(by: statusCode, data)
let networkResult = self.judgeStatus(by: statusCode, data: data, type: AccessToken.self)
completion(networkResult)

case .failure(let err):
Expand All @@ -46,102 +46,11 @@ public class UserAPI {
}
}

func userLogout(token: String, completion: @escaping (NetworkResult<Any>) -> Void) {
userProvider.request(.userLogout(token: token)) { (result) in
switch result {
case .success(let response):
let statusCode = response.statusCode
let data = response.data

let networkResult = self.judgeStatus(by: statusCode, data)
completion(networkResult)

case .failure(let err):
print(err)
}
}
}

func userTokenReissue(request: UserReissueToken, completion: @escaping (NetworkResult<Any>) -> Void) {
userProvider.request(.userTokenReissue(request: request)) { (result) in
switch result {
case .success(let response):
let statusCode = response.statusCode
let data = response.data

let networkResult = self.judgeUserTokenReissueStatus(by: statusCode, data)
completion(networkResult)

case .failure(let err):
print(err)
}
}
}

// MARK: - JudgeStatus methods

private func judgeUserSocialSignUpStatus(by statusCode: Int, _ data: Data) -> NetworkResult<Any> {
let decoder = JSONDecoder()
guard let decodedData = try? decoder.decode(GenericResponse<AccessToken>.self, from: data)
else {
return .pathErr
}

switch statusCode {
case 200:
return .success(decodedData.data ?? "None-Data")
case 400..<500:
return .requestErr(decodedData.message ?? "error message")
case 500:
return .serverErr
default:
return .networkFail
}
}

private func judgeUserTokenFetchStatus(by statusCode: Int, _ data: Data) -> NetworkResult<Any> {

let decoder = JSONDecoder()
guard let decodedData = try? decoder.decode(GenericResponse<UserWithTokenRequest>.self, from: data)
else {
return .pathErr
}

switch statusCode {
case 200:
return .success(decodedData.data ?? "None-Data")
case 400..<500:
return .requestErr(decodedData.message ?? "error message")
case 500:
return .serverErr
default:
return .networkFail
}
}

private func judgeUserTokenReissueStatus(by statusCode: Int, _ data: Data) -> NetworkResult<Any> {

let decoder = JSONDecoder()
guard let decodedData = try? decoder.decode(GenericResponse<UserReissueToken>.self, from: data)
else {
return .pathErr
}

switch statusCode {
case 200:
return .success(decodedData.data ?? "None-Data")
case 400..<500:
return .requestErr(statusCode)
case 500:
return .serverErr
default:
return .networkFail
}
}

private func judgeStatus(by statusCode: Int, _ data: Data) -> NetworkResult<Any> {
private func judgeStatus<T: Codable>(by statusCode: Int, data: Data, type: T.Type) -> NetworkResult<Any> {
let decoder = JSONDecoder()
guard let decodedData = try? decoder.decode(GenericResponse<String>.self, from: data)
guard let decodedData = try? decoder.decode(GenericResponse<T>.self, from: data)
else { return .pathErr }

switch statusCode {
Expand Down
22 changes: 7 additions & 15 deletions NADA-iOS-forRelease/Sources/NetworkService/User/UserSevice.swift
Original file line number Diff line number Diff line change
Expand Up @@ -9,10 +9,8 @@ import Foundation
import Moya

enum UserSevice {
case userDelete(token: String)
case userDelete
case userSocialSignUp(socialID: String, socialType: String)
case userLogout(token: String)
case userTokenReissue(request: UserReissueToken)
}

extension UserSevice: TargetType {
Expand All @@ -24,21 +22,17 @@ extension UserSevice: TargetType {
var path: String {
switch self {
case .userDelete:
return "/user"
return "/member"
case .userSocialSignUp:
return "/auth/signup"
case .userLogout:
return "auth/logout"
case .userTokenReissue:
return "auth/reissue"
}
}

var method: Moya.Method {
switch self {
case .userSocialSignUp, .userTokenReissue:
case .userSocialSignUp:
return .post
case .userDelete, .userLogout:
case .userDelete:
return .delete
}
}
Expand All @@ -49,22 +43,20 @@ extension UserSevice: TargetType {

var task: Task {
switch self {
case .userDelete, .userLogout:
case .userDelete:
return .requestPlain
case .userSocialSignUp(let socialID, let socialType):
return .requestParameters(parameters: ["socialId": socialID,
"socialType": socialType],
encoding: JSONEncoding.default)
case .userTokenReissue(let request):
return .requestJSONEncodable(request)
}
}

var headers: [String: String]? {
switch self {
case .userSocialSignUp, .userTokenReissue:
case .userSocialSignUp:
return Const.Header.applicationJsonHeader()
case .userDelete, .userLogout:
case .userDelete:
return Const.Header.bearerHeader()
}
}
Expand Down
Loading