-
Notifications
You must be signed in to change notification settings - Fork 5
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Moya 및 Combine을 사용한 Network 리펙토링 #163
base: master
Are you sure you want to change the base?
Conversation
case .postSignup: | ||
return "/auth/signup" | ||
case .postSignin: | ||
return "/auth/login" | ||
case .getCheckUsername, .getCheckEmail: | ||
return "/auth/users" | ||
case .postUpdatePassword: | ||
return "/auth/users/password" |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
(의견)
AuthAPI로 첫 path명과 동일하게 API 라우터 만들어 주신건 너무 좋은것 같습니다!
개인적인 추가 의견으로 API case와 path를 통일하면 좋겠다는 의견입니다,
API가 많아지다 보면 호출하는곳(사용하는곳)이 아닌 해당 파일의 path까지 와서 확인해야만 어떤 api인지 알 수 있어 이슈 디버깅하는 속도가 느려질것 같아요
회의때 의견 나누면 좋을것 같아서 코멘트 남깁니당
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
24.10.28 (iOS 회의 결과)
- API path에 대한 컨벤션(?)을 백엔드와 논의해보자
- 우리가 path를 따라서 네이밍을 하고 있다는것 정도만 언급하기
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
전체적으로 훑어 봤습니다! 궁금증과 의견 남깁니다
// TODO: DI 수정
요거는 라이브러리 반영 예정이라는건지, DI 방식 변경을 의미하는건지 ?
추가로 위 DI를 VC에서 직접 하고 그러는것 같은데,, 그래서 TODO를 써두신것 같다는 생각이 드네용
불필요ㅏㄴ dependency가 너무 강해지는 것 같아서 어디다 빼서 작성하는 로직을 한 번 같이 고민해보시죵!
final class AuthRepository { | ||
private let api: TTProvider<AuthAPI> | ||
|
||
func signup(signupInfo: TestUserSignupInfo, completion: @escaping (Result<AuthInfo, NetworkError>) -> Void) { | ||
api.signup(signupInfo: signupInfo) { result in | ||
switch result.status { | ||
case .SUCCESS: | ||
guard let data = result.data, | ||
let dto = try? JSONDecoder().decode(AuthDTO.self, from: data) else { | ||
completion(.failure(.DECODEERROR)) | ||
return | ||
} | ||
|
||
let info = dto.toDomain() | ||
completion(.success(info)) | ||
|
||
default: | ||
completion(.failure(.error(result))) | ||
} | ||
} | ||
init(api: TTProvider<AuthAPI>) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
(의견)
모든 Repository에 api를 주입 해주는것 같아요,
근데 api가 추상화가 아니라 구현체라 굳이 주입을 받아야 하는지 의문이 들어요
추상화 또는 내부에서 생성하는 방향을 잡으면 좋을듯 합니당
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
회의때 말씀드린대로 추후 테스트를 도입하기 위해 DI 형태까지는 필요하다고 판단했습니다.
다만 아직 테스트의 방향에 대해 좀더 고민이 필요하여 추후에 계속 수정이 필요할 것 같아 프로토콜 추상화는 패스했습니다.
이후에 DI 방식을 최종적으로 고민한 이후에 추상화까지 함께 반영하도록 하겠습니다!
private let repository: AuthRepository // TODO: 프로토콜로 수정 | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
(질문)
요거 Repository 전체적으로 TODO 상태인것 같은데 아직 반영 안되는 이유가 있을까여?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
위 DI 질문주신것과 같이 추상화의 경우 이후에 반영하고자 합니다!
리뷰 요청
개요
참고 : 너무 변경사항이 많아서... 추후 PR 내용에 반영 후 다시 공유드리겠습니다..! 🥲
변경사항
작업 요약
특이 사항
Network Layer 흐름도
추가 및 변경된 API 요청 UseCase
각 API 에 따라 UseCase, Request, Response, Info, Repository, API 등이 생성되었습니다.
예시 코드
GetDailysUseCase (SyncDailysVM)
리뷰 받고 싶은 내용