downLoadInfoFromServer<T extends ColeccionBase> method

Future<Map<String, dynamic>> downLoadInfoFromServer<T extends ColeccionBase>({
  1. required String coleccion,
  2. String? consulta,
  3. QueryPropertiesWrapper<T>? queryPropertiesWrapper,
  4. T? modelo,
})

Funcion utilizada para obtener un lista de registros de una coleccion determinada en modo offline es decir sincroniza los datos del servidor con los datos del dispositivo consulta - es la consulta que se va a ejecutar en el servidor esta es opcional si no se envia nada en este parametro se obtiene el ultimo creadoEl del dispositivo y se establece como consulta lo siguiente

consulta = '{ "\$and": [{"${EnvironmentApiRest.creadoEl}" :
           { "\$gt" : "$creadoEl"}}]}';

Un Ejemplo de una consulta donde aparte del creado el se filtra por el estado

consulta = '{ "\$and": [
             {"${EnvironmentApiRest.creadoEl}" : { "\$gt" : "$creadoEl"}},
             {"${EnvironmentApiRest.estado}": "${estado.valor}"}
                       ]
            }';

coleccion - es la coleccion que se quiere leer y obtener los registros queryPropertiesWrapper - es un objeto de tipo QueryPropertiesWrapper que contiene las propiedades que se van a utilizar para la consulta si no se envia nada se toma por defecto el objeto ColeccionObjBoxWrapper() modelo - es el modelo que se va a utilizar para la consulta si no se envia nada se toma por defecto el objeto ColeccionObjBox()

Implementation

Future<Map<String, dynamic>> downLoadInfoFromServer<T extends ColeccionBase>({
  required String coleccion,
  String? consulta,
  QueryPropertiesWrapper<T>? queryPropertiesWrapper,
  T? modelo,
}) async {
  try {
    modelo ??= ColeccionObjBox() as T;
    queryPropertiesWrapper ??=
        ColeccionObjBoxWrapper() as QueryPropertiesWrapper<T>;
    bool existeData = false;
    int skip = 0;
    bool continuaProceso = true;

    logDebug(
        'ApiRestDb().downLoadInfoFromServer() coleccion: $coleccion .. consulta: $consulta');

    do {
      consulta ??= await _estableceConsulta(coleccion: coleccion);
      final response = await cloudDb.obtener(
          coleccion: coleccion,
          consulta: consulta,
          hash: '',
          limit: '50',
          skip: '$skip',
          runIsolate: true);
      if (response.containsKey(EnvironmentApiRest.dataNOk)) {
        return response;
      }

      if (response[EnvironmentApiRest.data].isEmpty ||
          response[EnvironmentApiRest.data].first.isEmpty) {
        continuaProceso = false;
      }
      if (continuaProceso) {
        final itemsFromServer = [
          ...FlutterUtilsProvider.obtieneDataFromQuery<T>(
              [...response[EnvironmentApiRest.data]], coleccion, modelo)
        ];

        final respuesta = await mobileDb.guardar<T>(
            data: itemsFromServer,
            queryPropertiesWrapper: queryPropertiesWrapper);

        if (respuesta.containsKey(EnvironmentApiRest.dataNOk)) {
          return respuesta;
        }
        existeData = true;
      }
      skip++;
    } while (continuaProceso);
    return {
      EnvironmentApiRest.dataOk: true,
      EnvironmentApiRest.existeData: existeData,
    };
  } catch (error) {
    return {
      EnvironmentApiRest.dataNOk: 'NOK',
      EnvironmentApiRest.error: 'Error al descargar la informacion $error'
    };
  }
}