124 lines
4.2 KiB
Swift
124 lines
4.2 KiB
Swift
//
|
||
// 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
|
||
)
|
||
}
|
||
}
|