dependency_registrars.dart 3.97 KB
import 'package:doublefeel_flutter/core/network/api/friend_api.dart';
import 'package:doublefeel_flutter/core/services/raw_data_service/health_raw_data_core_service.dart';
import 'package:get/get.dart';

import '../../core/config/app_environment_config.dart';
import '../../core/error/app_error_handler.dart';
import '../../core/network/api/config_api.dart';
import '../../core/services/app_config_service.dart';
import '../../core/network/api/health_api.dart';
import '../../core/network/api/interaction_api.dart';
import '../../core/network/api/obs_api.dart';
import '../../core/network/api/pay_api.dart';
import '../../core/network/api/theme_api.dart';
import '../../core/network/api/user_api.dart';
import '../../core/network/api/vip_api.dart';
import '../../core/network/dio_client.dart';
import '../../core/services/im_service.dart';
import '../../core/services/obs_upload_service.dart';
import '../../core/services/push_service.dart';
import '../../core/services/thinking_data_service.dart';
import '../../core/services/user_state_service.dart';
import '../../data/local/local_storage.dart';
import '../../data/local/user_account_storage.dart';
import '../../data/local/user_preferences_storage.dart';

/// App-wide infrastructure (error handling, config, network client).
void registerCoreDeps({
  required AppEnvironmentConfig environmentConfig,
  required UserPreferencesStorage userPreferencesStorage,
  required UserAccountStorage userAccountStorage,
  required LocalStorage localStorage,
}) {
  Get.put(AppErrorHandler(), permanent: true);
  Get.put(localStorage, permanent: true);
  Get.put(environmentConfig, permanent: true);
  Get.put(userPreferencesStorage, permanent: true);
  Get.put(userAccountStorage, permanent: true);
  Get.put(
    DioClient(
      Get.find<AppEnvironmentConfig>(),
      Get.find<UserPreferencesStorage>(),
    ),
    permanent: true,
  );
}

/// User session, auth APIs, and login-side SDK wiring.
void registerUserSessionDeps() {
  final dioClient = Get.find<DioClient>();
  final userPrefs = Get.find<UserPreferencesStorage>();
  final environmentConfig = Get.find<AppEnvironmentConfig>();

  Get.put(UserApi(dioClient), permanent: true);
  Get.put(VipApi(dioClient), permanent: true);
  Get.put(FriendApi(dioClient), permanent: true);
  Get.put<ImService>(ImServiceStub(), permanent: true);
  Get.put(
    ThinkingDataService(environmentConfig),
    permanent: true,
  );
  Get.put(PushService(Get.find<UserApi>()), permanent: true);
  Get.put(
    HealthRawDataCoreService(
      environmentConfig: environmentConfig,
      userIdProvider: () => userPrefs.preferences.value.meUserInfo?.id ?? 0,
      serverHealthApi: HealthApi(dioClient),
    ),
    permanent: true,
  );
  Get.put(
    UserStateService(
      environmentConfig,
      userPrefs,
      Get.find<UserApi>(),
      Get.find<ImService>(),
      Get.find<PushService>(),
      Get.find<ThinkingDataService>(),
      Get.find<HealthRawDataCoreService>(),
    ),
    permanent: true,
  );
}

/// Health data API and upload pipeline (lazy, recreated after dispose).
void registerHealthDeps(DioClient dioClient) {
  Get.lazyPut(() => HealthApi(dioClient), fenix: true);
}

/// Payment API.
void registerPayDeps(DioClient dioClient) {
  Get.lazyPut(() => PayApi(dioClient), fenix: true);
}

/// Remote config API + global AppConfig service.
void registerConfigDeps(DioClient dioClient) {
  Get.lazyPut(() => ConfigApi(dioClient), fenix: true);
  Get.put(AppConfigService(Get.find<ConfigApi>()), permanent: true);
}

/// Watch theme API.
void registerThemeDeps(DioClient dioClient) {
  Get.lazyPut(() => ThemeApi(dioClient), fenix: true);
}

/// Partner interaction API and wear engine.
void registerInteractionDeps(
  DioClient dioClient,
  UserPreferencesStorage userPrefs,
) {
  Get.lazyPut(() => InteractionApi(dioClient), fenix: true);
}

/// Object storage upload API and service.
void registerObsDeps(DioClient dioClient) {
  Get.lazyPut(() => ObsApi(dioClient), fenix: true);
  Get.lazyPut(() => ObsUploadService(Get.find<ObsApi>()), fenix: true);
}