Files
suixinkan_ios_uikit/suixinkan_ios/App/AppFeatureServices.swift
汉秋 0d8f97417b Refactor AppServices into assembly, feature facades, and lifecycle coordinator.
Extract dependency wiring and session lifecycle from the container and RootViewController, split NetworkBundle by domain, and add module-level feature services while keeping flat accessors for compatibility.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-29 09:32:44 +08:00

140 lines
5.3 KiB
Swift
Raw Permalink 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.

//
// AppFeatureServices.swift
// suixinkan
//
// Created by Codex on 2026/6/29.
//
import Foundation
@MainActor
/// API
struct OrdersFeatureServices {
private let services: AppServices
///
init(services: AppServices) {
self.services = services
}
var api: OrdersAPI { services.ordersAPI }
var currentScenicId: Int? { services.currentScenicId }
var currentStoreId: Int? { services.accountContext.currentStore?.id }
var currentRoleId: Int? { services.permissionContext.currentRole?.id }
var navigator: AppNavigator { services.appNavigator }
var toastCenter: ToastCenter { services.toastCenter }
var globalLoading: GlobalLoadingCenter { services.globalLoading }
}
@MainActor
/// 退
struct ProfileFeatureServices {
private let services: AppServices
///
init(services: AppServices) {
self.services = services
}
var authAPI: AuthAPI { services.authAPI }
var profileAPI: ProfileAPI { services.profileAPI }
var accountContextAPI: AccountContextAPI { services.accountContextAPI }
var uploader: OSSUploadService { services.ossUploadService }
var appSession: AppSession { services.appSession }
var accountContext: AccountContext { services.accountContext }
var permissionContext: PermissionContext { services.permissionContext }
var scenicSpotContext: ScenicSpotContext { services.scenicSpotContext }
var authSessionCoordinator: AuthSessionCoordinator { services.authSessionCoordinator }
var currentScenicId: Int? { services.currentScenicId }
var navigator: AppNavigator { services.appNavigator }
var toastCenter: ToastCenter { services.toastCenter }
var globalLoading: GlobalLoadingCenter { services.globalLoading }
/// 退
func logout() {
authSessionCoordinator.logout(
appSession: appSession,
accountContext: accountContext,
permissionContext: permissionContext,
scenicSpotContext: scenicSpotContext,
appNavigator: navigator,
toastCenter: toastCenter
)
services.scenicQueueRuntime.stop()
}
}
@MainActor
///
struct HomeFeatureServices {
private let services: AppServices
///
init(services: AppServices) {
self.services = services
}
var accountContext: AccountContext { services.accountContext }
var permissionContext: PermissionContext { services.permissionContext }
var commonMenuStore: HomeCommonMenuStore { HomeCommonMenuStore() }
var navigator: AppNavigator { services.appNavigator }
var toastCenter: ToastCenter { services.toastCenter }
}
@MainActor
/// API
struct AssetsFeatureServices {
private let services: AppServices
///
init(services: AppServices) {
self.services = services
}
var api: AssetsAPI { services.assetsAPI }
var uploader: OSSUploadService { services.ossUploadService }
var currentScenicId: Int? { services.currentScenicId }
var transferStore: CloudTransferStore { CloudTransferStore.shared }
var toastCenter: ToastCenter { services.toastCenter }
var globalLoading: GlobalLoadingCenter { services.globalLoading }
}
@MainActor
/// API
struct QueueFeatureServices {
private let services: AppServices
///
init(services: AppServices) {
self.services = services
}
var api: ScenicQueueAPI { services.scenicQueueAPI }
var currentScenicId: Int? { services.currentScenicId }
var userId: String? { services.userId }
var scenicSpotContext: ScenicSpotContext { services.scenicSpotContext }
var runtime: ScenicQueueRuntime { ScenicQueueRuntime.shared }
var toastCenter: ToastCenter { services.toastCenter }
var globalLoading: GlobalLoadingCenter { services.globalLoading }
/// 使 App
func updateRuntime(scenePhase: AppScenePhase) {
runtime.update(
api: api,
userId: userId,
scenicId: currentScenicId,
scenePhase: scenePhase
)
}
}
@MainActor
/// `AppServices` 访
extension AppServices {
var ordersFeatureServices: OrdersFeatureServices { OrdersFeatureServices(services: self) }
var profileFeatureServices: ProfileFeatureServices { ProfileFeatureServices(services: self) }
var homeFeatureServices: HomeFeatureServices { HomeFeatureServices(services: self) }
var assetsFeatureServices: AssetsFeatureServices { AssetsFeatureServices(services: self) }
var queueFeatureServices: QueueFeatureServices { QueueFeatureServices(services: self) }
}