platform/lib/services.dart

62 lines
1.6 KiB
Dart
Raw Normal View History

2016-09-21 04:26:22 +00:00
library angel_mongo.services;
import 'dart:async';
2016-12-03 17:39:48 +00:00
import 'dart:io';
2016-09-21 04:26:22 +00:00
import 'dart:mirrors';
import 'package:angel_framework/angel_framework.dart';
2017-02-13 01:38:24 +00:00
import 'package:angel_framework/common.dart' show Model;
2016-09-21 04:26:22 +00:00
import 'package:json_god/json_god.dart' as god;
import 'package:merge_map/merge_map.dart';
import 'package:mongo_dart/mongo_dart.dart';
part 'mongo_service.dart';
part 'mongo_service_typed.dart';
Map _transformId(Map doc) {
2017-07-09 18:07:02 +00:00
Map result = new Map.from(doc);
2017-02-13 01:38:24 +00:00
result
..['id'] = doc['_id']
..remove('_id');
2016-09-21 04:26:22 +00:00
2017-02-13 01:38:24 +00:00
return result;
2016-09-21 04:26:22 +00:00
}
_lastItem(DbCollection collection, Function _jsonify, [Map params]) async {
return (await (await collection
2017-02-13 01:38:24 +00:00
.find(where.sortBy('\$natural', descending: true)))
.toList())
2016-09-21 04:26:22 +00:00
.map((x) => _jsonify(x, params))
.first;
}
ObjectId _makeId(id) {
try {
return (id is ObjectId) ? id : new ObjectId.fromHexString(id.toString());
} catch (e) {
2017-02-13 01:38:24 +00:00
throw new AngelHttpException.badRequest();
2016-09-21 04:26:22 +00:00
}
}
2017-02-13 01:38:24 +00:00
const List<String> _SENSITIVE = const ['id', '_id', 'createdAt', 'updatedAt'];
2016-09-21 04:26:22 +00:00
Map _removeSensitive(Map data) {
2017-02-13 01:38:24 +00:00
return data.keys
.where((k) => !_SENSITIVE.contains(k))
.fold({}, (map, key) => map..[key] = data[key]);
2016-09-21 04:26:22 +00:00
}
2017-02-13 01:38:24 +00:00
const List<String> _NO_QUERY = const ['__requestctx', '__responsectx'];
Map _filterNoQuery(Map data) {
return data.keys.fold({}, (map, key) {
var value = data[key];
if (_NO_QUERY.contains(key) ||
value is RequestContext ||
value is ResponseContext) return map;
if (key is! Map) return map..[key] = value;
return map..[key] = _filterNoQuery(value);
});
}