Skip to content

Commit 7367492

Browse files
author
Hage Yaapa
committed
sequence generator
1 parent b2a2532 commit 7367492

3 files changed

Lines changed: 70 additions & 30 deletions

File tree

db.json

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"ids": {
3-
"Color": 12
3+
"Color": 14
44
},
55
"models": {
66
"Color": {
@@ -14,7 +14,9 @@
1414
"8": "{\"id\":8,\"value\":\"lolol\"}",
1515
"9": "{\"id\":9,\"value\":\"ahaha\"}",
1616
"10": "{\"id\":10,\"value\":\"greeen\"}",
17-
"11": "{\"id\":11,\"value\":\"emerald\"}"
17+
"11": "{\"id\":11,\"value\":\"emerald\"}",
18+
"12": "{\"id\":12,\"value\":\"gold\"}",
19+
"13": "{\"id\":13,\"value\":\"gold\"}"
1820
}
1921
}
2022
}

lib/sequence-generator.js

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
'use strict';
2+
3+
const { decorate, metadata, param } = require('../lib/helpers.js');
4+
const context = require("@loopback/context");
5+
const rest = require("@loopback/rest");
6+
const SequenceActions = rest.RestBindings.SequenceActions;
7+
8+
module.exports = function (options) {
9+
const { name: sequenceName, handler } = options;
10+
let classes = {};
11+
classes[sequenceName] = class {
12+
constructor(findRoute, parseParams, invoke, send, reject) {
13+
this.findRoute = findRoute;
14+
this.parseParams = parseParams;
15+
this.invoke = invoke;
16+
this.send = send;
17+
this.reject = reject;
18+
}
19+
async handle(context) {
20+
const sequence = {
21+
findRoute: this.findRoute,
22+
parseParams: this.parseParams,
23+
invoke: this.invoke,
24+
send: this.send,
25+
reject: this.reject
26+
};
27+
try {
28+
if (handler) {
29+
handler.call(sequence, context);
30+
} else {
31+
const { request, response } = context;
32+
const route = this.findRoute(request);
33+
const args = await this.parseParams(request, route);
34+
const result = await this.invoke(route, args);
35+
this.send(response, result);
36+
}
37+
}
38+
catch (err) {
39+
this.reject(context, err);
40+
}
41+
}
42+
};
43+
44+
let SequenceClass = classes[sequenceName];
45+
SequenceClass.sequenceName = sequenceName;
46+
Object.defineProperty(SequenceClass, 'name', { writable: true });
47+
SequenceClass.name = sequenceName;
48+
Object.defineProperty(SequenceClass, 'name', { writable: false });
49+
50+
SequenceClass = decorate([
51+
param(0, context.inject(SequenceActions.FIND_ROUTE)),
52+
param(1, context.inject(SequenceActions.PARSE_PARAMS)),
53+
param(2, context.inject(SequenceActions.INVOKE_METHOD)),
54+
param(3, context.inject(SequenceActions.SEND)),
55+
param(4, context.inject(SequenceActions.REJECT)),
56+
metadata('design:paramtypes', [Function, Function, Function, Function, Function])
57+
], SequenceClass);
58+
59+
return SequenceClass;
60+
}

server/sequence.js

Lines changed: 6 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,39 +1,17 @@
11
'use strict';
22

3-
const { decorate, metadata, param } = require('../lib/helpers.js');
4-
const context = require("@loopback/context");
5-
const rest = require("@loopback/rest");
6-
const SequenceActions = rest.RestBindings.SequenceActions;
7-
8-
class MySequence {
9-
constructor(findRoute, parseParams, invoke, send, reject) {
10-
this.findRoute = findRoute;
11-
this.parseParams = parseParams;
12-
this.invoke = invoke;
13-
this.send = send;
14-
this.reject = reject;
15-
}
16-
async handle(context) {
3+
const generateSequence = require('../lib/sequence-generator.js');
4+
module.exports = generateSequence({
5+
name: 'MySequence',
6+
handler: async function (context) {
177
try {
188
const { request, response } = context;
199
const route = this.findRoute(request);
2010
const args = await this.parseParams(request, route);
2111
const result = await this.invoke(route, args);
2212
this.send(response, result);
23-
}
24-
catch (err) {
13+
} catch (err) {
2514
this.reject(context, err);
2615
}
2716
}
28-
};
29-
30-
MySequence = decorate([
31-
function (target, key) { context.inject(SequenceActions.FIND_ROUTE)(target, key, 0); },
32-
function (target, key) { context.inject(SequenceActions.PARSE_PARAMS)(target, key, 1); },
33-
function (target, key) { context.inject(SequenceActions.INVOKE_METHOD)(target, key, 2); },
34-
function (target, key) { context.inject(SequenceActions.SEND)(target, key, 3); },
35-
function (target, key) { context.inject(SequenceActions.REJECT)(target, key, 4); },
36-
metadata("design:paramtypes", [Function, Function, Function, Function, Function])
37-
], MySequence);
38-
39-
module.exports = MySequence;
17+
});

0 commit comments

Comments
 (0)