mirror of
https://github.com/DSpace/dspace-angular.git
synced 2025-10-07 01:54:15 +00:00

Use the the `node:` protocol when importing Node.js builtin modules and enable rule in eslint to enforce. The `node:` protocol for Node.js builtin modules has been available since Node.js v14. See: https://github.com/import-js/eslint-plugin-import/blob/main/docs/rules/enforce-node-protocol-usage.md
187 lines
4.8 KiB
TypeScript
187 lines
4.8 KiB
TypeScript
// Our API for demos only
|
|
import { fakeDemoRedisCache } from './cache';
|
|
import BITSTREAMS from './data/bitstreams.json';
|
|
import BUNDLES from './data/bundles.json';
|
|
import COLLECTIONS from './data/collections.json';
|
|
import COMMUNITIES from './data/communities.json';
|
|
import ITEMS from './data/items.json';
|
|
import { fakeDataBase } from './db';
|
|
|
|
const { Router } = require('express');
|
|
const util = require('node:util');
|
|
|
|
// you would use cookies/token etc
|
|
const USER_ID = 'f9d98cf1-1b96-464e-8755-bcc2a5c09077'; // hardcoded as an example
|
|
|
|
// Our API for demos only
|
|
export function serverApi(req, res) {
|
|
const key = USER_ID + '/data.json';
|
|
const cache = fakeDemoRedisCache.get(key);
|
|
if (cache !== undefined) {
|
|
console.log('/data.json Cache Hit');
|
|
return res.json(cache);
|
|
}
|
|
console.log('/data.json Cache Miss');
|
|
|
|
fakeDataBase.get()
|
|
.then((data) => {
|
|
fakeDemoRedisCache.set(key, data);
|
|
return data;
|
|
})
|
|
.then((data) => res.json(data));
|
|
}
|
|
|
|
function toHALResponse(req, data, included?) {
|
|
const result = {
|
|
_embedded: data,
|
|
_links: {
|
|
self: req.protocol + '://' + req.get('host') + req.originalUrl,
|
|
},
|
|
};
|
|
if (included && Array.isArray(included) && included.length > 0) {
|
|
Object.assign(result, {
|
|
included: included,
|
|
});
|
|
}
|
|
return result;
|
|
}
|
|
|
|
export function createMockApi() {
|
|
|
|
const router = Router();
|
|
|
|
router.route('/communities').get((req, res) => {
|
|
console.log('GET');
|
|
// 70ms latency
|
|
setTimeout(() => {
|
|
res.json(toHALResponse(req, COMMUNITIES));
|
|
}, 0);
|
|
});
|
|
|
|
router.param('community_id', (req, res, next, communityId) => {
|
|
// ensure correct prop type
|
|
const id = req.params.community_id;
|
|
try {
|
|
req.community_id = id;
|
|
req.community = COMMUNITIES.communities.find((community) => {
|
|
return community.id === id;
|
|
});
|
|
next();
|
|
} catch (e) {
|
|
next(new Error('failed to load community'));
|
|
}
|
|
});
|
|
|
|
router.route('/communities/:community_id').get((req, res) => {
|
|
res.json(toHALResponse(req, req.community));
|
|
});
|
|
|
|
router.route('/collections').get((req, res) => {
|
|
console.log('GET');
|
|
// 70ms latency
|
|
setTimeout(() => {
|
|
res.json(toHALResponse(req, COLLECTIONS));
|
|
}, 0);
|
|
});
|
|
|
|
router.param('collection_id', (req, res, next, collectionId) => {
|
|
// ensure correct prop type
|
|
const id = req.params.collection_id;
|
|
try {
|
|
req.collection_id = id;
|
|
req.collection = COLLECTIONS.collections.find((collection) => {
|
|
return collection.id === id;
|
|
});
|
|
next();
|
|
} catch (e) {
|
|
next(new Error('failed to load collection'));
|
|
}
|
|
});
|
|
|
|
router.route('/collections/:collection_id').get((req, res) => {
|
|
res.json(toHALResponse(req, req.collection));
|
|
});
|
|
|
|
router.route('/items').get((req, res) => {
|
|
console.log('GET');
|
|
// 70ms latency
|
|
setTimeout(() => {
|
|
res.json(toHALResponse(req, ITEMS));
|
|
}, 0);
|
|
});
|
|
|
|
router.param('item_id', (req, res, next, itemId) => {
|
|
// ensure correct prop type
|
|
const id = req.params.item_id;
|
|
try {
|
|
req.item_id = id;
|
|
req.itemRD$ = ITEMS.items.find((item) => {
|
|
return item.id === id;
|
|
});
|
|
next();
|
|
} catch (e) {
|
|
next(new Error('failed to load item'));
|
|
}
|
|
});
|
|
|
|
router.route('/items/:item_id').get((req, res) => {
|
|
res.json(toHALResponse(req, req.itemRD$));
|
|
});
|
|
|
|
router.route('/bundles').get((req, res) => {
|
|
console.log('GET');
|
|
// 70ms latency
|
|
setTimeout(() => {
|
|
res.json(toHALResponse(req, BUNDLES));
|
|
}, 0);
|
|
});
|
|
|
|
router.param('bundle_id', (req, res, next, bundleId) => {
|
|
// ensure correct prop type
|
|
const id = req.params.bundle_id;
|
|
try {
|
|
req.bundle_id = id;
|
|
req.bundle = BUNDLES.bundles.find((bundle) => {
|
|
return bundle.id === id;
|
|
});
|
|
next();
|
|
} catch (e) {
|
|
next(new Error('failed to load item'));
|
|
}
|
|
});
|
|
|
|
router.route('/bundles/:bundle_id').get((req, res) => {
|
|
// console.log('GET', util.inspect(req.bundle, { colors: true }));
|
|
res.json(toHALResponse(req, req.bundle));
|
|
});
|
|
|
|
router.route('/bitstreams').get((req, res) => {
|
|
console.log('GET');
|
|
// 70ms latency
|
|
setTimeout(() => {
|
|
res.json(toHALResponse(req, BITSTREAMS));
|
|
}, 0);
|
|
});
|
|
|
|
router.param('bitstream_id', (req, res, next, bitstreamId) => {
|
|
// ensure correct prop type
|
|
const id = req.params.bitstream_id;
|
|
try {
|
|
req.bitstream_id = id;
|
|
req.bitstream = BITSTREAMS.bitstreams.find((bitstream) => {
|
|
return bitstream.id === id;
|
|
});
|
|
next();
|
|
} catch (e) {
|
|
next(new Error('failed to load item'));
|
|
}
|
|
});
|
|
|
|
router.route('/bitstreams/:bitstream_id').get((req, res) => {
|
|
// console.log('GET', util.inspect(req.bitstream, { colors: true }));
|
|
res.json(toHALResponse(req, req.bitstream));
|
|
});
|
|
|
|
return router;
|
|
}
|