Skip to content

Commit

Permalink
Merge pull request #94 from L-j-h-c/feature/#42
Browse files Browse the repository at this point in the history
[Refactor] #42 - 네트워크 레이어 리팩토링 및 예시코드 첨부
  • Loading branch information
L-j-h-c authored Jul 16, 2022
2 parents c577c10 + 283c264 commit a0cbbbf
Show file tree
Hide file tree
Showing 17 changed files with 257 additions and 372 deletions.
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

0 comments on commit a0cbbbf

Please sign in to comment.