actualizar<T extends ColeccionBase> method

Future<Map<String, dynamic>> actualizar<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 - es una clase de tipo ColeccionObjBox que contiene los datos a actualizar versionData - es la version de la coleccion que se va actualizar

A tener en cuenta si no existe informacion modificada el resultado es OK

return {
    EnvironmentApiRest.dataOk: true,
    EnvironmentApiRest.msgStatus: data //<ColeccionObjBox>
    EnvironmentApiRest.msgStatus: EnvironmentApiRest.literalDataSinModificar
    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>> actualizar<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;

  if (data.idServer.isEmpty && modeToWork == ModeToWork.online) {
    throw 'Actualizacion no permitida debe tener un idServer';
  }

  return FlutterUtilsProvider.ejecutaPeticion(() async {
    try {
      final jsonEsquema = await obtieneEsquema(valor: data.coleccion);
      final encodeKeys =
          FlutterUtilsProvider.obtieneKeysJsonString(mapa: jsonEsquema);
      final dataModificada =
          await _prepararDataModificada(data, jsonEsquema, encodeKeys);

      if (dataModificada.isEmpty) {
        return {
          EnvironmentApiRest.dataOk: true,
          EnvironmentApiRest.data: data,
          EnvironmentApiRest.msgStatus:
              EnvironmentApiRest.literalDataSinModificar
        };
      }

      final response = await _actualizarData(
        data: data,
        versionData: versionData,
        dataModificada: dataModificada,
        encodeKeys: encodeKeys,
        esquema: jsonEsquema,
        idFuncionBackend: idFuncionBackend,
        queryPropertiesWrapper: queryPropertiesWrapper,
        dataAdicionalBody: dataAdicionalBody,
        modeToWork: modeToWork!,
      );

      if (!response.containsKey(EnvironmentApiRest.dataOk)) {
        return response;
      }

      final listaItems = <T>[];
      if (_debeLeerDesdeServidor(response)) {
        listaItems.addAll(await _obtieneDataByIdOnline<T>(
            coleccion: data.coleccion,
            consulta:
                '{${EnvironmentApiRest.idColeccion} : "${data.idServer}"}',
            modelo: modelo));
      } else {
        listaItems.addAll([...response[EnvironmentApiRest.data] ?? []]);
      }

      if (listaItems.isEmpty) {
        throw 'No se encontró el registro que se quiere actualizar';
      }
      return {
        EnvironmentApiRest.dataOk: 'OK',
        EnvironmentApiRest.data: listaItems.first,
        EnvironmentApiRest.dataAtomica:
            response[EnvironmentApiRest.dataAtomica] ?? false,
      };
    } catch (e) {
      return {
        EnvironmentApiRest.dataNOk: 'NOK',
        EnvironmentApiRest.error: e.toString()
      };
    }
  });
}