Fixed more bugs with hooked services
This commit is contained in:
parent
d3b486b283
commit
1899e586f1
4 changed files with 68 additions and 15 deletions
|
@ -195,7 +195,7 @@ class Angel extends Routable {
|
||||||
if (routable is Service) {
|
if (routable is Service) {
|
||||||
routable.app = this;
|
routable.app = this;
|
||||||
}
|
}
|
||||||
super.use(path, routable,
|
return super.use(path, routable,
|
||||||
hooked: hooked, middlewareNamespace: middlewareNamespace);
|
hooked: hooked, middlewareNamespace: middlewareNamespace);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -29,8 +29,61 @@ class HookedService extends Service {
|
||||||
new HookedServiceEventDispatcher();
|
new HookedServiceEventDispatcher();
|
||||||
|
|
||||||
HookedService(Service this.inner) {
|
HookedService(Service this.inner) {
|
||||||
// Clone all routes, including middleware
|
// Clone app instance
|
||||||
routes..clear()..addAll(inner.routes);
|
if (inner.app != null)
|
||||||
|
this.app = inner.app;
|
||||||
|
|
||||||
|
routes.clear();
|
||||||
|
// Set up our routes. We still need to copy middleware from inner service
|
||||||
|
Map restProvider = {'provider': Providers.REST};
|
||||||
|
|
||||||
|
// Add global middleware if declared on the instance itself
|
||||||
|
Middleware before = _getAnnotation(inner, Middleware);
|
||||||
|
if (before != null) {
|
||||||
|
routes.add(new Route("*", "*", before.handlers));
|
||||||
|
}
|
||||||
|
|
||||||
|
Middleware indexMiddleware = _getAnnotation(inner.index, Middleware);
|
||||||
|
get('/', (req, res) async {
|
||||||
|
return await this.index(mergeMap([req.query, restProvider]));
|
||||||
|
}, middleware: (indexMiddleware == null) ? [] : indexMiddleware.handlers);
|
||||||
|
|
||||||
|
Middleware createMiddleware = _getAnnotation(inner.create, Middleware);
|
||||||
|
post('/', (req, res) async => await this.create(req.body, restProvider),
|
||||||
|
middleware:
|
||||||
|
(createMiddleware == null) ? [] : createMiddleware.handlers);
|
||||||
|
|
||||||
|
Middleware readMiddleware = _getAnnotation(inner.read, Middleware);
|
||||||
|
|
||||||
|
get(
|
||||||
|
'/:id',
|
||||||
|
(req, res) async => await this
|
||||||
|
.read(req.params['id'], mergeMap([req.query, restProvider])),
|
||||||
|
middleware: (readMiddleware == null) ? [] : readMiddleware.handlers);
|
||||||
|
|
||||||
|
Middleware modifyMiddleware = _getAnnotation(inner.modify, Middleware);
|
||||||
|
patch(
|
||||||
|
'/:id',
|
||||||
|
(req, res) async =>
|
||||||
|
await this.modify(req.params['id'], req.body, restProvider),
|
||||||
|
middleware:
|
||||||
|
(modifyMiddleware == null) ? [] : modifyMiddleware.handlers);
|
||||||
|
|
||||||
|
Middleware updateMiddleware = _getAnnotation(inner.update, Middleware);
|
||||||
|
post(
|
||||||
|
'/:id',
|
||||||
|
(req, res) async =>
|
||||||
|
await this.update(req.params['id'], req.body, restProvider),
|
||||||
|
middleware:
|
||||||
|
(updateMiddleware == null) ? [] : updateMiddleware.handlers);
|
||||||
|
|
||||||
|
Middleware removeMiddleware = _getAnnotation(inner.remove, Middleware);
|
||||||
|
delete(
|
||||||
|
'/:id',
|
||||||
|
(req, res) async => await this
|
||||||
|
.remove(req.params['id'], mergeMap([req.query, restProvider])),
|
||||||
|
middleware:
|
||||||
|
(removeMiddleware == null) ? [] : removeMiddleware.handlers);
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
|
|
|
@ -30,9 +30,7 @@ class MemoryService<T> extends Service {
|
||||||
|
|
||||||
Future create(data, [Map params]) async {
|
Future create(data, [Map params]) async {
|
||||||
//try {
|
//try {
|
||||||
print("Data: $data");
|
|
||||||
var created = (data is Map) ? god.deserializeDatum(data, outputType: T) : data;
|
var created = (data is Map) ? god.deserializeDatum(data, outputType: T) : data;
|
||||||
print("Created $created");
|
|
||||||
items[items.length] = created;
|
items[items.length] = created;
|
||||||
return _makeJson(items.length - 1, created);
|
return _makeJson(items.length - 1, created);
|
||||||
/*} catch (e) {
|
/*} catch (e) {
|
||||||
|
|
|
@ -6,6 +6,8 @@ import 'package:test/test.dart';
|
||||||
class Todo {
|
class Todo {
|
||||||
String text;
|
String text;
|
||||||
String over;
|
String over;
|
||||||
|
|
||||||
|
Todo({String this.text, String this.over});
|
||||||
}
|
}
|
||||||
|
|
||||||
main() {
|
main() {
|
||||||
|
|
Loading…
Reference in a new issue