Files
e-party-iOS/yana/Features/SettingFeature.swift
edwinQQQ 0fe3b6cb7a feat: 新增用户信息获取功能及相关模型
- 在APIEndpoints.swift中新增getUserInfo端点以支持获取用户信息。
- 在APIModels.swift中实现获取用户信息请求和响应模型,处理用户信息的请求与解析。
- 在UserInfoManager中新增方法以从服务器获取用户信息,并在登录成功后自动获取用户信息。
- 在SettingFeature中新增用户信息刷新状态管理,支持用户信息的刷新操作。
- 在SettingView中集成用户信息刷新按钮,提升用户体验。
- 在SplashFeature中实现自动获取用户信息的逻辑,优化用户登录流程。
- 在yanaAPITests中添加用户信息相关的单元测试,确保功能的正确性。
2025-07-23 11:46:46 +08:00

103 lines
3.5 KiB
Swift
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import Foundation
import ComposableArchitecture
@Reducer
struct SettingFeature {
@ObservableState
struct State: Equatable {
var userInfo: UserInfo?
var accountModel: AccountModel?
var isLoading = false
var error: String?
var isRefreshingUserInfo = false //
}
enum Action: Equatable {
case onAppear
case loadUserInfo
case userInfoLoaded(UserInfo?)
case loadAccountModel
case accountModelLoaded(AccountModel?)
case refreshUserInfo //
case refreshUserInfoResponse(TaskResult<UserInfo?>) //
case logoutTapped
case logout
case dismissTapped
}
@Dependency(\.apiService) var apiService // API
var body: some ReducerOf<Self> {
Reduce { state, action in
switch action {
case .onAppear:
return .concatenate(
.send(.loadUserInfo),
.send(.loadAccountModel)
)
case .loadUserInfo:
return .run { send in
let userInfo = await UserInfoManager.getUserInfo()
await send(.userInfoLoaded(userInfo))
}
case let .userInfoLoaded(userInfo):
state.userInfo = userInfo
return .none
case .loadAccountModel:
return .run { send in
let accountModel = await UserInfoManager.getAccountModel()
await send(.accountModelLoaded(accountModel))
}
case let .accountModelLoaded(accountModel):
state.accountModel = accountModel
return .none
case .refreshUserInfo: //
return .none
// state.isRefreshingUserInfo = true
// state.error = nil
// return .run { send in
// let userInfo = await UserInfoManager.refreshCurrentUserInfo(apiService: apiService)
// await send(.refreshUserInfoResponse(.success(userInfo)))
// }
case let .refreshUserInfoResponse(.success(userInfo)): //
state.isRefreshingUserInfo = false
if let userInfo = userInfo {
state.userInfo = userInfo
state.error = nil
} else {
state.error = "刷新用户信息失败"
}
return .none
case let .refreshUserInfoResponse(.failure(error)): //
state.isRefreshingUserInfo = false
state.error = error.localizedDescription
return .none
case .logoutTapped:
return .send(.logout)
case .logout:
state.isLoading = true
return .run { _ in
await UserInfoManager.clearAllAuthenticationData()
}
case .dismissTapped:
return .none
}
}
}
}
// 使
// extension Notification.Name {
// static let settingsDismiss = Notification.Name("settingsDismiss")
// }