obtener<T extends ColeccionBase> method
Future<Map<String, dynamic> >
obtener<T extends ColeccionBase>({
- required String coleccion,
- required String consulta,
- required List<
List< argsLocalBD,String> > - Map<
String, dynamic> ? project, - QueryPropertiesWrapper<
T> ? queryPropertiesWrapper, - T? modelo,
- String? ordenar,
- String? limit,
- String? skip,
- List<
String> ? union, - String? concatenar,
- bool? runIsolate,
- 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;
}
});
}