exec method

Future<void> exec()

運動データマスターを更新または挿入する。

サーバーから最新の運動データマスターを取得し、ローカルデータベースを更新または挿入します。 ローカルデータベースにバージョンデータがない場合は全件登録します。 バージョンが異なる場合は全件更新します。 バージョンが同じ場合は何もしません。

Return: Future が返されます。このFutureは、操作が完了すると完了します。

使用するリポジトリ:

使用するAPI:

  • ExerciseApi.getExerciseDataMasterGet : 運動データマスターの取得を行うAPI

Implementation

Future<void> exec() async {
  try {
    /// APIから取得した運動データマスター
    final exerciseDataMasterModel =
        await _exerciseDataMasterRepository.getExerciseDataMasterList();

    /// ローカルDBの運動データバージョン
    final exerciseDataVersionModel =
        await _exerciseDataVersionRepository.get();

    // ローカルDBにバージョンデータがない場合は全件登録
    if (exerciseDataVersionModel == null) {
      await _insertLocalDatabase(exerciseDataMasterModel);
      return;
    }

    /// APIから取得した運動データマスターのバージョン
    final remoteMasterVersion =
        exerciseDataMasterModel.versions.masterVersion;

    /// ローカルDBの運動データマスターのバージョン
    final localMasterVersion = exerciseDataVersionModel.masterVersion;

    // バージョンが異なる場合は全件更新
    if (remoteMasterVersion != localMasterVersion) {
      await _updateLocalDatabase(exerciseDataMasterModel);
      return;
    }
  } on RepositoryException catch (error, stackTrace) {
    throw _errorHandler.handleRepositoryError(error, stackTrace);
  } catch (e, stackTrace) {
    throw _errorHandler.handleUnknownError(e, stackTrace);
  }
}