Delete old
This commit is contained in:
parent
d36312487f
commit
627e954526
1 changed files with 0 additions and 145 deletions
|
@ -1,145 +0,0 @@
|
|||
part of angel_mongo.services;
|
||||
|
||||
/// Manipulates data from MongoDB by serializing BSON from and deserializing BSON to a target class.
|
||||
class MongoTypedService<T> extends Service {
|
||||
DbCollection collection;
|
||||
bool debug;
|
||||
|
||||
MongoTypedService(DbCollection this.collection, {this.debug: true}) : super() {
|
||||
if (!reflectType(T).isAssignableTo(reflectType(Model)))
|
||||
throw new Exception(
|
||||
"If you specify a type for MongoService, it must be dynamic, Map, or extend from Model.");
|
||||
}
|
||||
|
||||
_jsonify(Map doc, [Map params]) {
|
||||
Map result = {};
|
||||
for (var key in doc.keys) {
|
||||
if (doc[key] is ObjectId) {
|
||||
result[key] = doc[key].toHexString();
|
||||
} else
|
||||
result[key] = doc[key];
|
||||
}
|
||||
|
||||
result = _transformId(result);
|
||||
|
||||
// Clients will always receive JSON.
|
||||
if ((params != null && params['provider'] != null)) {
|
||||
return result;
|
||||
} else {
|
||||
// However, when we run server-side, we should return a T, not a Map.
|
||||
Model typedResult = god.deserializeDatum(result, outputType: T);
|
||||
typedResult.createdAt = result['createdAt'];
|
||||
typedResult.updatedAt = result['updatedAt'];
|
||||
return typedResult;
|
||||
}
|
||||
}
|
||||
|
||||
void log(e, st, msg) {
|
||||
if (debug) {
|
||||
stderr.writeln('$msg ERROR: $e');
|
||||
stderr.writeln(st);
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
Future<List> index([Map params]) async {
|
||||
return await (await collection.find(_makeQuery(params)))
|
||||
.map((x) => _jsonify(x, params))
|
||||
.toList();
|
||||
}
|
||||
|
||||
@override
|
||||
Future create(data, [Map params]) async {
|
||||
Map item;
|
||||
|
||||
try {
|
||||
Model target =
|
||||
(data is T) ? data : god.deserializeDatum(data, outputType: T);
|
||||
item = god.serializeObject(target);
|
||||
item = _removeSensitive(item);
|
||||
|
||||
item['createdAt'] = new DateTime.now();
|
||||
await collection.insert(item);
|
||||
return await _lastItem(collection, _jsonify, params);
|
||||
} catch (e, st) {
|
||||
log(e, st, 'CREATE');
|
||||
throw new AngelHttpException.badRequest();
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
Future read(id, [Map params]) async {
|
||||
ObjectId _id = _makeId(id);
|
||||
|
||||
Map found = await collection.findOne(where.id(_id).and(_makeQuery(params)));
|
||||
|
||||
if (found == null) {
|
||||
throw new AngelHttpException.notFound(
|
||||
message: 'No record found for ID ${_id.toHexString()}');
|
||||
}
|
||||
|
||||
return _jsonify(found, params);
|
||||
}
|
||||
|
||||
@override
|
||||
Future modify(id, Map data, [Map params]) async {
|
||||
ObjectId _id = _makeId(id);
|
||||
try {
|
||||
Map result =
|
||||
await collection.findOne(where.id(_id).and(_makeQuery(params)));
|
||||
|
||||
if (result == null) {
|
||||
throw new AngelHttpException.notFound(
|
||||
message: 'No record found for ID ${_id.toHexString()}');
|
||||
}
|
||||
|
||||
result = mergeMap([result, _removeSensitive(data)]);
|
||||
result['_id'] = _id;
|
||||
result['updatedAt'] = new DateTime.now();
|
||||
|
||||
await collection.update(where.id(_id), result);
|
||||
return await read(_id, params);
|
||||
} catch (e, st) {
|
||||
log(e, st, 'MODIFY');
|
||||
throw new AngelHttpException(e, stackTrace: st);
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
Future update(id, _data, [Map params]) async {
|
||||
try {
|
||||
Model data =
|
||||
(_data is T) ? _data : god.deserializeDatum(_data, outputType: T);
|
||||
ObjectId _id = _makeId(id);
|
||||
Map rawData = _removeSensitive(god.serializeObject(data));
|
||||
rawData['_id'] = _id;
|
||||
rawData['createdAt'] = data.createdAt;
|
||||
rawData['updatedAt'] = new DateTime.now();
|
||||
|
||||
await collection.update(where.id(_id).and(_makeQuery(params)), rawData);
|
||||
var result = _jsonify(rawData, params);
|
||||
|
||||
if (result is T) {
|
||||
result.createdAt = data.createdAt;
|
||||
result.updatedAt = rawData['updatedAt'];
|
||||
}
|
||||
return result;
|
||||
} catch (e, st) {
|
||||
log(e, st, 'UPDATE');
|
||||
throw new AngelHttpException(e, stackTrace: st);
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
Future remove(id, [Map params]) async {
|
||||
var result = await read(id, params);
|
||||
|
||||
try {
|
||||
await collection.remove(where.id(_makeId(id)).and(_makeQuery(params)));
|
||||
return result;
|
||||
} catch (e, st) {
|
||||
log(e, st, 'REMOVE');
|
||||
throw new AngelHttpException(e, stackTrace: st);
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in a new issue