obtener<T extends ColeccionBase> method

Future<Map<String, dynamic>> obtener<T extends ColeccionBase>({
  1. required String coleccion,
  2. required String consulta,
  3. required List<List<String>> argsLocalBD,
  4. Map<String, dynamic>? project,
  5. QueryPropertiesWrapper<T>? queryPropertiesWrapper,
  6. T? modelo,
  7. String? ordenar,
  8. String? limit,
  9. String? skip,
  10. List<String>? union,
  11. String? concatenar,
  12. bool? runIsolate,
  13. ModeToWork? modeToWork,
})

Funcion utilizada para obtener un lista de registros de una coleccion determinada consulta - es la consulta que se va a ejecutar en el servidor debe respetar sentencias de mongoDB ordenar - es el orden con el que se va a devolver la lista de registros limit - es la cantidad de registros que se va a devolver skip - es la cantidad de registros que se va a saltar antes de empezar a cargar los imtems de la lista que va a devolver concatenar - es utilizado para concatenar una coleccion con otra argsLocalBD - es una lista de listas que contiene los argumentos para la consulta en LocalDB los valores esperados son : [nombreCampo, operadorLogigo, valor] ejemplo: ['idServer', '=', '631f8b62d34bdc52b333879b'] Ejemplo para generar un nuevo Ciudadano:

const idProvincia = '631f7cfbafbdb0417d7bcf8b';
final consulta =
    '{ "data.idProvincia": "$idProvincia" }';
final response = await localidadDb.obtener(consulta: consulta, argsLocalBD: [
  ['idProvincia'],
  ['='],
  [idProvincia]
]);
if (response.containsKey(EnvironmentApiRest.dataOk)) {
  final localidades = response[EnvironmentApiRest.data];
}

Implementation

Future<Map<String, dynamic>> obtener<T extends ColeccionBase>({
  required String coleccion,
  required String consulta,
  required List<List<String>> argsLocalBD,
  Map<String, dynamic>? project,
  QueryPropertiesWrapper<T>? queryPropertiesWrapper,
  T? modelo,
  String? ordenar,
  String? limit,
  String? skip,
  List<String>? union,
  String? concatenar,
  bool? runIsolate,
  ModeToWork? modeToWork,
}) async {
  modelo ??= ColeccionObjBox() as T;
  modeToWork ??= this.modeToWork;
  limit ??= '25';

  return FlutterUtilsProvider.ejecutaPeticion(() async {
    logDebug(
        'ApiRestDb().obtener() cloudDb.obtener() consulta: $consulta .. ordenar: $ordenar .. limit: $limit .. skip $skip .. contatenar $concatenar');

    logDebug('timeStamp:::> obtener(inicia)::>> consulta: $consulta');

    if (modeToWork == ModeToWork.offline) {
      return await mobileDb.obtener<T>(
          coleccion: coleccion,
          argsLocalBD: argsLocalBD,
          queryPropertiesWrapper: queryPropertiesWrapper,
          ordenar: ordenar,
          limit: limit,
          skip: skip,
          union: union);
    } else {
      ///Aca busco en el servidor los registros que coincidan con la consulta
      ///y tambien le paso el hash calculado si el hash calculado difiere del
      ///que tiene el servidor me devuelve los registros que coincidan con la
      ///consulta de lo contrario me devuelve una lista vacia ya que todo lo
      ///que tengo en el dispositivo esta actualizado
      final response = await cloudDb.obtener(
        coleccion: coleccion,
        consulta: consulta,
        hash: '',
        ordenar: ordenar,
        limit: limit,
        skip: skip,
        concatenar: concatenar,
        runIsolate: (runIsolate ?? false),
        project: project,
      );
      if (!response.containsKey(EnvironmentApiRest.dataOk)) {
        return response;
      }
      final itemsFromServer = FlutterUtilsProvider.obtieneDataFromQuery<T>(
        [...response[EnvironmentApiRest.data]],
        response[EnvironmentApiRest.coleccion],
        modelo!,
      );

      logDebug('itemsFromServer.length: ${itemsFromServer.length}');
      logDebug('itemsFromServer: ${response[EnvironmentApiRest.msgStatus]}');
      if (itemsFromServer.isNotEmpty) {
        return {
          EnvironmentApiRest.dataOk: 'OK',
          EnvironmentApiRest.data: itemsFromServer,
          EnvironmentApiRest.totalItems:
              response[EnvironmentApiRest.totalItems] ?? 0
        };
      } else {
        final respuesta = {
          EnvironmentApiRest.data: List<ColeccionObjBox>.empty(),
          EnvironmentApiRest.totalItems: 0
        };
        if (skip == null || skip == '0') {
          respuesta[EnvironmentApiRest.dataOk] = 'OK';
        } else {
          respuesta[EnvironmentApiRest.dataOk] = 'NOK';
          respuesta[EnvironmentApiRest.error] =
              'No hay mas registros para mostrar';
        }
        return respuesta;
      }
    }
  });
}