koa-mongo-router
Version:
KOA REST API Router for MongoDB
86 lines (85 loc) • 5.58 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.getDatabaseRouter = exports.getDatabasesRouter = void 0;
const BodyParser = require("koa-bodyparser");
const Router = require("koa-router");
const database_routes_1 = require("./database-routes");
const bodyParser = BodyParser();
function getDatabasesRouter(options) {
if (options == undefined) {
options = {};
}
const router = new Router();
async function permissionCheck(ctx, next) {
if (options.permissionCheck != undefined) {
await options.permissionCheck(ctx, next, ctx.state.database, ctx.state.collection);
}
else {
await next();
}
}
return router
.param('database', async (database, ctx, next) => {
ctx.state = Object.assign(Object.assign({}, ctx.state), ctx.params);
await next();
})
.get('/', permissionCheck, database_routes_1.getDatabasesRoute(options))
.get('/:database', permissionCheck, database_routes_1.getDatabaseCollectionsRoute(options))
.delete('/:database', permissionCheck, database_routes_1.deleteDatabaseRoute(options))
.get('/:database/:collection', permissionCheck, database_routes_1.getCollectionItemsRoute(options))
.put('/:database/:collection', permissionCheck, database_routes_1.putCollectionItemsRoute(options))
.post('/:database/:collection', permissionCheck, bodyParser, database_routes_1.postCollectionItemsRoute(options))
.patch('/:database/:collection', permissionCheck, bodyParser, database_routes_1.patchCollectionItemsRoute(options))
.delete('/:database/:collection', permissionCheck, database_routes_1.deleteCollectionItemsRoute(options))
.get('/:database/:collection/schema', permissionCheck, database_routes_1.getCollectionSchemaRoute(options))
.put('/:database/:collection/schema', permissionCheck, bodyParser, database_routes_1.putCollectionSchemaRoute(options))
.delete('/:database/:collection/schema', permissionCheck, database_routes_1.deleteCollectionSchemaRoute(options))
.get('/:database/:collection/indices', permissionCheck, database_routes_1.getCollectionIndicesRoute(options))
.post('/:database/:collection/indices', permissionCheck, bodyParser, database_routes_1.postCollectionIndicesRoute(options))
.delete('/:database/:collection/indices/:id', permissionCheck, database_routes_1.deleteCollectionIndexRoute(options))
.get('/:database/:collection/:id', permissionCheck, database_routes_1.getCollectionItemRoute(options))
.put('/:database/:collection/:id', permissionCheck, bodyParser, database_routes_1.putCollectionItemRoute(options))
.patch('/:database/:collection/:id', permissionCheck, bodyParser, database_routes_1.patchCollectionItemRoute(options))
.delete('/:database/:collection/:id', permissionCheck, database_routes_1.deleteCollectionItemRoute(options));
}
exports.getDatabasesRouter = getDatabasesRouter;
function getDatabaseRouter(databaseName, options) {
if (options == undefined) {
options = {};
}
const router = new Router();
async function permissionCheck(ctx, next) {
if (options.permissionCheck != undefined) {
await options.permissionCheck(ctx, next, ctx.state.database, ctx.state.collection);
}
else {
await next();
}
}
return router
.use(async (ctx, next) => {
ctx.state.database = databaseName;
await next();
})
.get('/', permissionCheck, database_routes_1.getDatabaseCollectionsRoute(options))
.delete('/', permissionCheck, database_routes_1.deleteDatabaseRoute(options))
.param('collection', async (collection, ctx, next) => {
ctx.state = Object.assign(Object.assign({}, ctx.state), ctx.params);
await next();
})
.get('/:collection', permissionCheck, database_routes_1.getCollectionItemsRoute(options))
.put('/:collection', permissionCheck, database_routes_1.putCollectionItemsRoute(options))
.post('/:collection', permissionCheck, bodyParser, database_routes_1.postCollectionItemsRoute(options))
.patch('/:collection', permissionCheck, bodyParser, database_routes_1.patchCollectionItemsRoute(options))
.delete('/:collection', permissionCheck, database_routes_1.deleteCollectionItemsRoute(options))
.get('/:collection/schema', permissionCheck, database_routes_1.getCollectionSchemaRoute(options))
.put('/:collection/schema', permissionCheck, bodyParser, database_routes_1.putCollectionSchemaRoute(options))
.delete('/:collection/schema', permissionCheck, database_routes_1.deleteCollectionSchemaRoute(options))
.get('/:collection/indices', permissionCheck, database_routes_1.getCollectionIndicesRoute(options))
.post('/:collection/indices', permissionCheck, bodyParser, database_routes_1.postCollectionIndicesRoute(options))
.delete('/:collection/indices/:id', permissionCheck, database_routes_1.deleteCollectionIndexRoute(options))
.get('/:collection/:id', permissionCheck, database_routes_1.getCollectionItemRoute(options))
.put('/:collection/:id', permissionCheck, bodyParser, database_routes_1.putCollectionItemRoute(options))
.patch('/:collection/:id', permissionCheck, bodyParser, database_routes_1.patchCollectionItemRoute(options))
.delete('/:collection/:id', permissionCheck, database_routes_1.deleteCollectionItemRoute(options));
}
exports.getDatabaseRouter = getDatabaseRouter;