search method

  1. @override
FutureOr<List<D>> search(
  1. R query, {
  2. int? offSet,
  3. int? limit,
})
override

The search method searches for entities that match the given query.

Implementation

@override
FutureOr<List<D>> search(
    R query, {
      int? offSet,
      int? limit,
    }) async {
  Response response;

  try {
    response = await executeFuture(
      future: () async {
        return await dio.post(
          searchPath,
          queryParameters: {
            'offset': offSet ?? 0,
            'limit': limit ?? 100,
            'tenantId': DigitDataModelSingleton().tenantId,
            if (query.isDeleted ?? false) 'includeDeleted': query.isDeleted,
          },
          data: entityName == 'User'
              ? query.toMap()
              : {
            isPlural
                ? entityNamePlural
                : entityName == 'ServiceDefinition'
                ? 'ServiceDefinitionCriteria'
                : entityName == 'Downsync'
                ? 'DownsyncCriteria'
                : entityName:
            isPlural ? [query.toMap()] : query.toMap(),
          },
        );
      },
    );
  } catch (error) {
    return [];
  }

  final responseMap = (response.data);

  if (responseMap is! Map<String, dynamic>) {
    throw InvalidApiResponseException(
      data: query.toMap(),
      path: searchPath,
      response: responseMap,
    );
  }

  if (!responseMap.containsKey(
    (isSearchResponsePlural || entityName == 'ServiceDefinition')
        ? entityNamePlural
        : entityName,
  )) {
    throw InvalidApiResponseException(
      data: query.toMap(),
      path: searchPath,
      response: responseMap,
    );
  }

  final entityResponse = await responseMap[
  (isSearchResponsePlural || entityName == 'ServiceDefinition')
      ? entityNamePlural
      : entityName];

  if (entityResponse is! List) {
    throw InvalidApiResponseException(
      data: query.toMap(),
      path: searchPath,
      response: responseMap,
    );
  }

  final entityList = entityResponse.whereType<Map<String, dynamic>>();
  var mapperRes = <D>[];
  try {
    mapperRes =
        entityList.map((e) => MapperContainer.globals.fromMap<D>(e)).toList();
  } catch (e) {
    rethrow ;
  }

  return mapperRes;
}