update method

  1. @override
Future<Map<String, dynamic>> update(
  1. String id,
  2. Map<String, dynamic> data, [
  3. Map<String, dynamic>? params
])

Replaces the document with id, creating it if missing.

Implementation

@override
Future<Map<String, dynamic>> update(
  String id,
  Map<String, dynamic> data, [
  Map<String, dynamic>? params,
]) async {
  var oid = _makeId(id);
  var now = DateTime.now().toIso8601String();
  var existing = await collection.findOne(where.id(oid));
  var updatedDoc = _removeSensitive(data)
    ..['createdAt'] = existing?['createdAt'] ?? now
    ..['updatedAt'] = now;

  try {
    var updated = await collection.findAndModify(
      query: where.id(oid),
      update: updatedDoc,
      returnNew: true,
      upsert: true,
    );
    return _jsonify(updated ?? {'_id': oid, ...updatedDoc}, params);
  } catch (e, st) {
    throw AngelHttpException(error: e, stackTrace: st);
  }
}