apple_health_upload_api.dart 2.39 KB
import 'package:doublefeel_flutter/core/error/http_error_handling_policy.dart';
import 'package:doublefeel_flutter/core/network/api_paths.dart';
import 'package:doublefeel_flutter/core/network/dio_client.dart';
import 'package:doublefeel_flutter/core/result/app_result.dart';
import 'package:doublefeel_flutter/core/result/safe_call.dart';

import 'models/apple_health_upload_record.dart';
import 'models/apple_health_upload_request.dart';
import 'models/upload_activity_target.dart';

class AppleHealthUploadApi {
  AppleHealthUploadApi(this._dioClient);

  final DioClient _dioClient;

  Future<AppResult<void>> uploadCommonData(
    AppleHealthCommonUploadRequest request,
  ) {
    return safeCall(
      call: () async {
        await _dioClient.dio.post(
          ApiPaths.healthUploadCommon,
          data: request.toJson(),
        );
      },
    );
  }

  Future<AppResult<AppleHealthLatestUploadRecordList>>
      getLatestCommonUploadRecordList({
    HttpErrorHandlingPolicy? errorHandlingPolicy =
        HttpErrorHandlingPolicy.defaultPolicy,
  }) {
    return safeCall(
      call: () async {
        final response = await _dioClient.dio.get(ApiPaths.healthUploadCommon);
        return AppleHealthLatestUploadRecordList.fromJson(
          response.data as Map<String, dynamic>,
        );
      },
      errorHandlingPolicy: errorHandlingPolicy,
    );
  }

  Future<AppResult<void>> uploadSleepData(
    AppleHealthSleepUploadRequest request,
  ) {
    return safeCall(
      call: () async {
        await _dioClient.dio.post(
          ApiPaths.healthUploadSleep,
          data: request.toJson(),
        );
      },
    );
  }

  Future<AppResult<AppleHealthLatestSleepUploadRecord>>
      getLatestSleepUploadRecord({
    HttpErrorHandlingPolicy? errorHandlingPolicy =
        HttpErrorHandlingPolicy.defaultPolicy,
  }) {
    return safeCall(
      call: () async {
        final response = await _dioClient.dio.get(ApiPaths.healthUploadSleep);
        return AppleHealthLatestSleepUploadRecord.fromJson(
          response.data as Map<String, dynamic>,
        );
      },
      errorHandlingPolicy: errorHandlingPolicy,
    );
  }

  Future<AppResult<void>> uploadActivityTarget(
    HealthActivityTargetUploadData target,
  ) {
    return safeCall(
      call: () async {
        await _dioClient.dio.post(
          ApiPaths.healthActivityTarget,
          data: target.toJson(),
        );
      },
    );
  }
}