onPostloadCollection method

Future<void> onPostloadCollection(
  1. ModelAdapterCollectionQuery query,
  2. Map<String, DynamicMap>? value
)

This is the process after the collection is read.

Specify the query passed from the collection in query.

Specify the value read in value.

コレクションを読み込んだ後の処理です。

queryにコレクションから渡されたクエリを指定します。

valueに読み込んだ値を指定します。

Implementation

Future<void> onPostloadCollection(
  ModelAdapterCollectionQuery query,
  Map<String, DynamicMap>? value,
) async {
  final validationQueries = query.query.validationQueries
      ?.where(
        (e) =>
            e.permission == ModelValidationQueryPermissionType.allowRead ||
            e.permission ==
                ModelValidationQueryPermissionType.allowReadCollection,
      )
      .toList()
      .sortTo((a, b) {
    final permission = a.permission.index.compareTo(b.permission.index);
    if (permission != 0) {
      return permission;
    }
    return a.user.index.compareTo(b.user.index);
  });
  if (validationQueries == null) {
    return;
  }
  if (validationQueries.isEmpty) {
    throw DatabaseValidationExcepction(
      "Not permitted: OnLoadedCollection at ${query.query.path} $validationQueries $value",
    );
  }
  final userId = await onRetrieveUserId();
  for (final validationQuery in validationQueries) {
    for (final document
        in (value?.entries ?? <MapEntry<String, DynamicMap>>[])) {
      if (!validationQuery._checkPermissionWithValue(
        query: query.query,
        docId: document.key,
        userId: userId,
        value: document.value,
      )) {
        throw DatabaseValidationExcepction(
          "Not permitted: OnLoadedCollection at ${query.query.path} $validationQueries $value",
        );
      }
    }
  }
}