feat(auth): 인증 후 콘텐츠 설정과 개발용 모의 인증을 추가한다

This commit is contained in:
Yu Sung
2026-10-13 11:37:03 +09:00
parent e34a51b411
commit 61bfa46c11
20 changed files with 1203 additions and 181 deletions
@@ -46,19 +46,45 @@ final class UserRepository {
}
func getMypage() -> AnyPublisher<Response, MoyaError> {
#if AUTH_VERIFICATION_MOCK
return selfMemberPublisher(.getMypage, as: MyPageResponse.self)
#else
return api.requestPublisher(.getMypage)
#endif
}
func getMemberInfo() -> AnyPublisher<Response, MoyaError> {
#if AUTH_VERIFICATION_MOCK
return selfMemberPublisher(.getMemberInfo, as: GetMemberInfoResponse.self)
#else
return api.requestPublisher(.getMemberInfo)
#endif
}
func updateContentPreference(request: UpdateContentPreferenceRequest) -> AnyPublisher<Response, MoyaError> {
#if AUTH_VERIFICATION_MOCK
let requestToken = UserDefaults.string(forKey: .token)
let session = AuthVerificationMock.shared.session(for: requestToken)
return api.requestPublisher(.updateContentPreference(request: request))
.map { response in
AuthVerificationMock.shared.updateContentPreference(from: response.data,
statusCode: response.statusCode,
requestToken: requestToken,
session: session)
return response
}
.eraseToAnyPublisher()
#else
return api.requestPublisher(.updateContentPreference(request: request))
#endif
}
func getMemberCan() -> AnyPublisher<Response, MoyaError> {
#if AUTH_VERIFICATION_MOCK
return getMemberInfo()
#else
return api.requestPublisher(.getMemberInfo)
#endif
}
func updateNotificationSettings(live: Bool? = nil, uploadContent: Bool? = nil, message: Bool? = nil, audition: Bool? = nil) -> AnyPublisher<Response, MoyaError> {
@@ -149,4 +175,23 @@ final class UserRepository {
func getMemberProfile(memberId: Int) -> AnyPublisher<Response, MoyaError> {
return api.requestPublisher(.getMemberProfile(memberId: memberId))
}
#if AUTH_VERIFICATION_MOCK
private func selfMemberPublisher<Member: Decodable>(_ target: UserApi, as type: Member.Type) -> AnyPublisher<Response, MoyaError> {
let requestToken = UserDefaults.string(forKey: .token)
let session = AuthVerificationMock.shared.session(for: requestToken)
return api.requestPublisher(target)
.map { response in
let data = AuthVerificationMock.shared.overlayMemberResponse(response.data,
statusCode: response.statusCode,
requestToken: requestToken,
session: session,
as: type)
guard data != response.data else { return response }
return Response(statusCode: response.statusCode, data: data,
request: response.request, response: response.response)
}
.eraseToAnyPublisher()
}
#endif
}