downLoadInfoFromServer<T extends ColeccionBase> method
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'
};
}
}