Initial commit: suixinkan_ios UIKit rewrite project.
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
123
suixinkan_ios/App/AppServices.swift
Normal file
123
suixinkan_ios/App/AppServices.swift
Normal file
@ -0,0 +1,123 @@
|
||||
//
|
||||
// AppServices.swift
|
||||
// suixinkan
|
||||
//
|
||||
// Created by Codex on 2026/6/26.
|
||||
//
|
||||
|
||||
import Foundation
|
||||
|
||||
@MainActor
|
||||
/// 全局依赖容器,集中提供 ViewModel 与 ViewController 所需的 API 和上下文。
|
||||
final class AppServices {
|
||||
static let shared = AppServices()
|
||||
|
||||
let appSession = AppSession()
|
||||
let accountContext = AccountContext()
|
||||
let permissionContext = PermissionContext()
|
||||
let scenicSpotContext = ScenicSpotContext()
|
||||
let appRouter = AppRouter()
|
||||
let toastCenter = ToastCenter()
|
||||
let globalLoading = GlobalLoadingCenter()
|
||||
let scenicQueueRuntime = ScenicQueueRuntime()
|
||||
|
||||
let apiClient: APIClient
|
||||
let authAPI: AuthAPI
|
||||
let profileAPI: ProfileAPI
|
||||
let uploadAPI: UploadAPI
|
||||
let ossUploadService: OSSUploadService
|
||||
let accountContextAPI: AccountContextAPI
|
||||
let ordersAPI: OrdersAPI
|
||||
let statisticsAPI: StatisticsAPI
|
||||
let paymentAPI: PaymentAPI
|
||||
let walletAPI: WalletAPI
|
||||
let pushAPI: PushAPI
|
||||
let scenicPermissionAPI: ScenicPermissionAPI
|
||||
let scenicSettlementAPI: ScenicSettlementAPI
|
||||
let messageCenterAPI: MessageCenterAPI
|
||||
let scenicQueueAPI: ScenicQueueAPI
|
||||
let liveAPI: LiveAPI
|
||||
let operatingAreaAPI: OperatingAreaAPI
|
||||
let pilotCertificationAPI: PilotCertificationAPI
|
||||
let taskAPI: TaskAPI
|
||||
let projectAPI: ProjectAPI
|
||||
let scheduleAPI: ScheduleAPI
|
||||
let inviteAPI: InviteAPI
|
||||
let assetsAPI: AssetsAPI
|
||||
let punchPointAPI: PunchPointAPI
|
||||
let locationReportAPI: LocationReportAPI
|
||||
|
||||
let authSessionCoordinator: AuthSessionCoordinator
|
||||
let sessionBootstrapper: SessionBootstrapper
|
||||
private let tokenStore: SessionTokenStore
|
||||
private let snapshotStore: AccountSnapshotStore
|
||||
|
||||
/// 当前景区 ID。
|
||||
var currentScenicId: Int? {
|
||||
accountContext.currentScenic?.id
|
||||
}
|
||||
|
||||
/// 当前用户 staffId,用于钱包等接口。
|
||||
var staffId: Int? {
|
||||
Int(accountContext.profile?.userId ?? "")
|
||||
}
|
||||
|
||||
/// 当前用户 ID 字符串。
|
||||
var userId: String? {
|
||||
accountContext.profile?.userId
|
||||
}
|
||||
|
||||
private init() {
|
||||
let client = APIClient()
|
||||
let tokenStore = SessionTokenStore()
|
||||
let snapshotStore = AccountSnapshotStore()
|
||||
self.tokenStore = tokenStore
|
||||
self.snapshotStore = snapshotStore
|
||||
apiClient = client
|
||||
authAPI = AuthAPI(client: client)
|
||||
profileAPI = ProfileAPI(client: client)
|
||||
uploadAPI = UploadAPI(client: client)
|
||||
ossUploadService = OSSUploadService(configService: uploadAPI)
|
||||
accountContextAPI = AccountContextAPI(client: client)
|
||||
ordersAPI = OrdersAPI(client: client)
|
||||
statisticsAPI = StatisticsAPI(client: client)
|
||||
paymentAPI = PaymentAPI(client: client)
|
||||
walletAPI = WalletAPI(client: client)
|
||||
pushAPI = PushAPI(client: client)
|
||||
scenicPermissionAPI = ScenicPermissionAPI(client: client)
|
||||
scenicSettlementAPI = ScenicSettlementAPI(client: client)
|
||||
messageCenterAPI = MessageCenterAPI(client: client)
|
||||
scenicQueueAPI = ScenicQueueAPI(client: client)
|
||||
liveAPI = LiveAPI(client: client)
|
||||
operatingAreaAPI = OperatingAreaAPI(client: client)
|
||||
pilotCertificationAPI = PilotCertificationAPI(client: client)
|
||||
taskAPI = TaskAPI(client: client)
|
||||
projectAPI = ProjectAPI(client: client)
|
||||
scheduleAPI = ScheduleAPI(client: client)
|
||||
inviteAPI = InviteAPI(client: client)
|
||||
assetsAPI = AssetsAPI(client: client)
|
||||
punchPointAPI = PunchPointAPI(client: client)
|
||||
locationReportAPI = LocationReportAPI(client: client)
|
||||
authSessionCoordinator = AuthSessionCoordinator(
|
||||
tokenStore: tokenStore,
|
||||
snapshotStore: snapshotStore,
|
||||
preferencesStore: AppPreferencesStore()
|
||||
)
|
||||
sessionBootstrapper = SessionBootstrapper(
|
||||
tokenStore: tokenStore,
|
||||
snapshotStore: snapshotStore
|
||||
)
|
||||
apiClient.bindAuthTokenProvider { [unowned self] in
|
||||
appSession.token
|
||||
}
|
||||
}
|
||||
|
||||
/// 绑定推送与 UIKit 导航。
|
||||
func configurePushNotifications() {
|
||||
PushNotificationManager.shared.configure(
|
||||
api: pushAPI,
|
||||
session: appSession,
|
||||
router: appRouter
|
||||
)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user