apple_health_upload_tool.dart 2.22 KB
import 'package:doublefeel_flutter/core/result/app_result.dart';

import 'apple_health_upload_api.dart';
import 'models/apple_health_upload_record.dart';
import 'models/apple_health_upload_request.dart';
import 'models/apple_health_upload_sample.dart';
import 'models/upload_activity_target.dart';
import 'models/upload_sleep.dart';

class AppleHealthUploadTool {
  AppleHealthUploadTool(this._api);

  final AppleHealthUploadApi _api;

  Future<AppleHealthUploadResult> upload({
    List<AppleHealthUploadSample> commonData = const [],
    List<HealthSleepUploadData> sleepData = const [],
    HealthActivityTargetUploadData? activityTarget,
  }) async {
    AppResult<void>? commonResult;
    AppResult<void>? sleepResult;
    AppResult<void>? activityTargetResult;

    if (commonData.isNotEmpty) {
      commonResult = await _api.uploadCommonData(
        AppleHealthCommonUploadRequest(dataList: commonData),
      );
    }

    if (sleepData.isNotEmpty) {
      sleepResult = await _api.uploadSleepData(
        AppleHealthSleepUploadRequest(dataList: sleepData),
      );
    }

    if (activityTarget != null) {
      activityTargetResult = await _api.uploadActivityTarget(activityTarget);
    }

    return AppleHealthUploadResult(
      commonUploadSuccess:
          commonResult == null || commonResult is AppSuccess<void>,
      sleepUploadSuccess:
          sleepResult == null || sleepResult is AppSuccess<void>,
      activityTargetUploadSuccess: activityTargetResult == null ||
          activityTargetResult is AppSuccess<void>,
    );
  }

  Future<AppResult<AppleHealthLatestUploadRecordList>>
      getLatestCommonUploadRecordList() {
    return _api.getLatestCommonUploadRecordList();
  }

  Future<AppResult<AppleHealthLatestSleepUploadRecord>>
      getLatestSleepUploadRecord() {
    return _api.getLatestSleepUploadRecord();
  }
}

class AppleHealthUploadResult {
  const AppleHealthUploadResult({
    required this.commonUploadSuccess,
    required this.sleepUploadSuccess,
    required this.activityTargetUploadSuccess,
  });

  final bool commonUploadSuccess;
  final bool sleepUploadSuccess;
  final bool activityTargetUploadSuccess;

  bool get isSuccess =>
      commonUploadSuccess && sleepUploadSuccess && activityTargetUploadSuccess;
}