-
Notifications
You must be signed in to change notification settings - Fork 0
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
[WEAV-121] 홈 - 프로필 탭 구현 #39
Changes from all commits
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 | ||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
@@ -146,7 +146,7 @@ struct SplashAnimatedView: View { | |||||||||||||||||||
/// 로그아웃 -> 애니메이션 계속진행 | ||||||||||||||||||||
if isAuthorized { | ||||||||||||||||||||
try? await Task.sleep(for: .seconds(1)) | ||||||||||||||||||||
pushToHomeView() | ||||||||||||||||||||
await pushToHomeView() | ||||||||||||||||||||
break | ||||||||||||||||||||
} | ||||||||||||||||||||
} | ||||||||||||||||||||
|
@@ -177,7 +177,9 @@ struct SplashAnimatedView: View { | |||||||||||||||||||
|
||||||||||||||||||||
@MainActor | ||||||||||||||||||||
private func pushToHomeView() { | ||||||||||||||||||||
AppCoordinator.shared.changeRootView(.authDebug) | ||||||||||||||||||||
if let userInfo = AppCoordinator.shared.userInfo { | ||||||||||||||||||||
AppCoordinator.shared.changeRootView(.home(userInfo)) | ||||||||||||||||||||
} | ||||||||||||||||||||
Comment on lines
+180
to
+182
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. userInfo가 nil일 경우의 처리 로직 필요 현재 구현은 userInfo가 nil일 경우 아무런 동작도 하지 않습니다. 이는 잠재적인 데드락이나 사용자 경험 저하를 초래할 수 있습니다. 다음과 같이 수정하는 것을 제안합니다: @MainActor
private func pushToHomeView() {
if let userInfo = AppCoordinator.shared.userInfo {
AppCoordinator.shared.changeRootView(.home(userInfo))
+ } else {
+ Logger.error("유저 정보 없음")
+ AppCoordinator.shared.changeRootView(.signUp(.authPhoneInput))
}
} 📝 Committable suggestion
Suggested change
|
||||||||||||||||||||
} | ||||||||||||||||||||
|
||||||||||||||||||||
private func updateIconStates(for step: SplashAnimationStep) { | ||||||||||||||||||||
|
Original file line number | Diff line number | Diff line change | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
@@ -10,13 +10,21 @@ import Foundation | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
import Model | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
public enum PathType: Hashable { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
public static func == (lhs: PathType, rhs: PathType) -> Bool { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
return lhs.hashValue == rhs.hashValue | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
public func hash(into hasher: inout Hasher) { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
hasher.combine(self.name) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Comment on lines
+13
to
+19
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. 연관값을 무시하는 Hashable 구현이 필요합니다 현재 구현에는 몇 가지 문제점이 있습니다:
다음과 같이 수정하는 것을 제안합니다: public static func == (lhs: PathType, rhs: PathType) -> Bool {
- return lhs.hashValue == rhs.hashValue
+ switch (lhs, rhs) {
+ case (.designPreview, .designPreview),
+ (.authDebug, .authDebug),
+ (.intro, .intro),
+ (.home, .home),
+ (.signUp(let lType), .signUp(let rType)):
+ return lType == rType
+ default:
+ return false
+ }
}
public func hash(into hasher: inout Hasher) {
- hasher.combine(self.name)
+ switch self {
+ case .designPreview: hasher.combine(0)
+ case .authDebug: hasher.combine(1)
+ case .intro: hasher.combine(2)
+ case .home: hasher.combine(3)
+ case .signUp(let type):
+ hasher.combine(4)
+ hasher.combine(type)
+ }
} 📝 Committable suggestion
Suggested change
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
// App | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
case designPreview | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
case authDebug | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
case intro | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
// Features | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
case home | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
case home(UserInfo?) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
case signUp(SignUpSubViewType) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
#if STAGING || DEBUG | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,15 @@ | ||
// | ||
// Int+Ext.swift | ||
// CoreKit | ||
// | ||
// Created by 김지수 on 11/3/24. | ||
// Copyright © 2024 com.weave. All rights reserved. | ||
// | ||
|
||
import Foundation | ||
|
||
extension Int { | ||
public func toString() -> String { | ||
return String(self) | ||
} | ||
} | ||
jisu15-kim marked this conversation as resolved.
Show resolved
Hide resolved
|
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,6 @@ | ||
{ | ||
"info" : { | ||
"author" : "xcode", | ||
"version" : 1 | ||
} | ||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,23 @@ | ||
{ | ||
"images" : [ | ||
{ | ||
"filename" : "building_fill.png", | ||
"idiom" : "universal", | ||
"scale" : "1x" | ||
}, | ||
{ | ||
"filename" : "building_fill@2x.png", | ||
"idiom" : "universal", | ||
"scale" : "2x" | ||
}, | ||
{ | ||
"filename" : "building_fill@3x.png", | ||
"idiom" : "universal", | ||
"scale" : "3x" | ||
} | ||
], | ||
"info" : { | ||
"author" : "xcode", | ||
"version" : 1 | ||
} | ||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,23 @@ | ||
{ | ||
"images" : [ | ||
{ | ||
"filename" : "business_fill.png", | ||
"idiom" : "universal", | ||
"scale" : "1x" | ||
}, | ||
{ | ||
"filename" : "business_fill@2x.png", | ||
"idiom" : "universal", | ||
"scale" : "2x" | ||
}, | ||
{ | ||
"filename" : "business_fill@3x.png", | ||
"idiom" : "universal", | ||
"scale" : "3x" | ||
} | ||
], | ||
"info" : { | ||
"author" : "xcode", | ||
"version" : 1 | ||
} | ||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,23 @@ | ||
{ | ||
"images" : [ | ||
{ | ||
"filename" : "location_fill.png", | ||
"idiom" : "universal", | ||
"scale" : "1x" | ||
}, | ||
{ | ||
"filename" : "location_fill@2x.png", | ||
"idiom" : "universal", | ||
"scale" : "2x" | ||
}, | ||
{ | ||
"filename" : "location_fill@3x.png", | ||
"idiom" : "universal", | ||
"scale" : "3x" | ||
} | ||
], | ||
"info" : { | ||
"author" : "xcode", | ||
"version" : 1 | ||
} | ||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -9,19 +9,24 @@ | |
import Foundation | ||
import CommonKit | ||
import CoreKit | ||
import Model | ||
import NetworkKit | ||
|
||
//MARK: - Intent | ||
class HomeMainIntent { | ||
private weak var model: HomeMainModelActionable? | ||
private let input: DataModel | ||
private let authService: AuthServiceProtocol | ||
|
||
// MARK: Life cycle | ||
init( | ||
model: HomeMainModelActionable, | ||
input: DataModel | ||
input: DataModel, | ||
service: AuthServiceProtocol = AuthService.shared | ||
) { | ||
self.input = input | ||
self.model = model | ||
self.authService = service | ||
} | ||
} | ||
|
||
|
@@ -37,7 +42,9 @@ extension HomeMainIntent { | |
func task() async | ||
} | ||
|
||
struct DataModel {} | ||
struct DataModel { | ||
let userInfo: UserInfo? | ||
} | ||
} | ||
|
||
//MARK: - Intentable | ||
|
@@ -46,7 +53,17 @@ extension HomeMainIntent: HomeMainIntent.Intentable { | |
func onTapTab(_ tab: HomeMainTab) { | ||
model?.setSelectedTab(tab: tab) | ||
} | ||
func onAppear() {} | ||
func onAppear() { | ||
Task { | ||
if let userInfo = input.userInfo { | ||
model?.setUserInfo(userInfo: userInfo) | ||
} else { | ||
let userInfo = try await authService.requestMyUserInfo() | ||
AppCoordinator.shared.userInfo = userInfo | ||
model?.setUserInfo(userInfo: userInfo) | ||
} | ||
} | ||
} | ||
Comment on lines
+56
to
+66
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. 🛠️ Refactor suggestion 사용자 정보 로딩 로직 개선 제안 현재 구현은 작동하지만, 몇 가지 개선이 필요해 보입니다:
다음과 같은 개선을 제안드립니다: func onAppear() {
Task {
+ model?.setLoading(true)
if let userInfo = input.userInfo {
model?.setUserInfo(userInfo: userInfo)
} else {
+ do {
let userInfo = try await authService.requestMyUserInfo()
AppCoordinator.shared.userInfo = userInfo
model?.setUserInfo(userInfo: userInfo)
+ } catch {
+ model?.setError(error)
+ }
}
+ model?.setLoading(false)
}
}
|
||
|
||
func task() async {} | ||
|
||
|
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.
🛠️ Refactor suggestion
await 키워드 사용에 대한 에러 처리 개선 필요
try?
를 사용하여 에러를 무시하는 대신, 적절한 에러 처리를 구현하는 것이 좋습니다. 스플래시 화면에서의 네비게이션 실패는 사용자 경험에 중요한 영향을 미칠 수 있습니다.다음과 같이 수정하는 것을 제안합니다: