-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Browse files
Browse the repository at this point in the history
…nt-4 Feature/#9 assignment 4
- Loading branch information
Showing
18 changed files
with
413 additions
and
42 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
17 changes: 17 additions & 0 deletions
17
29th-iOS-Assignment/29th-iOS-Assignment/Resource/APIServices/APIConstants.swift
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,17 @@ | ||
// | ||
// APIConstants.swift | ||
// 29th-iOS-Assignment | ||
// | ||
// Created by 양수빈 on 2021/11/04. | ||
// | ||
|
||
import Foundation | ||
|
||
struct APIConstants { | ||
// MARK: - Base URL | ||
static let baseURL = "https://asia-northeast3-we-sopt-29.cloudfunctions.net/api" | ||
|
||
// MARK: - Feature URL | ||
static let loginURL = baseURL + "/user/login" | ||
static let signUpURL = baseURL + "/user/signup" | ||
} |
16 changes: 16 additions & 0 deletions
16
29th-iOS-Assignment/29th-iOS-Assignment/Resource/APIServices/NetworkResult.swift
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,16 @@ | ||
// | ||
// NetworkResult.swift | ||
// 29th-iOS-Assignment | ||
// | ||
// Created by 양수빈 on 2021/11/04. | ||
// | ||
|
||
import Foundation | ||
|
||
enum NetworkResult<T> { | ||
case success(T) | ||
case requestErr(T) | ||
case pathErr | ||
case serverErr | ||
case networkFail | ||
} |
72 changes: 72 additions & 0 deletions
72
29th-iOS-Assignment/29th-iOS-Assignment/Resource/APIServices/Services/LoginService.swift
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,72 @@ | ||
// | ||
// LoginService.swift | ||
// 29th-iOS-Assignment | ||
// | ||
// Created by 양수빈 on 2021/11/04. | ||
// | ||
|
||
import Foundation | ||
|
||
import Alamofire | ||
|
||
struct LoginService { | ||
static let shared = LoginService() | ||
|
||
func login(email: String, | ||
password: String, | ||
completion: @escaping (NetworkResult<Any>) -> (Void)) { | ||
|
||
let url = APIConstants.loginURL | ||
|
||
let header : HTTPHeaders = [ | ||
"Content-Type" : "application/json" | ||
] | ||
|
||
let body : Parameters = [ | ||
"email" : email, | ||
"password" : password | ||
] | ||
|
||
let dataRequest = AF.request(url, | ||
method: .post, | ||
parameters: body, | ||
encoding: JSONEncoding.default, | ||
headers: header) | ||
|
||
dataRequest.responseData { dataResponse in | ||
switch dataResponse.result { | ||
case .success: | ||
guard let statusCode = dataResponse.response?.statusCode else {return} | ||
guard let value = dataResponse.value else {return} | ||
|
||
let networkResult = self.judgeLoginStatus(by: statusCode, value) | ||
completion(networkResult) | ||
case .failure(let err): | ||
print(err) | ||
completion(.networkFail) | ||
} | ||
} | ||
} | ||
|
||
private func judgeLoginStatus (by statuscode: Int, _ data: Data) -> NetworkResult<Any> { | ||
switch statuscode { | ||
case 200: return isValidLoginData(data: data) | ||
case 400: | ||
return isInvalidLoginData(data: data) | ||
case 500: return .serverErr | ||
default: return .networkFail | ||
} | ||
} | ||
|
||
private func isValidLoginData(data: Data) -> NetworkResult<Any> { | ||
let decoder = JSONDecoder() | ||
guard let decodedData = try? decoder.decode(LoginDataModel.self, from: data) else {return .networkFail} | ||
return .success(decodedData) | ||
} | ||
|
||
private func isInvalidLoginData(data: Data) -> NetworkResult<Any> { | ||
let decoder = JSONDecoder() | ||
guard let decodedData = try? decoder.decode(LoginDataModel.self, from: data) else {return .pathErr} | ||
return .requestErr(decodedData) | ||
} | ||
} |
74 changes: 74 additions & 0 deletions
74
29th-iOS-Assignment/29th-iOS-Assignment/Resource/APIServices/Services/SignupService.swift
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,74 @@ | ||
// | ||
// SignupService.swift | ||
// 29th-iOS-Assignment | ||
// | ||
// Created by 양수빈 on 2021/11/10. | ||
// | ||
|
||
import Foundation | ||
|
||
import Alamofire | ||
|
||
struct SignupService { | ||
static let shared = SignupService() | ||
|
||
func signup(email: String, | ||
name: String, | ||
password: String, | ||
completion: @escaping (NetworkResult<Any>) -> (Void)) { | ||
|
||
let url = APIConstants.signUpURL | ||
|
||
let header : HTTPHeaders = [ | ||
"Content-Type" : "application/json" | ||
] | ||
|
||
let body : Parameters = [ | ||
"email" : email, | ||
"name" : name, | ||
"password" : password | ||
] | ||
|
||
let dataRequest = AF.request(url, | ||
method: .post, | ||
parameters: body, | ||
encoding: JSONEncoding.default, | ||
headers: header) | ||
|
||
dataRequest.responseData { dataResponse in | ||
switch dataResponse.result { | ||
case .success: | ||
guard let statusCode = dataResponse.response?.statusCode else {return} | ||
guard let value = dataResponse.value else {return} | ||
|
||
let networkResult = self.judgeSignupStatus(by: statusCode, value) | ||
completion(networkResult) | ||
case .failure(let err): | ||
print(err) | ||
completion(.networkFail) | ||
} | ||
} | ||
} | ||
|
||
private func judgeSignupStatus (by statuscode: Int, _ data: Data) -> NetworkResult<Any> { | ||
switch statuscode { | ||
case 200: return isValidSignupData(data: data) | ||
case 400: | ||
return isInvalidSignupData(data: data) | ||
case 500: return .serverErr | ||
default: return .networkFail | ||
} | ||
} | ||
|
||
private func isValidSignupData(data: Data) -> NetworkResult<Any> { | ||
let decoder = JSONDecoder() | ||
guard let decodedData = try? decoder.decode(SignupDataModel.self, from: data) else {return .networkFail} | ||
return .success(decodedData) | ||
} | ||
|
||
private func isInvalidSignupData(data: Data) -> NetworkResult<Any> { | ||
let decoder = JSONDecoder() | ||
guard let decodedData = try? decoder.decode(SignupDataModel.self, from: data) else {return .pathErr} | ||
return .requestErr(decodedData) | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.