guardar<T extends ColeccionBase> method

Future<Map<String, dynamic>> guardar<T extends ColeccionBase>({
  1. required T data,
  2. required String versionData,
  3. QueryPropertiesWrapper<T>? queryPropertiesWrapper,
  4. T? modelo,
  5. ModeToWork? modeToWork,
  6. String idFuncionBackend = '',
  7. Map<String, dynamic>? dataAdicionalBody,
})

Funcion utilizada para actualiza un registro data - clase ColeccionObjBox la cual contiene los datos a guardar versionData - es la version de la coleccion que se va actualizar Ejemplo para generar un nuevo Ciudadano:

CiudadanoModel ciudadano = CiudadanoModel(
  nombre: 'Juan',
  apellido: 'Perez',
  tipoDocumento: 'DNI',
  numeroDocumento: '24555666',
  email: 'juanperez@gmail.com',
  telefono: '5493751441205',
  sexo: 'M',
  fechaNacimiento: '01/01/1975',
  nacionalidad: '631f7bc8afbdb0417d7bcf7a',
);
final response =
    await ciudadanoDb.guardar(data: ciudadano, versionData: '1');
if (response.containsKey(Environment.dataOk)) {
  ciudadano = response[Environment.data];
}

//Si la Actualizacion finaliza con exito el resultado es OK

return {
    EnvironmentApiRest.dataOk: 'OK',
    EnvironmentApiRest.data: data //<ColeccionObjBox>
    EnvironmentApiRest.dataAtomica: true //bool .. si es atomico
};

//Si la Actualizacion finaliza con error el resultado es NOK

return {
  EnvironmentApiRest.dataNOk: 'NOK',
  EnvironmentApiRest.error: error //String
};

Consideraciones

[1] Si el proceso es Atomico entonces en data se obtiene
    el registro de la coleccion que administra los procesos atomicos,
    en caso contrario se obtiene el registro completo de la coleecion
    que se esta actualizando.

[2] Si el proceso es Atomico entonces se establece en true el valor
    del key `EnvironmentApiRest.dataAtomica`

Implementation

Future<Map<String, dynamic>> guardar<T extends ColeccionBase>({
  required T data,
  required String versionData,
  QueryPropertiesWrapper<T>? queryPropertiesWrapper,
  T? modelo,
  ModeToWork? modeToWork,
  String idFuncionBackend = '',
  Map<String, dynamic>? dataAdicionalBody,
}) async {
  modelo ??= ColeccionObjBox() as T;
  modeToWork ??= this.modeToWork;

  return FlutterUtilsProvider.ejecutaPeticion(() async {
    ///Con esta pregunta se determina si se guarda en el servidor primero y
    ///si la respuesta esta OK ahi guardo en el dispositivo
    if (modeToWork == ModeToWork.online) {
      ///Aca controlo que tenga un idServer cargado que es el id que genera el Server
      ///sino tiene este valor debo anular el proceso de actualizacion
      if (data.idServer.isNotEmpty) {
        throw 'No se Puede Ejecutar esta funcion(GUARDAR) si el registro ya posee idServer';
      }
    } else {
      ///Aca se guarda primero en el dispositivo y luego se envia al servidor
      if (data.idMobile.isNotEmpty) {
        throw 'No se Puede Ejecutar esta funcion(GUARDAR) si el registro ya posee idMobile';
      }
      data = data.copyWith(eTransfer: 'D');
    }

    final response = await _guardarData<T>(
      data: data,
      versionData: versionData,
      queryPropertiesWrapper: queryPropertiesWrapper,
      modelo: modelo,
      idFuncionBackend: idFuncionBackend,
      dataAdicionalBody: dataAdicionalBody,
      modeToWork: modeToWork!,
    );
    if (!response.containsKey(EnvironmentApiRest.dataOk)) {
      return response;
    }
    final List<T> items = [...response[EnvironmentApiRest.data] ?? []];

    if (response.containsKey(EnvironmentApiRest.dataOk)) {
      if (items.isEmpty) {
        throw 'No se encontro el registro que se quiere guardar';
      }

      return {
        EnvironmentApiRest.dataOk: 'OK',
        EnvironmentApiRest.data: items.first,
        EnvironmentApiRest.dataAtomica:
            response[EnvironmentApiRest.dataAtomica] ?? false,
      };
    }

    return response;
  });
}