Skip to content

Commit

Permalink
fix(bautajs-express-example, bautajs-fastify-example): add service to…
Browse files Browse the repository at this point in the history
… showcase request cancellation (#72)
  • Loading branch information
Xavier-Redondo authored Jan 31, 2023
1 parent 3ac6ddd commit c4d431f
Show file tree
Hide file tree
Showing 6 changed files with 155 additions and 0 deletions.
2 changes: 2 additions & 0 deletions packages/bautajs-express-example/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,8 @@
- GET `api/multiple-path/{key}`
- GET `api/multiple-path/specific`
- These two endpoints help understand how the route ordering works
- GET `api/cancel/{number}`
- Returns a string if number is less than 10 seconds. Aborts after 10 seconds in the rest of the cases.


## Custom Logger example
Expand Down
32 changes: 32 additions & 0 deletions packages/bautajs-express-example/api-definition.json
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,38 @@
}
}
},
"/cancel/{number}": {
"get": {
"summary": "service to test cancel request. Waits number seconds until an answer is given but cancel if number is greather than 10 seconds",
"operationId": "cancelRequest",
"parameters": [
{
"name": "number",
"in": "path",
"description": "The number of seconds to wait",
"required": true,
"schema": {
"type": "number"
}
}
],
"responses": {
"200": {
"description": "Something!"
},
"default": {
"description": "unexpected error",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Error"
}
}
}
}
}
}
},
"/randomYear": {
"get": {
"summary": "Provides information about a random year",
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
const { resolver, pipe, step } = require('@axa/bautajs-core');
const { getRequest } = require('@axa/bautajs-express');

const transformResponse = step(response => {
return {
message: response
};
});

function getNumberFromRequestStep(_prev, ctx) {
const req = getRequest(ctx);

const { number } = req.params;

return number;
}

function giveAnswerAfterWaitingWithTimeout() {
return step(async (number, ctx) => {
const timeout = number * 1000;
const promiseAnswer = new Promise(resolve =>
setTimeout(() => {
resolve(`We have waited for ${number} seconds`);
}, timeout)
);

const cancelator = new Promise(resolve =>
setTimeout(() => {
ctx.token.cancel(); // If this triggers the promise does not resolve but it is cancelled
resolve('ended');
}, 10000)
);

return Promise.race(await [promiseAnswer, cancelator]);
});
}

module.exports = resolver(operations => {
operations.cancelRequest
.validateRequest(false)
.validateResponse(false)
.setup(pipe(getNumberFromRequestStep, giveAnswerAfterWaitingWithTimeout(), transformResponse));
});
3 changes: 3 additions & 0 deletions packages/bautajs-fastify-example/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,9 @@
- GET `api/multiple-path/{key}`
- GET `api/multiple-path/specific`
- These two endpoints help understand how the route ordering works
- GET `api/cancel/{number}`
- Returns a string if number is less than 10 seconds. Aborts after 10 seconds in the rest of the cases.


## Third party dependencies licenses

Expand Down
32 changes: 32 additions & 0 deletions packages/bautajs-fastify-example/api-definition.json
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,38 @@
}
}
},
"/cancel/{number}": {
"get": {
"summary": "service to test cancel request. Waits number seconds until an answer is given but cancel if number is greather than 10 seconds",
"operationId": "cancelRequest",
"parameters": [
{
"name": "number",
"in": "path",
"description": "The number of seconds to wait",
"required": true,
"schema": {
"type": "number"
}
}
],
"responses": {
"200": {
"description": "Something!"
},
"default": {
"description": "unexpected error",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Error"
}
}
}
}
}
}
},
"/randomYear": {
"get": {
"summary": "Provides information about a random year",
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
const { resolver, pipe, step } = require('@axa/bautajs-core');
const { getRequest } = require('@axa/bautajs-fastify');

const transformResponse = step(response => {
return {
message: response
};
});

function getNumberFromRequestStep(_prev, ctx) {
const req = getRequest(ctx);

const { number } = req.params;

return number;
}

function giveAnswerAfterWaitingWithTimeout() {
return step(async (number, ctx) => {
const timeout = number * 1000;
const promiseAnswer = new Promise(resolve =>
setTimeout(() => {
resolve(`We have waited for ${number} seconds`);
}, timeout)
);

const cancelator = new Promise(resolve =>
setTimeout(() => {
ctx.token.cancel(); // If this triggers the promise does not resolve but it is cancelled
resolve('ended');
}, 10000)
);

return Promise.race(await [promiseAnswer, cancelator]);
});
}

module.exports = resolver(operations => {
operations.cancelRequest
.validateRequest(false)
.validateResponse(false)
.setup(pipe(getNumberFromRequestStep, giveAnswerAfterWaitingWithTimeout(), transformResponse));
});

0 comments on commit c4d431f

Please sign in to comment.