-
Notifications
You must be signed in to change notification settings - Fork 3
[Feat] #48 - 전체적인 플로우 연결, 유저 플로우 리팩토링, 마이페이지 API 연결 #64
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
Changes from 15 commits
98391c3
6c47026
f030f41
b137f2f
586f199
6816b80
5e0f27b
fdb74fb
5789581
11284ae
648bf06
051609f
b79ac50
752f5dd
a5f7803
62ac313
e39d671
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,22 @@ | ||
| // | ||
| // UIWindow+.swift | ||
| // RD-Core | ||
| // | ||
| // Created by Junho Lee on 2022/12/19. | ||
| // Copyright © 2022 RecorDream-iOS. All rights reserved. | ||
| // | ||
|
|
||
| import UIKit | ||
|
|
||
| public extension UIWindow { | ||
| static var keyWindowGetter: UIWindow? { | ||
| if #available(iOS 13, *) { | ||
| return (UIApplication.shared.connectedScenes | ||
| .compactMap { $0 as? UIWindowScene } | ||
| .flatMap { $0.windows } | ||
| .first { $0.isKeyWindow }) | ||
| } else { | ||
| return UIApplication.shared.keyWindow | ||
| } | ||
| } | ||
| } |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,25 @@ | ||
| // | ||
| // UserInfoTransform.swift | ||
| // Data | ||
| // | ||
| // Created by Junho Lee on 2022/12/19. | ||
| // Copyright © 2022 RecorDream-iOS. All rights reserved. | ||
| // | ||
|
|
||
| import Domain | ||
| import RD_Network | ||
|
|
||
| import Foundation | ||
|
|
||
| extension UserInfoResponse { | ||
| func toDomain() -> MyPageEntity? { | ||
| var notEmptyName = self.nickname | ||
| notEmptyName = self.nickname == "" | ||
| ? "닉네임" | ||
| : self.nickname | ||
| return .init(userName: notEmptyName, | ||
| email: self.email, | ||
| pushOnOff: self.time != nil, | ||
| pushTime: self.time) | ||
| } | ||
|
Suyeon9911 marked this conversation as resolved.
|
||
| } | ||
This file was deleted.
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -9,6 +9,7 @@ | |
| import Foundation | ||
|
|
||
| import Domain | ||
| import RD_Core | ||
| import RD_Network | ||
|
|
||
| import RxSwift | ||
|
|
@@ -18,7 +19,7 @@ public final class DefaultAuthRepository { | |
| private let authService: AuthService | ||
| private let disposeBag = DisposeBag() | ||
|
|
||
| init(authService: AuthService) { | ||
| public init(authService: AuthService) { | ||
| self.authService = authService | ||
| } | ||
| } | ||
|
|
@@ -29,7 +30,36 @@ extension DefaultAuthRepository: AuthRepository { | |
| self.authService.login(kakaoToken: request.kakaoToken, appleToken: request.appleToken, fcmToken: request.fcmToken) | ||
| .subscribe(onNext: { response in | ||
| guard let response = response else { return } | ||
| observer.onNext(.init(duplicated: response.duplicated, accessToken: response.accessToken, refreshToken: response.refreshToken)) | ||
| observer.onNext(.init(duplicated: response.duplicated, accessToken: response.accessToken, refreshToken: response.refreshToken, nickname: response.nickname)) | ||
| }, onError: { err in | ||
| observer.onError(err) | ||
| }) | ||
| .disposed(by: self.disposeBag) | ||
| return Disposables.create() | ||
| } | ||
| } | ||
|
|
||
| public func requestReissuance() -> Observable<Bool> { | ||
| return Observable.create { observer in | ||
| self.authService.reissuance() | ||
| .subscribe(onNext: { response in | ||
| guard let response = response else { | ||
| observer.onNext(false) | ||
| return | ||
| } | ||
|
|
||
| if response.status == 403 { | ||
| observer.onNext(true) | ||
| return | ||
| } | ||
|
|
||
|
Suyeon9911 marked this conversation as resolved.
|
||
| guard let token = response.data else { | ||
| observer.onNext(false) | ||
| return | ||
| } | ||
| DefaultUserDefaultManager.set(value: token.accessToken, keyPath: .accessToken) | ||
| DefaultUserDefaultManager.set(value: token.refreshToken, keyPath: .refreshToken) | ||
| observer.onNext(true) | ||
|
Comment on lines
+51
to
+63
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 슬랙에서 논의하셨던 + 줌에서 말씀해주셨던 부분이네요! |
||
| }, onError: { err in | ||
| observer.onError(err) | ||
| }) | ||
|
|
||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -7,54 +7,134 @@ | |
| // | ||
|
|
||
| import Domain | ||
| import RD_Core | ||
| import RD_Network | ||
|
|
||
| import RxSwift | ||
|
|
||
| public class DefaultMyPageRepository { | ||
|
|
||
| private let disposeBag = DisposeBag() | ||
|
|
||
| public init() { | ||
| private var authService: AuthService | ||
| private var userService: UserService | ||
|
|
||
| public init(authService: AuthService, userService: UserService) { | ||
| self.authService = authService | ||
| self.userService = userService | ||
| } | ||
| } | ||
|
|
||
| extension DefaultMyPageRepository: MyPageRepository { | ||
| public func changeUserNickname(nickname: String) -> RxSwift.Observable<Bool> { | ||
| return Observable.create { observer in | ||
| self.userService.changeNickname(nickname: nickname) | ||
| .subscribe(onNext: { nicknameChangeSuccessed in | ||
| guard nicknameChangeSuccessed else { | ||
| observer.onNext(false) | ||
| return | ||
| } | ||
| observer.onNext(true) | ||
| }, onError: { err in | ||
| observer.onError(err) | ||
| }) | ||
| .disposed(by: self.disposeBag) | ||
| return Disposables.create() | ||
| } | ||
| } | ||
|
|
||
| public func fetchUserInformation() -> Observable<MyPageEntity> { | ||
| return Observable.create { observer in | ||
| observer.onNext(.init(userName: "샘플닉네임", | ||
| email: "[email protected]", | ||
| pushOnOff: true, | ||
| pushTime: "08:00")) | ||
| self.userService.fetchUserInfo() | ||
| .subscribe(onNext: { response in | ||
| guard let entity = response?.toDomain() else { | ||
| return | ||
| } | ||
| observer.onNext(entity) | ||
| }, onError: { err in | ||
| observer.onError(err) | ||
| }) | ||
| .disposed(by: self.disposeBag) | ||
| return Disposables.create() | ||
| } | ||
| } | ||
|
|
||
| public func userLogout() -> Observable<Bool> { | ||
| return Observable.create { observer in | ||
| observer.onNext(true) | ||
| guard let fcmToken = DefaultUserDefaultManager.string(key: UserDefaultKey.userToken) else { return Disposables.create() } | ||
| self.authService.logout(fcmToken: fcmToken) | ||
| .subscribe(onNext: { logoutSuccess in | ||
| guard logoutSuccess else { | ||
| observer.onNext(false) | ||
| return | ||
| } | ||
|
L-j-h-c marked this conversation as resolved.
|
||
| DefaultUserDefaultManager.clearUserData() | ||
| observer.onNext(true) | ||
| }, onError: { err in | ||
| observer.onError(err) | ||
| }) | ||
| .disposed(by: self.disposeBag) | ||
| return Disposables.create() | ||
| } | ||
| } | ||
|
|
||
| public func userWithdrawal() -> Observable<Bool> { | ||
| return Observable.create { observer in | ||
| observer.onNext(true) | ||
| self.userService.withDrawal() | ||
| .subscribe(onNext: { withDrawalSuccess in | ||
| guard withDrawalSuccess else { | ||
| observer.onNext(false) | ||
| return | ||
| } | ||
| DefaultUserDefaultManager.clearUserData() | ||
| observer.onNext(true) | ||
| }, onError: { err in | ||
| observer.onError(err) | ||
| }) | ||
| .disposed(by: self.disposeBag) | ||
| return Disposables.create() | ||
| } | ||
| } | ||
|
|
||
| public func enablePushNotice(time: String) -> Observable<String> { | ||
| public func enablePushNotice(time: String) -> Observable<Bool> { | ||
| return Observable.create { observer in | ||
| observer.onNext("AM 08:20") | ||
| self.userService.changeNoticeStatus(isActive: true) | ||
| .compactMap { $0?.isActive } | ||
| .do(onNext: { isActive in | ||
| guard isActive else { | ||
| observer.onNext(false) | ||
| return | ||
| } | ||
| }) | ||
|
Comment on lines
+102
to
+107
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 이 부분은 토글 on/off 동작이 연속적으로 수행될 때를 잡아주는... 그런 부분인가요...??? |
||
| .filter { $0 } | ||
| .flatMap { _ in self.userService.postNoticeTime(time: time) } | ||
| .subscribe(onNext: { changeTimeSuccessed in | ||
| guard changeTimeSuccessed else { | ||
| observer.onNext(false) | ||
| return | ||
| } | ||
| observer.onNext(true) | ||
| }, onError: { err in | ||
| observer.onError(err) | ||
| }) | ||
| .disposed(by: self.disposeBag) | ||
| return Disposables.create() | ||
| } | ||
| } | ||
|
|
||
| public func disablePushNotice() -> Observable<Void> { | ||
| public func disablePushNotice() -> Observable<Bool> { | ||
| return Observable.create { observer in | ||
| observer.onNext(()) | ||
| self.userService.changeNoticeStatus(isActive: false) | ||
| .subscribe(onNext: { response in | ||
| guard let isActive = response?.isActive else { | ||
| observer.onNext(false) | ||
| return | ||
| } | ||
|
|
||
| observer.onNext(!isActive) | ||
| }, onError: { err in | ||
| observer.onError(err) | ||
| }) | ||
| .disposed(by: self.disposeBag) | ||
| return Disposables.create() | ||
| } | ||
| } | ||
|
|
||
Uh oh!
There was an error while loading. Please reload this page.