Skip to content

Commit 6ab2739

Browse files
authored
Merge pull request #341 from EAT-SSU/fix/#340
[#340] ๋‚ ์งœ ๋ณ€๊ฒฝ ์‹œ ๋ฉ”๋‰ด๊ฐ€ ์ œ๋Œ€๋กœ ๋‚˜์˜ค์ง€ ์•Š๋˜ ๋ฒ„๊ทธ ์ˆ˜์ • ๋ฐ ์ „์ฒด์ ์ธ ๋„คํŠธ์›Œํฌ ๊ตฌ์กฐ ์ˆ˜์ •
2 parents 2e781b3 + 430682c commit 6ab2739

File tree

15 files changed

+525
-438
lines changed

15 files changed

+525
-438
lines changed
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
//
2+
// NetworkError.swift
3+
// EATSSU
4+
//
5+
// Created by ํ™ฉ์ƒํ™˜ on 10/17/25.
6+
//
7+
8+
import Foundation
9+
10+
enum NetworkError: Error, LocalizedError {
11+
/// ์‘๋‹ต์€ ์„ฑ๊ณตํ–ˆ์œผ๋‚˜, result ๊ฐ’์ด nil์ผ ๋•Œ (e.g., Bool ํƒ€์ž… ์‘๋‹ต)
12+
case noData(code: Int)
13+
14+
/// isSuccess๊ฐ€ false์ผ ๋•Œ (์„œ๋ฒ„์—์„œ ์ •์˜ํ•œ ์—๋Ÿฌ)
15+
case serverError(code: Int, message: String)
16+
17+
/// ์‘๋‹ต ๋ชจ๋ธ ๋””์ฝ”๋”ฉ์— ์‹คํŒจํ–ˆ์„ ๋•Œ
18+
case decodingError(Error)
19+
20+
/// Moya์—์„œ ๋ฐœ์ƒํ•œ ๊ทผ๋ณธ์ ์ธ ์—๋Ÿฌ (e.g., ์ธํ„ฐ๋„ท ์—ฐ๊ฒฐ ๋Š๊น€)
21+
case underlying(Error)
22+
23+
var errorDescription: String? {
24+
switch self {
25+
case .noData:
26+
return "์‘๋‹ต ๋ฐ์ดํ„ฐ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค."
27+
case .serverError(_, let message):
28+
return message
29+
case .decodingError:
30+
return "๋ฐ์ดํ„ฐ๋ฅผ ๋ณ€ํ™˜ํ•˜๋Š”๋ฐ ์‹คํŒจํ–ˆ์Šต๋‹ˆ๋‹ค."
31+
case .underlying(let error):
32+
return error.localizedDescription
33+
}
34+
}
35+
}
Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
//
2+
// NetworkService.swift
3+
// EATSSU-DEV
4+
//
5+
// Created by ํ™ฉ์ƒํ™˜ on 10/17/25.
6+
//
7+
8+
import Foundation
9+
10+
import Moya
11+
import Alamofire
12+
13+
final class NetworkService {
14+
15+
// MARK: - Singleton
16+
17+
static let shared = NetworkService()
18+
19+
private init() {}
20+
21+
// MARK: - Providers
22+
23+
/// ๊ธฐ๋ณธ Provider (๋กœ๊น…๋งŒ)
24+
private func defaultProvider<T: TargetType>() -> MoyaProvider<T> {
25+
return MoyaProvider<T>(plugins: [ESMoyaLoggingPlugin()])
26+
}
27+
28+
/// ์ธ์ฆ Provider (AuthInterceptor + ๋กœ๊น…)
29+
private func authProvider<T: TargetType>() -> MoyaProvider<T> {
30+
return MoyaProvider<T>(
31+
session: Session(interceptor: AuthInterceptor.shared),
32+
plugins: [ESMoyaLoggingPlugin()]
33+
)
34+
}
35+
36+
// MARK: - Request Method
37+
38+
/// Generic ๋„คํŠธ์›Œํฌ ์š”์ฒญ ๋ฉ”์„œ๋“œ
39+
func request<T: TargetType, R: Codable>(
40+
_ target: T,
41+
responseType: R.Type,
42+
useAuth: Bool = false,
43+
completion: @escaping (Result<R, Error>) -> Void
44+
) {
45+
let provider: MoyaProvider<T> = useAuth ? authProvider() : defaultProvider()
46+
47+
provider.request(target) { result in
48+
switch result {
49+
case .success(let response):
50+
do {
51+
let baseResponse = try response.map(BaseResponse<R>.self)
52+
53+
if baseResponse.isSuccess {
54+
if let data = baseResponse.result {
55+
completion(.success(data))
56+
} else {
57+
if R.self == Bool.self {
58+
guard let successValue = true as? R else {
59+
completion(.failure(NetworkError.decodingError(NSError(domain: "NetworkService", code: -1, userInfo: [NSLocalizedDescriptionKey: "Bool ํƒ€์ž… ๋ณ€ํ™˜์— ์‹คํŒจํ–ˆ์Šต๋‹ˆ๋‹ค."]))))
60+
return
61+
}
62+
completion(.success(successValue))
63+
} else {
64+
completion(.failure(NetworkError.noData(code: baseResponse.code)))
65+
}
66+
}
67+
} else {
68+
completion(.failure(NetworkError.serverError(code: baseResponse.code, message: baseResponse.message)))
69+
}
70+
} catch {
71+
completion(.failure(NetworkError.decodingError(error)))
72+
}
73+
74+
case .failure(let error):
75+
completion(.failure(NetworkError.underlying(error)))
76+
}
77+
}
78+
}
79+
}

โ€ŽEATSSU/App/Sources/Presentation/Auth/ViewController/LoginViewController.swiftโ€Ž

Lines changed: 42 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,6 @@ final class LoginViewController: BaseViewController {
1919

2020
public static let isVacationPeriod = false
2121
public var toastMessage: String?
22-
private let authProvider = MoyaProvider<AuthRouter>(session: Session(interceptor: AuthInterceptor.shared))
23-
private let myProvider = MoyaProvider<MyRouter>(session: Session(interceptor: AuthInterceptor.shared))
2422

2523
// MARK: - UI Components
2624

@@ -211,18 +209,25 @@ extension LoginViewController {
211209

212210
/// ์นด์นด์˜ค ๋กœ๊ทธ์ธ์„ ์œ„ํ•ด ์„œ๋ฒ„์— ์ด๋ฉ”์ผ/์•„์ด๋””๋ฅผ ๋ณด๋‚ด๋Š” ์š”์ฒญ
213211
private func postKakaoLoginRequest(email: String, id: String) {
214-
authProvider.request(.kakaoLogin(param: KakaoLoginRequest(email: email,
215-
providerId: id))) { [weak self] result in
212+
NetworkService.shared.request(
213+
AuthRouter.kakaoLogin(param: KakaoLoginRequest(email: email, providerId: id)),
214+
responseType: SignResponse.self,
215+
useAuth: true
216+
) { [weak self] result in
216217
guard let self else { return }
218+
217219
switch result {
218-
case let .success(moyaResponse):
220+
case .success(let signData):
219221
#if DEBUG
220-
print("Kakao login response status code: \(moyaResponse.statusCode)")
222+
print("Kakao login success")
221223
#endif
222-
handleLoginSuccess(moyaResponse: moyaResponse, accountType: .kakao)
223-
224-
case let .failure(error):
225-
presentBottomAlert(error.localizedDescription)
224+
storeTokensAndPrintDebugLogs(accessToken: signData.accessToken,
225+
refreshToken: signData.refreshToken)
226+
_ = UserInfoManager.shared.createUserInfo(accountType: .kakao)
227+
getMyInfo()
228+
229+
case .failure(let error):
230+
presentBottomAlert("์นด์นด์˜คํ†ก์œผ๋กœ ์ƒ์„ฑ๋œ ๊ณ„์ •์ž…๋‹ˆ๋‹ค.")
226231
#if DEBUG
227232
print(error.localizedDescription)
228233
#endif
@@ -232,17 +237,25 @@ extension LoginViewController {
232237

233238
/// ์ „๋‹ฌ๋ฐ›์€ identity token์œผ๋กœ Apple ๋กœ๊ทธ์ธ ์š”์ฒญ
234239
private func postAppleLoginRequest(token: String) {
235-
authProvider.request(.appleLogin(param: AppleLoginRequest(identityToken: token))) { [weak self] result in
240+
NetworkService.shared.request(
241+
AuthRouter.appleLogin(param: AppleLoginRequest(identityToken: token)),
242+
responseType: SignResponse.self,
243+
useAuth: true
244+
) { [weak self] result in
236245
guard let self else { return }
246+
237247
switch result {
238-
case let .success(moyaResponse):
248+
case .success(let signData):
239249
#if DEBUG
240-
print("Apple ๋กœ๊ทธ์ธ ์„œ๋ฒ„ ์‘๋‹ต์ฝ”๋“œ: \(moyaResponse.statusCode)")
250+
print("Apple ๋กœ๊ทธ์ธ ์„ฑ๊ณต")
241251
#endif
242-
handleLoginSuccess(moyaResponse: moyaResponse, accountType: .apple)
243-
244-
case let .failure(error):
245-
presentBottomAlert(error.localizedDescription)
252+
storeTokensAndPrintDebugLogs(accessToken: signData.accessToken,
253+
refreshToken: signData.refreshToken)
254+
_ = UserInfoManager.shared.createUserInfo(accountType: .apple)
255+
getMyInfo()
256+
257+
case .failure(let error):
258+
presentBottomAlert("Apple๋กœ ์ƒ์„ฑ๋œ ๊ณ„์ •์ž…๋‹ˆ๋‹ค.")
246259
#if DEBUG
247260
print(error.localizedDescription)
248261
#endif
@@ -252,25 +265,20 @@ extension LoginViewController {
252265

253266
/// ์„œ๋ฒ„์—์„œ ํ˜„์žฌ ์œ ์ € ์ •๋ณด๋ฅผ ์กฐํšŒ
254267
private func getMyInfo() {
255-
myProvider.request(.myInfo) { [weak self] result in
268+
NetworkService.shared.request(
269+
MyRouter.myInfo,
270+
responseType: MyInfoResponse.self,
271+
useAuth: true
272+
) { [weak self] result in
256273
guard let self else { return }
274+
257275
switch result {
258-
case let .success(moyaResponse):
259-
do {
260-
let responseData = try moyaResponse.map(BaseResponse<MyInfoResponse>.self)
261-
guard let responseData = responseData.result else {
262-
return
263-
}
264-
// ๋””๋ฒ„๊ทธ ๋ชจ๋“œ์ผ ๋•Œ๋งŒ ๋ฐ›์•„์˜จ ์œ ์ € ์ •๋ณด๋ฅผ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค.
265-
// #if DEBUG
266-
print("ํ˜„์žฌ ๋กœ๊ทธ์ธ ์ •๋ณด: \(responseData)")
267-
// #endif
268-
handleNicknameCheck(info: responseData)
269-
} catch {
270-
print(error.localizedDescription)
271-
}
272-
case let .failure(error):
273-
print(error.localizedDescription)
276+
case .success(let myInfo):
277+
print("ํ˜„์žฌ ๋กœ๊ทธ์ธ ์ •๋ณด: \(myInfo)")
278+
handleNicknameCheck(info: myInfo)
279+
280+
case .failure(let error):
281+
print("๋‚ด ์ •๋ณด ์กฐํšŒ ์‹คํŒจ: \(error.localizedDescription)")
274282
}
275283
}
276284
}

0 commit comments

Comments
ย (0)