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

[Refactor] #42 - 네트워크 레이어 리팩토링 및 예시코드 첨부 #94

Merged
merged 5 commits into from
Jul 16, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
91 changes: 33 additions & 58 deletions HealthFoodMe/HealthFoodMe.xcodeproj/project.pbxproj

Large diffs are not rendered by default.

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,13 @@
//

import Foundation

import Alamofire
import RxSwift

class BaseService {

var disposeBag = DisposeBag()

@frozen enum DecodingMode {
case model
Expand All @@ -26,6 +30,16 @@ class BaseService {
return session
}()

let RxAFManager: Session = {
var session = Session.default
let configuration = URLSessionConfiguration.af.default
configuration.timeoutIntervalForRequest = NetworkEnvironment.requestTimeOut
configuration.timeoutIntervalForResource = NetworkEnvironment.resourceTimeOut
let eventLogger = APIEventLogger()
session = Session(configuration: configuration, eventMonitors: [eventLogger])
return session
}()

func judgeStatus<T: Codable>(by statusCode: Int, _ data: Data, type: T.Type, decodingMode: DecodingMode = .general) -> NetworkResult<Any> {
let decoder = JSONDecoder()
guard let decodedData = try? decoder.decode(GeneralResponse<T>.self, from: data)
Expand Down Expand Up @@ -55,4 +69,19 @@ class BaseService {
return .networkFail
}
}

func requestObject<T: Codable>(_ target: BaseRouter, type: T.Type, decodingMode: DecodingMode, completion: @escaping (NetworkResult<Any>) -> Void) {
AFManager.request(target).responseData { response in
switch response.result {
case .success:
guard let statusCode = response.response?.statusCode else { return }
guard let data = response.data else { return}
let networkResult = self.judgeStatus(by: statusCode, data, type: type, decodingMode: decodingMode)
completion(networkResult)

case .failure(let err):
print(err.localizedDescription)
}
}
}
}
49 changes: 19 additions & 30 deletions HealthFoodMe/HealthFoodMe/Data/Network/Routers/AuthRouter.swift
Original file line number Diff line number Diff line change
Expand Up @@ -2,57 +2,46 @@
// AuthRouter.swift
// HealthFoodMe
//
// Created by Junho Lee on 2022/07/04.
// Created by Junho Lee on 2022/07/16.
//

import Foundation
import Alamofire

enum AuthRouter {
case requestSignUp(email: String, name: String, pw: String)
case requestSignIn(email: String, pw: String)
case requestPostData(postId: Int)
case postSocialLogin(socialType: String, token: String)
}

extension AuthRouter: BaseRouter {

var path: String {
var method: HTTPMethod {
switch self {
case .requestSignUp:
return "/auth/signup"
case .requestSignIn:
return "/auth/signin"
case .requestPostData(let postId):
return "/post/\(postId)"
case .postSocialLogin:
return .post
default :
return .get
}
}

var method: HTTPMethod {
var path: String {
switch self {
case .requestSignUp, .requestSignIn:
return .post
default:
return .get
return ""
}
}

var parameters: RequestParams {
switch self {
case .requestSignUp(let email, let name, let pw):
let body: [String: Any] = [
"email": email,
"name": name,
"password": pw
]
return .requestBody(body)
case .requestSignIn(let email, let pw):
let body: [String: Any] = [
"email": email,
"password": pw
]
return .requestBody(body)
default:
return .requestPlain
}
}

var hedaer: HeaderType {
switch self {
case .postSocialLogin:
return .default
default:
return .withToken
}
}
}

76 changes: 0 additions & 76 deletions HealthFoodMe/HealthFoodMe/Data/Network/Routers/HomeRouter.swift

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
//
// RestaurantRouter.swift
// HealthFoodMe
//
// Created by Junho Lee on 2022/07/16.
//

import Alamofire

enum RestaurantRouter {
case requestRestaurantSearch(query: String)
}

extension RestaurantRouter: BaseRouter {
var method: HTTPMethod {
switch self {
case .requestRestaurantSearch:
return .get
default :
return .get
}
}

var path: String {
switch self {
case .requestRestaurantSearch:
return "/restaurant/search"
default:
return ""
}
}

var parameters: RequestParams {
switch self {
case .requestRestaurantSearch(let query):
let requestQuery: [String: Any] = [
"query": query
]
return .query(requestQuery)
default:
return .requestPlain
}
}
}

35 changes: 35 additions & 0 deletions HealthFoodMe/HealthFoodMe/Data/Network/Routers/ReviewRouter.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
//
// ReviewRouter.swift
// HealthFoodMe
//
// Created by Junho Lee on 2022/07/16.
//

import Alamofire

enum ReviewRouter {

}

extension ReviewRouter: BaseRouter {
var method: HTTPMethod {
switch self {
default :
return .get
}
}

var path: String {
switch self {
default:
return ""
}
}

var parameters: RequestParams {
switch self {
default:
return .requestPlain
}
}
}
35 changes: 35 additions & 0 deletions HealthFoodMe/HealthFoodMe/Data/Network/Routers/UserRouter.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
//
// UserRouter.swift
// HealthFoodMe
//
// Created by Junho Lee on 2022/07/16.
//

import Alamofire

enum UserRouter {

}

extension UserRouter: BaseRouter {
var method: HTTPMethod {
switch self {
default :
return .get
}
}

var path: String {
switch self {
default:
return ""
}
}

var parameters: RequestParams {
switch self {
default:
return .requestPlain
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,9 @@
// AuthService.swift
// HealthFoodMe
//
// Created by Junho Lee on 2022/07/04.
// Created by Junho Lee on 2022/07/16.
//

import Foundation

import Alamofire

class AuthService: BaseService {
Expand All @@ -17,34 +15,4 @@ class AuthService: BaseService {

extension AuthService {

func requestSignIn(email: String, pw: String, completion: @escaping (NetworkResult<Any>) -> Void) {
AFManager.request(AuthRouter.requestSignIn(email: email, pw: pw)).responseData { response in
switch response.result {
case .success:
guard let statusCode = response.response?.statusCode else { return }
guard let data = response.data else { return}
let networkResult = self.judgeStatus(by: statusCode, data, type: SignIn.self, decodingMode: .message)
completion(networkResult)

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

func requestSignUp(email: String, name: String, pw: String, completion: @escaping (NetworkResult<Any>) -> Void) {
AFManager.request(AuthRouter.requestSignUp(email: email, name: name, pw: pw)).responseData { response in
switch response.result {
case .success:
guard let statusCode = response.response?.statusCode else { return }
guard let data = response.data else { return}
let networkResult = self.judgeStatus(by: statusCode, data, type: SignUp.self, decodingMode: .message)

completion(networkResult)

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