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 LocalBD 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 {
  return FlutterUtilsProvider.ejecutaPeticion(() async {
    modelo ??= ColeccionObjBox() as T;
    modeToWork ??= this.modeToWork;
    limit ??= '25';

    logDebug(
        'ApiRestDb().obtener() cloudDb.obtener() consulta: $consulta .. ordenar: $ordenar .. limit: $limit .. skip $skip .. contatenar $concatenar');

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

    ///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;
    }
  });
}