Skip to content

Commit

Permalink
fix #95 : 예외케이스 처리
Browse files Browse the repository at this point in the history
.
  • Loading branch information
enebin committed Sep 14, 2023
1 parent 985cef8 commit c285ac7
Show file tree
Hide file tree
Showing 4 changed files with 61 additions and 52 deletions.
1 change: 1 addition & 0 deletions Projects/Features/Sources/MyPage/MyPageFeature.swift
Original file line number Diff line number Diff line change
Expand Up @@ -230,6 +230,7 @@ public struct MyPageFeature: Reducer {

return .none
}
.ifLet(\.$alertState, action: /Action.alert)
.ifLet(\.$settingViewState, action: /Action.setting) {
SettingFeature()
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,7 @@ public struct RegistrationView: View {
Task(priority: .utility) {
guard let imageData = try await newImage?.loadTransferable(type: Data.self) else {
// TODO: Throw error and show alert
print("IMAGE ERROR")
return
}

Expand Down
101 changes: 53 additions & 48 deletions Projects/Features/Sources/Root/RootFeature.swift
Original file line number Diff line number Diff line change
Expand Up @@ -63,46 +63,53 @@ public struct RootFeature: Reducer {
}

case .updateMemberInformation(let receviedMemberData, let accessToken):
return .run(priority: .userInitiated) { send in
let memberInformation: MemberUpdateDTO.MemberData
if let receviedMemberData {
memberInformation = receviedMemberData
} else {
memberInformation = try await network.request(
.member(.fetch),
object: MemberUpdateDTO.self
).data
}

userStorage.userId = memberInformation.id
userStorage.nickname = memberInformation.nickname
userStorage.friendCode = memberInformation.friendCode

if let profileImageURL = URL(string: memberInformation.profileImage) {
userStorage.profileImageURL = profileImageURL
}

if let profileThumbnailURL = URL(string: memberInformation.profileImage) {
userStorage.profileThumbnailURL = profileThumbnailURL
}

if let userId = memberInformation.id, let nickname = memberInformation.nickname {
if memberInformation.isOnboardingClear != true {
await send(
.updateState(
.needOnboarding(OnboardingFeature.State(
authorizationToken: accessToken, nickname: nickname))))
return .run(
priority: .userInitiated,
operation: { send in
let memberInformation: MemberUpdateDTO.MemberData
if let receviedMemberData {
memberInformation = receviedMemberData
} else {
await send(.updateState(
.canUseApp(MainPageFeature.State(userId: userId, nickname: nickname))))
memberInformation = try await network.request(
.member(.fetch),
object: MemberUpdateDTO.self
).data
}
} else {
await send(.updateState(.needRegistration(RegistrationFeature.State())))
}

userStorage.userId = memberInformation.id
userStorage.nickname = memberInformation.nickname
userStorage.friendCode = memberInformation.friendCode

if let profileImageURL = URL(string: memberInformation.profileImage) {
userStorage.profileImageURL = profileImageURL
}

if let profileThumbnailURL = URL(string: memberInformation.profileImage) {
userStorage.profileThumbnailURL = profileThumbnailURL
}

if let userId = memberInformation.id, let nickname = memberInformation.nickname {
if memberInformation.isOnboardingClear != true {
await send(
.updateState(
.needOnboarding(OnboardingFeature.State(
authorizationToken: accessToken, nickname: nickname))))
} else {
await send(.updateState(
.canUseApp(MainPageFeature.State(userId: userId, nickname: nickname))))
}
} else {
await send(.updateState(.needRegistration(RegistrationFeature.State())))
}

await send(.registerPushNotification)
},
catch: { _, send in
// logout
userStorage.accessToken = nil
await send(.updateState(.needSignIn(SignInFeature.State())))
})

await send(.registerPushNotification)
}

case .updateState(let receivedState):
state = receivedState
return .none
Expand Down Expand Up @@ -130,7 +137,7 @@ public struct RootFeature: Reducer {
return .send(.updateMemberInformation(withMemberData: nil, authorizationToken: token))

case .failure:
return .none
return logout
}

case .login(.signInWithKakaoResponse(let response)):
Expand All @@ -143,20 +150,20 @@ public struct RootFeature: Reducer {
return .send(.updateMemberInformation(withMemberData: nil, authorizationToken: token))

case .failure:
return .none
return logout
}

case .registration(.finishRegisterResponse(let response)):
guard let token = authorizationToken else {
// 로그인 재시도
return gotoSignInState
return logout
}
return .send(.updateMemberInformation(withMemberData: response.data, authorizationToken: token))

case .onboarding(.testResult(.closeButtonDidTap)):
guard let token = authorizationToken else {
// 로그인 재시도
return gotoSignInState
return logout
}
guard let userId = userStorage.userId, let nickname = userStorage.nickname else {
// 멤버 정보 수신 재시도
Expand All @@ -165,13 +172,10 @@ public struct RootFeature: Reducer {
return .send(.updateState(.canUseApp(MainPageFeature.State(userId: userId, nickname: nickname))))

case .mainPage(.myPage(.setting(.presented(.view(.logout))))):
userStorage.accessToken = nil
// Logout
return gotoSignInState
return logout

case .mainPage(.home(.requestLogout)):
// Logout
return gotoSignInState
return logout

default:
return .none
Expand All @@ -191,7 +195,8 @@ public struct RootFeature: Reducer {
}
}

private var gotoSignInState: Effect<RootFeature.Action> {
.send(.updateState(.needSignIn(SignInFeature.State())))
private var logout: Effect<RootFeature.Action> {
userStorage.accessToken = nil
return .send(.updateState(.needSignIn(SignInFeature.State())))
}
}
10 changes: 6 additions & 4 deletions Projects/Network/Sources/Network/API/RegistrationAPI.swift
Original file line number Diff line number Diff line change
Expand Up @@ -42,11 +42,13 @@ extension RegistrationAPI: BaseAPI {
return .requestJSONEncodable(nickname)

case .uploadImage(let imageData):
let multipartFormData = MultipartFormData(
let multipartData = MultipartFormData(
provider: .data(imageData),
name: "profile_image")

return .uploadMultipart([multipartFormData])
name: "image",
fileName: "image.jpeg",
mimeType: "image/jpeg")

return .uploadMultipart([multipartData])

case .updateMemberDetails(let nickname, let profileImage, let profileThumbnail):
return .requestParameters(
Expand Down

0 comments on commit c285ac7

Please sign in to comment.