- 新增 AuthManager (ObservableObject) 集中管理鉴权状态: - session 恢复 → token 验证 → 自动刷新 - 登出自动重定向到登录页 - NotificationCenter 监听 401 实现全局踢回 - APIClient 新增 401 自动 refresh + 单次重试 - App.swift 重构鉴权门控: - 去掉 hasCompletedOnboarding 绕过鉴权漏洞 - 拆分为 SplashScreen / PreLoginFlow / PostLoginOnboardingFlow / ContentView - LoginPage 移除"跳过"按钮 - KeychainHelper 实现 token 安全存储 - APIModels 对齐后端 Prisma schema (UserProfile/KnowledgeBase/ReviewCard 等) - APIService 简化 AuthService,token 管理迁移至 AuthManager - 新增 8 个 ViewModel 接入 API: ProfileViewModel, LibraryViewModel, StudyViewModel, ActiveRecallViewModel, AIAnalysisViewModel, ReviewViewModel, ActivityViewModel - 新增 EditProfilePage 编辑资料页 - 新增 NotificationListView 通知列表页 - AIHomeView 修复"检测中"卡住 (改用公开 GET / 健康检查) - SettingsView 登出调用 AuthManager.signOut() 实现重定向 - 修复 NotificationItem 命名冲突、Combine import 缺失等编译错误 Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
81 lines
2.4 KiB
Swift
81 lines
2.4 KiB
Swift
import Combine
|
|
import Foundation
|
|
|
|
@MainActor
|
|
class LibraryViewModel: ObservableObject {
|
|
@Published var knowledgeBases: [KnowledgeBase] = []
|
|
@Published var isLoading = false
|
|
@Published var errorMessage: String?
|
|
|
|
func loadKnowledgeBases() async {
|
|
isLoading = true
|
|
errorMessage = nil
|
|
do {
|
|
knowledgeBases = try await KnowledgeBaseService.shared.list()
|
|
} catch {
|
|
errorMessage = "加载知识库失败"
|
|
}
|
|
isLoading = false
|
|
}
|
|
|
|
func createKnowledgeBase(title: String, description: String?) async -> KnowledgeBase? {
|
|
do {
|
|
let kb = try await KnowledgeBaseService.shared.create(title: title, description: description)
|
|
knowledgeBases.insert(kb, at: 0)
|
|
return kb
|
|
} catch {
|
|
errorMessage = "创建知识库失败"
|
|
return nil
|
|
}
|
|
}
|
|
|
|
func deleteKnowledgeBase(id: String) async {
|
|
do {
|
|
_ = try await KnowledgeBaseService.shared.delete(id: id)
|
|
knowledgeBases.removeAll { $0.id == id }
|
|
} catch {
|
|
errorMessage = "删除知识库失败"
|
|
}
|
|
}
|
|
}
|
|
|
|
@MainActor
|
|
class LibraryDetailViewModel: ObservableObject {
|
|
@Published var items: [KnowledgeItem] = []
|
|
@Published var knowledgeBase: KnowledgeBase?
|
|
@Published var isLoading = false
|
|
@Published var errorMessage: String?
|
|
|
|
func loadItems(knowledgeBaseId: String) async {
|
|
isLoading = true
|
|
errorMessage = nil
|
|
do {
|
|
items = try await KnowledgeItemService.shared.list(knowledgeBaseId: knowledgeBaseId)
|
|
} catch {
|
|
errorMessage = "加载知识点失败"
|
|
}
|
|
isLoading = false
|
|
}
|
|
|
|
func loadKnowledgeBase(id: String) async {
|
|
do {
|
|
knowledgeBase = try await KnowledgeBaseService.shared.detail(id: id)
|
|
} catch {
|
|
errorMessage = "加载知识库详情失败"
|
|
}
|
|
}
|
|
|
|
func addItem(knowledgeBaseId: String, title: String, content: String?) async -> KnowledgeItem? {
|
|
do {
|
|
let item = try await KnowledgeItemService.shared.create(
|
|
knowledgeBaseId: knowledgeBaseId, title: title, content: content
|
|
)
|
|
items.append(item)
|
|
return item
|
|
} catch {
|
|
errorMessage = "添加知识点失败"
|
|
return nil
|
|
}
|
|
}
|
|
}
|