Refactor AppServices into grouped bundles and document DI conventions.

Centralize dependency wiring with Session/Context/Network/UI/Runtime bundles, unify leaf ViewControllers on appServices, and add a test initializer with AppServicesTests.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-06-26 15:24:25 +08:00
parent d99a5b1bf8
commit 24a7339b68
10 changed files with 385 additions and 114 deletions

View File

@ -0,0 +1,96 @@
//
// AppServicesBundles.swift
// suixinkan
//
// Created by Codex on 2026/6/26.
//
import Foundation
@MainActor
///
struct SessionBundle {
let appSession: AppSession
let authSessionCoordinator: AuthSessionCoordinator
let sessionBootstrapper: SessionBootstrapper
}
@MainActor
/// Context
struct AppContextBundle {
let accountContext: AccountContext
let permissionContext: PermissionContext
let scenicSpotContext: ScenicSpotContext
}
@MainActor
/// `APIClient` token
struct NetworkBundle {
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
/// `APIClient` API
init(apiClient: APIClient) {
self.apiClient = apiClient
authAPI = AuthAPI(client: apiClient)
profileAPI = ProfileAPI(client: apiClient)
uploadAPI = UploadAPI(client: apiClient)
ossUploadService = OSSUploadService(configService: uploadAPI)
accountContextAPI = AccountContextAPI(client: apiClient)
ordersAPI = OrdersAPI(client: apiClient)
statisticsAPI = StatisticsAPI(client: apiClient)
paymentAPI = PaymentAPI(client: apiClient)
walletAPI = WalletAPI(client: apiClient)
pushAPI = PushAPI(client: apiClient)
scenicPermissionAPI = ScenicPermissionAPI(client: apiClient)
scenicSettlementAPI = ScenicSettlementAPI(client: apiClient)
messageCenterAPI = MessageCenterAPI(client: apiClient)
scenicQueueAPI = ScenicQueueAPI(client: apiClient)
liveAPI = LiveAPI(client: apiClient)
operatingAreaAPI = OperatingAreaAPI(client: apiClient)
pilotCertificationAPI = PilotCertificationAPI(client: apiClient)
taskAPI = TaskAPI(client: apiClient)
projectAPI = ProjectAPI(client: apiClient)
scheduleAPI = ScheduleAPI(client: apiClient)
inviteAPI = InviteAPI(client: apiClient)
assetsAPI = AssetsAPI(client: apiClient)
punchPointAPI = PunchPointAPI(client: apiClient)
locationReportAPI = LocationReportAPI(client: apiClient)
}
}
@MainActor
/// UI ToastLoading
struct UIFeedbackBundle {
let toastCenter: ToastCenter
let globalLoading: GlobalLoadingCenter
}
@MainActor
///
struct AppRuntimeBundle {
let scenicQueueRuntime: ScenicQueueRuntime
}