Skip to content

Commit 3ccb993

Browse files
authored
[Merge] #193 - 온보딩 API 연결
2 parents a8a0ba0 + ed61134 commit 3ccb993

50 files changed

Lines changed: 647 additions & 843 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

CERTI-iOS/Application/Coordinator/AppCoordinatorView.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ struct AppCoordinatorView: View {
2020
OnboardingCoordinatorView(onboardingCoordinator: appCoordinator.onboardingCoordinator, onboardingFactory: appDIContainer.makeOnboardingFactory())
2121
.environmentObject(appCoordinator)
2222
case .auth:
23-
LoginView()
23+
LoginView(factory: appDIContainer.makeLoginFactory())
2424
.environmentObject(appCoordinator)
2525
case .main:
2626
CertiTabBarCoordinatorView(tabCoordinator: appCoordinator.tabCoordinator, appDIContainer: appDIContainer)

CERTI-iOS/Application/DIContainer/AppDIContainer.swift

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -71,8 +71,8 @@ extension AppDIContainer {
7171

7272
// MARK: - AuthUseCase
7373

74-
func makeLoginUseCase() -> LoginUseCase {
75-
return DefaultLoginUseCase(repository: authRepository)
74+
func makeKakaoLoginUseCase() -> KakaoLoginUseCase {
75+
return DefaultKakaoLoginUseCase(repository: authRepository)
7676
}
7777

7878
func makeSignUpUseCase() -> SignUpUseCase {
@@ -158,6 +158,10 @@ extension AppDIContainer {
158158
func makeFetchActivityListUseCase() -> FetchActivityListUseCase {
159159
return DefaultFetchActivityListUseCase(repository: activityRepository)
160160
}
161+
162+
func makeCheckNickNameUseCase() -> CheckNickNameUseCase {
163+
return DefaultCheckNickNameUseCase(repository: userRepository)
164+
}
161165
}
162166

163167

@@ -180,7 +184,9 @@ extension AppDIContainer {
180184
func makeOnboardingFactory() -> OnboardingFactory {
181185
return DefaultOnboardingFactory(
182186
fetchMajorListUseCase: makeFetchMajorListUseCase(),
183-
fetchUnivListUseCase: makeFetchUnivListUseCase()
187+
fetchUnivListUseCase: makeFetchUnivListUseCase(),
188+
signupUseCase: makeSignUpUseCase(),
189+
checkNickNameUseCase: makeCheckNickNameUseCase()
184190
)
185191
}
186192

@@ -227,4 +233,8 @@ extension AppDIContainer {
227233
func makeMyPageFactory() -> MyPageFactory {
228234
return DefaultMyPageFactory()
229235
}
236+
237+
func makeLoginFactory() -> LoginFactory {
238+
return DefaultLoginFactory(kakoLoginUseCase: makeKakaoLoginUseCase())
239+
}
230240
}

CERTI-iOS/Data/Network/Auth/AuthAPI.swift

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import Foundation
1010
import Moya
1111

1212
enum AuthAPI {
13-
case login(type: SocialLoginType, code: String)
13+
case login(type: String, accessToken: String)
1414
case signUp(request: SignupRequestDTO, preSignUpToken: String)
1515
case logout
1616
case refresh
@@ -33,8 +33,8 @@ extension AuthAPI: BaseTargetType {
3333

3434
var path: String {
3535
switch self {
36-
case let .login(type, _):
37-
return type.loginPath
36+
case .login:
37+
return "auth/sign-in"
3838
case .refresh:
3939
return "auth/reissue"
4040
case .logout:
@@ -48,7 +48,7 @@ extension AuthAPI: BaseTargetType {
4848

4949
var method: Moya.Method {
5050
switch self {
51-
case .login(let type, let code):
51+
case .login:
5252
return .post
5353
case .logout:
5454
return .post
@@ -63,10 +63,10 @@ extension AuthAPI: BaseTargetType {
6363

6464
var task: Moya.Task {
6565
switch self {
66-
case let .login(type, code):
66+
case let .login(type, accessToken):
6767
let bodyParameters: [String: Any] = [
68-
type.authorizationQueryKey: code,
69-
"socialType": type.rawValue
68+
"accessToken": accessToken,
69+
"socialType": type
7070
]
7171
return .requestParameters(parameters: bodyParameters, encoding: JSONEncoding.default)
7272
case .refresh:

CERTI-iOS/Data/Network/Auth/AuthService.swift

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,24 +10,24 @@ import Foundation
1010
import Moya
1111

1212
protocol AuthServiceProtocol {
13-
func login(type: SocialLoginType, authorizationCode: String) async -> Result<BaseResponseDTO<LoginResponseWrapper>, NetworkError>
14-
func signUp(request: SignupRequestDTO, preSignUpToken: String) async -> Result<SignupSuccessResponseDTO, NetworkError>
13+
func login(type: String, accessToken: String) async -> Result<LoginResponseDTO, NetworkError>
14+
func signUp(request: SignupRequestDTO, preSignUpToken: String) async -> Result<SignupResponseDTO, NetworkError>
1515
func withDraw() async -> Result<Void, NetworkError>
1616
}
1717

1818
final class AuthService: BaseService, AuthServiceProtocol {
19-
19+
2020
private let provider = MoyaProvider<AuthAPI>.init(plugins: [MoyaPlugin()])
2121

2222
func withDraw() async -> Result<Void, NetworkError> {
2323
return await requestVoid(provider, .withDraw)
2424
}
2525

26-
func signUp(request: SignupRequestDTO, preSignUpToken: String) async -> Result<SignupSuccessResponseDTO, NetworkError> {
26+
func signUp(request: SignupRequestDTO, preSignUpToken: String) async -> Result<SignupResponseDTO, NetworkError> {
2727
return await requestDecodable(provider, .signUp(request: request, preSignUpToken: preSignUpToken))
2828
}
2929

30-
func login(type: SocialLoginType, authorizationCode: String) async -> Result<BaseResponseDTO<LoginResponseWrapper>, NetworkError> {
31-
return await requestDecodable(provider, .login(type: type, code: authorizationCode))
30+
func login(type: String, accessToken: String) async -> Result<LoginResponseDTO, NetworkError> {
31+
return await requestDecodable(provider, .login(type: type, accessToken: accessToken))
3232
}
3333
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
//
2+
// LoginRequestDTO.swift
3+
// CERTI-iOS
4+
//
5+
// Created by OneTen on 1/9/26.
6+
//
7+
8+
import Foundation
9+
10+
struct LoginRequestDTO: Codable {
11+
let accessToken, socialType: String
12+
}

CERTI-iOS/Data/Network/Auth/DTO/Request/SignupRequestDTO.swift

Lines changed: 12 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -2,30 +2,26 @@
22
// SignupRequestDTO.swift
33
// CERTI-iOS
44
//
5-
// Created by OneTen on 7/13/25.
5+
// Created by OneTen on 1/9/26.
66
//
77

88
import Foundation
99

10-
struct SignupRequestDTO: Encodable {
10+
struct SignupRequestDTO: Codable {
1111
let userInformation: UserInformationData
12-
let university: String
13-
let grade: String
14-
let track: String
15-
let major: String
16-
let jobs: [String]
17-
}
18-
19-
struct UserInformationData: Encodable {
20-
let email: String
12+
let university, grade, track, major: String
2113
let nickname: String
22-
let profileImageUrl: String
14+
let jobs: [String]
2315

24-
func toUserInformationEntityData() -> UserInformationEntityData {
25-
return UserInformationEntityData(
26-
email: email,
16+
func toSignupRequestEntity() -> SignupRequestEntity {
17+
return SignupRequestEntity(
18+
userInformation: userInformation.toUserInformationEntity(),
19+
university: university,
20+
grade: grade,
21+
track: track,
22+
major: major,
2723
nickname: nickname,
28-
profileImageUrl: profileImageUrl
24+
jobs: jobs
2925
)
3026
}
3127
}
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
//
2+
// LoginResponseDTO.swift
3+
// CERTI-iOS
4+
//
5+
// Created by OneTen on 1/9/26.
6+
//
7+
8+
import Foundation
9+
10+
typealias LoginResponseDTO = BaseResponseDTO<LoginResponseData>
11+
12+
struct LoginResponseData: Codable {
13+
let needSignUp: Bool
14+
let preSignupToken: String
15+
let userInformation: UserInformationData
16+
17+
enum CodingKeys: String, CodingKey {
18+
case needSignUp, preSignupToken, userInformation
19+
}
20+
21+
func toLoginResponseEntity() -> LoginResponseEntity {
22+
return LoginResponseEntity(
23+
needSignUp: needSignUp,
24+
preSignupToken: preSignupToken,
25+
userInformation: userInformation.toUserInformationEntity()
26+
)
27+
}
28+
}
29+
30+
struct TokenResponseData: Codable {
31+
let accessToken, refreshToken: String
32+
33+
func toTokenResponseEntity() -> TokenResponseEntity {
34+
return TokenResponseEntity(accessToken: accessToken, refreshToken: refreshToken)
35+
}
36+
}

CERTI-iOS/Data/Network/Auth/DTO/Response/LoginSuccessResponseDTO.swift

Lines changed: 0 additions & 36 deletions
This file was deleted.

CERTI-iOS/Data/Network/Auth/DTO/Response/SignupRequiredResponseDTO.swift

Lines changed: 0 additions & 34 deletions
This file was deleted.
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
//
2+
// SignupResponseDTO.swift
3+
// CERTI-iOS
4+
//
5+
// Created by OneTen on 1/9/26.
6+
//
7+
8+
import Foundation
9+
10+
typealias SignupResponseDTO = BaseResponseDTO<SignupResponseData>
11+
12+
struct SignupResponseData: Codable {
13+
let userID: Int
14+
let nickName, university, trackType, major: String
15+
let jobs: [String]
16+
let jwtResponse: JwtResponseData
17+
18+
enum CodingKeys: String, CodingKey {
19+
case userID = "userId"
20+
case nickName, university, trackType, major, jobs, jwtResponse
21+
}
22+
23+
func toSignupResponseEntity() -> SignupResponseEntity {
24+
return SignupResponseEntity(
25+
userID: userID,
26+
nickName: nickName,
27+
university: university,
28+
trackType: trackType,
29+
major: major,
30+
jobs: jobs,
31+
jwtResponse: jwtResponse.toJwtResponseEntity()
32+
)
33+
}
34+
}
35+
36+
struct JwtResponseData: Codable {
37+
let accessToken, refreshToken: String
38+
39+
func toJwtResponseEntity() -> JwtResponseEntity {
40+
return JwtResponseEntity(accessToken: accessToken, refreshToken: refreshToken)
41+
}
42+
}

0 commit comments

Comments
 (0)