Added mocks for all model types, added CollectionDataService

This commit is contained in:
Art Lowel
2017-02-14 14:40:57 +01:00
parent c3214595ef
commit c8fb98760d
30 changed files with 1129 additions and 162 deletions

View File

@@ -6,6 +6,8 @@ import { fakeDataBase } from './db';
import { fakeDemoRedisCache } from './cache';
import { COLLECTIONS } from "./collections";
import { ITEMS } from "./items";
import { BUNDLES } from "./bundles";
import { BITSTREAMS } from "./bitstreams";
import { METADATA } from "./metadata";
// you would use cookies/token etc
@@ -30,14 +32,10 @@ export function serverApi(req, res) {
}
let COLLECTION_COUNT = 2;
let ITEM_COUNT = 2;
function toJSONAPIResponse(req, data, included?) {
function toHALResponse(req, data, included?) {
let result = {
"data": data,
"links": {
"_embedded": data,
"_links": {
"self": req.protocol + '://' + req.get('host') + req.originalUrl
}
};
@@ -58,7 +56,7 @@ export function createMockApi() {
console.log('GET');
// 70ms latency
setTimeout(function() {
res.json(toJSONAPIResponse(req, COLLECTIONS));
res.json(toHALResponse(req, COLLECTIONS));
}, 0);
// })
@@ -84,7 +82,7 @@ export function createMockApi() {
try {
req.collection_id = id;
req.collection = COLLECTIONS.find((collection) => {
return collection.id = id;
return collection.id === id;
});
next();
} catch (e) {
@@ -95,7 +93,7 @@ export function createMockApi() {
router.route('/collections/:collection_id')
.get(function(req, res) {
console.log('GET', util.inspect(req.collection, { colors: true }));
res.json(toJSONAPIResponse(req, req.collection));
res.json(toHALResponse(req, req.collection));
// })
// .put(function(req, res) {
// console.log('PUT', util.inspect(req.body, { colors: true }));
@@ -120,7 +118,7 @@ export function createMockApi() {
console.log('GET');
// 70ms latency
setTimeout(function() {
res.json(toJSONAPIResponse(req, ITEMS));
res.json(toHALResponse(req, ITEMS));
}, 0);
// })
@@ -161,7 +159,7 @@ export function createMockApi() {
const itemMetadata: any[] = METADATA.filter((metadatum) => {
return metadataIds.indexOf(metadatum.id) >= 0
});
res.json(toJSONAPIResponse(req, req.item, itemMetadata));
res.json(toHALResponse(req, req.item, itemMetadata));
// })
// .put(function(req, res) {
// console.log('PUT', util.inspect(req.body, { colors: true }));
@@ -180,5 +178,72 @@ export function createMockApi() {
// res.json(req.item);
});
router.route('/bundles')
.get(function(req, res) {
console.log('GET');
// 70ms latency
setTimeout(function() {
res.json(toHALResponse(req, BUNDLES));
}, 0);
});
router.param('bundle_id', function(req, res, next, bundle_id) {
// ensure correct prop type
let id = req.params.bundle_id;
try {
req.bundle_id = id;
req.bundle = BUNDLES.find((bundle) => {
return bundle.id === id;
});
next();
} catch (e) {
next(new Error('failed to load item'));
}
});
router.route('/bundles/:bundle_id')
.get(function(req, res) {
console.log('GET', util.inspect(req.bundle, { colors: true }));
const metadataIds: string[] = req.bundle.relationships.metadata.data.map(obj => obj.id);
const bundleMetadata: any[] = METADATA.filter((metadatum) => {
return metadataIds.indexOf(metadatum.id) >= 0
});
res.json(toHALResponse(req, req.bundle, bundleMetadata));
});
router.route('/bitstreams')
.get(function(req, res) {
console.log('GET');
// 70ms latency
setTimeout(function() {
res.json(toHALResponse(req, BITSTREAMS));
}, 0);
});
router.param('bitstream_id', function(req, res, next, bitstream_id) {
// ensure correct prop type
let id = req.params.bitstream_id;
try {
req.bitstream_id = id;
req.bitstream = BITSTREAMS.find((bitstream) => {
return bitstream.id === id;
});
next();
} catch (e) {
next(new Error('failed to load item'));
}
});
router.route('/bitstreams/:bitstream_id')
.get(function(req, res) {
console.log('GET', util.inspect(req.bitstream, { colors: true }));
const metadataIds: string[] = req.bitstream.relationships.metadata.data.map(obj => obj.id);
const bitstreamMetadata: any[] = METADATA.filter((metadatum) => {
return metadataIds.indexOf(metadatum.id) >= 0
});
res.json(toHALResponse(req, req.bitstream, bitstreamMetadata));
});
return router;
}

42
src/backend/bitstreams.ts Normal file
View File

@@ -0,0 +1,42 @@
export const BITSTREAMS = [
{
"_links": {
"self": { "href": "/bitstreams/43c57c2b-206f-4645-8c8f-5f10c84b09fa" },
"bundle": { "href": "/bundles/35e0606d-5e18-4f9c-aa61-74fc751cc3f9" },
"retrieve": { "href": "/bitstreams/43c57c2b-206f-4645-8c8f-5f10c84b09fa/retrieve" }
},
"id": "43c57c2b-206f-4645-8c8f-5f10c84b09fa",
"name": "do_open_access_CRL.pdf",
"size": 636626,
"checksum": {
"value": "063dfbbbac873aa3fca479b878eccff3",
"algorithm": "MD5"
},
"metadata": [
{ "key": "dc.title", "value": "do_open_access_CRL.pdf", "language": null },
{ "key": "dc.description", "value": "Conference Paper", "language": "en" }
],
"format": "Adobe PDF",
"mimetype": "application/pdf"
},
{
"_links": {
"self": { "href": "/bitstreams/1a013ecc-fb25-4689-a44f-f1383ad26632" },
"bundle": { "href": "/bundles/a469c57a-abcf-45c3-83e4-b187ebd708fd" },
"retrieve": { "href": "/rest/bitstreams/1a013ecc-fb25-4689-a44f-f1383ad26632/retrieve" }
},
"id": "1a013ecc-fb25-4689-a44f-f1383ad26632",
"name": "do_open_access_CRL.pdf.jpg",
"size": 41183,
"checksum": {
"value": "a8ad475e86f9645c60e13e06f1427814",
"algorithm": "MD5"
},
"metadata": [
{ "key": "dc.title", "value": "do_open_access_CRL.pdf.jpg", "language": null },
{ "key": "dc.description", "value": "Generated Thumbnail", "language": "en" }
],
"format": "JPEG",
"mimetype": "image/jpeg"
}
];

36
src/backend/bundles.ts Normal file
View File

@@ -0,0 +1,36 @@
export const BUNDLES = [
{
"_links": {
"self": { "href": "/bundles/35e0606d-5e18-4f9c-aa61-74fc751cc3f9" },
"items": [
{ "href": "/items/21539b1d-9ef1-4eda-9c77-49565b5bfb78" }
],
"bitstreams": [
{ "href": "/bitstreams/43c57c2b-206f-4645-8c8f-5f10c84b09fa" },
],
"primaryBitstream": { "href": "/bitstreams/43c57c2b-206f-4645-8c8f-5f10c84b09fa" }
},
"id": "35e0606d-5e18-4f9c-aa61-74fc751cc3f9",
"name": "ORIGINAL",
"metadata": [
{ "key": "dc.title", "value": "ORIGINAL", "language": "en" }
]
},
{
"_links": {
"self": { "href": "/bundles/a469c57a-abcf-45c3-83e4-b187ebd708fd" },
"items": [
{ "href": "/items/21539b1d-9ef1-4eda-9c77-49565b5bfb78" }
],
"bitstreams": [
{ "href": "/bitstreams/1a013ecc-fb25-4689-a44f-f1383ad26632" },
],
"primaryBitstream": { "href": "/bitstreams/1a013ecc-fb25-4689-a44f-f1383ad26632" }
},
"id": "a469c57a-abcf-45c3-83e4-b187ebd708fd",
"name": "THUMBNAIL",
"metadata": [
{ "key": "dc.title", "value": "THUMBNAIL", "language": "en" }
]
}
];

View File

@@ -1,42 +1,70 @@
export const COLLECTIONS = [
{
"id": "9e32a2e2-6b91-4236-a361-995ccdc14c60",
"type": "collections",
"attributes": {
"name": "A Test Collection",
"handle": "123456789/5179",
"copyrightText": "<p>© 2005-2016 JOHN DOE SOME RIGHTS RESERVED</p>",
"introductoryText": "<p class='lead'>An introductory text dolor sit amet, consectetur adipiscing elit. Duis laoreet lorem erat, eget auctor est ultrices quis. Nullam ac tincidunt quam. In nec nisl odio. In egestas aliquam tincidunt.</p>\r\n<p>Integer vitae diam id dolor pharetra dignissim in sed enim. Vivamus pulvinar tristique sem a iaculis. Aenean ultricies dui vel facilisis laoreet. Integer porta erat eu ultrices rhoncus. Sed condimentum malesuada ex sit amet ullamcorper. Morbi a ipsum dolor. Vivamus interdum eget lacus ut fermentum.</p>",
"shortDescription": "A collection for testing purposes",
"sidebarText": "<p>Some news sed condimentum malesuada ex sit amet ullamcorper. Morbi a ipsum dolor. Vivamus interdum eget lacus ut fermentum. Donec sed ultricies erat, nec sollicitudin mauris. Duis varius nulla quis quam vulputate, at hendrerit turpis rutrum. Integer nec facilisis sapien. Fusce fringilla malesuada lectus id pulvinar. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae</p>"
"_links": {
"self": { "href": "/collections/9e32a2e2-6b91-4236-a361-995ccdc14c60" },
"items": [
{ "href": "/items/21539b1d-9ef1-4eda-9c77-49565b5bfb78" },
{ "href": "/items/be8325f7-243b-49f4-8a4b-df2b793ff3b5" }
]
},
"relationships": {
"items": {
"data": [
{ "type": "items", "id": "21539b1d-9ef1-4eda-9c77-49565b5bfb78" },
{ "type": "items", "id": "be8325f7-243b-49f4-8a4b-df2b793ff3b5" }
]
"id": "9e32a2e2-6b91-4236-a361-995ccdc14c60",
"name": "A Test Collection",
"handle": "123456789/5179",
"metadata": [
{
"key": "dc.rights",
"value": "<p>© 2005-2016 JOHN DOE SOME RIGHTS RESERVED</p>",
"language": null
},
{
"key": "dc.description",
"value": "<p class='lead'>An introductory text dolor sit amet, consectetur adipiscing elit. Duis laoreet lorem erat, eget auctor est ultrices quis. Nullam ac tincidunt quam. In nec nisl odio. In egestas aliquam tincidunt.</p>\r\n<p>Integer vitae diam id dolor pharetra dignissim in sed enim. Vivamus pulvinar tristique sem a iaculis. Aenean ultricies dui vel facilisis laoreet. Integer porta erat eu ultrices rhoncus. Sed condimentum malesuada ex sit amet ullamcorper. Morbi a ipsum dolor. Vivamus interdum eget lacus ut fermentum.</p>",
"language": null
},
{
"key": "dc.description.abstract",
"value": "A collection for testing purposes",
"language": null
},
{
"key": "dc.description.tableofcontents",
"value": "<p>Some news sed condimentum malesuada ex sit amet ullamcorper. Morbi a ipsum dolor. Vivamus interdum eget lacus ut fermentum. Donec sed ultricies erat, nec sollicitudin mauris. Duis varius nulla quis quam vulputate, at hendrerit turpis rutrum. Integer nec facilisis sapien. Fusce fringilla malesuada lectus id pulvinar. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae</p>",
"language": null
}
}
]
},
{
"id": "598ce822-c357-46f3-ab70-63724d02d6ad",
"type": "collections",
"attributes": {
"name": "Another Test Collection",
"handle": "123456789/6547",
"copyrightText": "<p>© 2005-2016 JOHN DOE SOME RIGHTS RESERVED</p>",
"introductoryText": "<p class='lead'>Another introductory text dolor sit amet, consectetur adipiscing elit. Duis laoreet lorem erat, eget auctor est ultrices quis. Nullam ac tincidunt quam. In nec nisl odio. In egestas aliquam tincidunt.</p>\r\n<p>Integer vitae diam id dolor pharetra dignissim in sed enim. Vivamus pulvinar tristique sem a iaculis. Aenean ultricies dui vel facilisis laoreet. Integer porta erat eu ultrices rhoncus. Sed condimentum malesuada ex sit amet ullamcorper. Morbi a ipsum dolor. Vivamus interdum eget lacus ut fermentum.</p>",
"shortDescription": "Another collection for testing purposes",
"sidebarText": "<p>Some more news sed condimentum malesuada ex sit amet ullamcorper. Morbi a ipsum dolor. Vivamus interdum eget lacus ut fermentum. Donec sed ultricies erat, nec sollicitudin mauris. Duis varius nulla quis quam vulputate, at hendrerit turpis rutrum. Integer nec facilisis sapien. Fusce fringilla malesuada lectus id pulvinar. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae</p>"
"_links": {
"self": { "href": "/collections/598ce822-c357-46f3-ab70-63724d02d6ad" },
"items": [
{ "href": "/items/21539b1d-9ef1-4eda-9c77-49565b5bfb78" },
{ "href": "/items/be8325f7-243b-49f4-8a4b-df2b793ff3b5" }
]
},
"relationships": {
"items": {
"data": [
{ "type": "items", "id": "21539b1d-9ef1-4eda-9c77-49565b5bfb78" },
{ "type": "items", "id": "be8325f7-243b-49f4-8a4b-df2b793ff3b5" }
]
"id": "598ce822-c357-46f3-ab70-63724d02d6ad",
"name": "Another Test Collection",
"handle": "123456789/6547",
"metadata": [
{
"key": "dc.rights",
"value": "<p>© 2005-2016 JOHN DOE SOME RIGHTS RESERVED</p>",
"language": null
},
{
"key": "dc.description",
"value": "<p class='lead'>Another introductory text dolor sit amet, consectetur adipiscing elit. Duis laoreet lorem erat, eget auctor est ultrices quis. Nullam ac tincidunt quam. In nec nisl odio. In egestas aliquam tincidunt.</p>\r\n<p>Integer vitae diam id dolor pharetra dignissim in sed enim. Vivamus pulvinar tristique sem a iaculis. Aenean ultricies dui vel facilisis laoreet. Integer porta erat eu ultrices rhoncus. Sed condimentum malesuada ex sit amet ullamcorper. Morbi a ipsum dolor. Vivamus interdum eget lacus ut fermentum.</p>",
"language": null
},
{
"key": "dc.description.abstract",
"value": "Another collection for testing purposes",
"language": null
},
{
"key": "dc.description.tableofcontents",
"value": "<p>Some more news sed condimentum malesuada ex sit amet ullamcorper. Morbi a ipsum dolor. Vivamus interdum eget lacus ut fermentum. Donec sed ultricies erat, nec sollicitudin mauris. Duis varius nulla quis quam vulputate, at hendrerit turpis rutrum. Integer nec facilisis sapien. Fusce fringilla malesuada lectus id pulvinar. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae</p>",
"language": null
}
}
]
}
];

View File

@@ -1,128 +1,164 @@
export const ITEMS = [
{
"id": "21539b1d-9ef1-4eda-9c77-49565b5bfb78",
"type": "items",
"attributes": {
"name": "Do Open-Access Articles Have a Greater Research Impact?",
"handle": "123456789/8871",
"lastModified": "2016-10-14 10:41:12.886",
"isArchived": true,
"isWithdrawn": false
},
"relationships": {
"collections": {
"data": [
{ "type": "collections", "id": "9e32a2e2-6b91-4236-a361-995ccdc14c60" },
{ "type": "collections", "id": "598ce822-c357-46f3-ab70-63724d02d6ad" }
]
"_links": {
"self": {
"href": "/items/21539b1d-9ef1-4eda-9c77-49565b5bfb78"
},
"metadata": {
"data": [
{
"type": "metadata",
"id": "d58a3098-b390-4cd6-8f52-b088b3daa637",
},
{
"type": "metadata",
"id": "56660730-0e0d-47ec-864a-bda2327d5716",
},
{
"type": "metadata",
"id": "b9d4ae74-2758-4964-a95e-eecd35b62f26",
},
{
"type": "metadata",
"id": "311529ea-e339-4d8f-9292-813ebe515f03",
},
{
"type": "metadata",
"id": "fa875444-3faf-482a-b099-77233bda914d",
},
{
"type": "metadata",
"id": "ddbb161b-6e52-4a90-9096-c8eae8cec4c9",
},
{
"type": "metadata",
"id": "ba51287d-a2c9-409b-8129-060b693a7570",
},
{
"type": "metadata",
"id": "e5c1c9d4-b4e2-4bdc-9153-6b769742b33f",
},
{
"type": "metadata",
"id": "4c125844-1eca-47aa-98f8-61c51a9c962f",
},
{
"type": "metadata",
"id": "362c753c-a44d-468d-b256-486470b8c1e1",
},
{
"type": "metadata",
"id": " 69a02355-37bb-479f-9496-c8743fcacf3c",
},
{
"type": "metadata",
"id": "ffbd75d5-bf3a-47ff-af22-490240f6fcc6",
}
]
}
"collections": [
{
"href": "/collections/9e32a2e2-6b91-4236-a361-995ccdc14c60"
},
{
"href": "/collections/598ce822-c357-46f3-ab70-63724d02d6ad"
}
],
"bundles": [
{
"href": "/bundles/35e0606d-5e18-4f9c-aa61-74fc751cc3f9"
},
{
"href": "/bundles/a469c57a-abcf-45c3-83e4-b187ebd708fd"
}
]
},
"id": "21539b1d-9ef1-4eda-9c77-49565b5bfb78",
"name": "Do Open-Access Articles Have a Greater Research Impact?",
"handle": "123456789/8871",
"lastModified": "2016-10-14 10:41:12.886",
"isArchived": true,
"isWithdrawn": false,
"metadata": [
{
"key": "dc.contributor.author",
"value": "Antelman, Kristin",
"language": "en"
},
{
"key": "dc.date.accessioned",
"value": "2016-10-14T10:41:13Z",
"language": null
},
{
"key": "dc.date.available",
"value": "2016-10-14T10:41:13Z",
"language": null
},
{
"key": "dc.date.issued",
"value": "2004-09-01",
"language": "en"
},
{
"key": "dc.identifier.uri",
"value": "http://hdl.handle.net/123456789/8871",
"language": null
},
{
"key": "dc.description.abstract",
"value": "Although many authors believe that their work has a greater research impact if it is freely available, studies to demonstrate that impact are few. This study looks at articles in four disciplines at varying stages of adoption of open access—philosophy, political science, electrical and electronic engineering and mathematics—to see whether they have a greater impact as measured by citations in the ISI Web of Science database when their authors make them freely available on the Internet. The finding is that, across all four disciplines, freely available articles do have a greater research impact. Shedding light on this category of open access reveals that scholars in diverse disciplines are adopting open-access practices and being rewarded for it.",
"language": "en"
},
{
"key": "dc.publisher",
"value": "College & Research Libraries News",
"language": "en"
},
{
"key": "dc.subject",
"value": "Publishing",
"language": "en"
},
{
"key": "dc.subject",
"value": "Intellectual Property",
"language": "en"
},
{
"key": "dc.subject",
"value": "Open Access",
"language": "en"
},
{
"key": "dc.title",
"value": "Do Open-Access Articles Have a Greater Research Impact?",
"language": "en"
},
{
"key": "dc.type",
"value": "(not specified)",
"language": "en"
}
]
},
{
"id": "be8325f7-243b-49f4-8a4b-df2b793ff3b5",
"type": "items",
"attributes": {
"name": "Another Test Item",
"handle": "123456789/9978",
"lastModified": "2016-05-27 03:00:20.063",
"isArchived": true,
"isWithdrawn": false
},
"relationships": {
"collections": {
"data": [
{ "type": "collections", "id": "9e32a2e2-6b91-4236-a361-995ccdc14c60" },
{ "type": "collections", "id": "598ce822-c357-46f3-ab70-63724d02d6ad" }
]
"_links": {
"self": {
"href": "/items/be8325f7-243b-49f4-8a4b-df2b793ff3b5"
},
"metadata": {
"data": [
{
"type": "metadata",
"id": "981c725e-53f3-4749-89ee-ef042f23c3c3",
},
{
"type": "metadata",
"id": "521df61d-c541-4180-beb8-ac0a1bd1e852",
},
{
"type": "metadata",
"id": "551a216d-5350-4b15-9398-9bc2e95e7a3d",
},
{
"type": "metadata",
"id": " eb17dce4-3892-47fe-b014-6ff8e17a93ef",
},
{
"type": "metadata",
"id": "3e840957-cb1b-4521-8f5d-fb5f6956f303",
},
{
"type": "metadata",
"id": "ae0bc880-481b-4425-aa5b-354b38d24e4f",
},
{
"type": "metadata",
"id": "8dc89ac4-d606-4f1a-8524-8f70a6b371de",
},
{
"type": "metadata",
"id": "13185eb9-dc05-4bd7-9c2d-5322a2ac5326",
}
]
"collections": [
{
"href": "/collections/9e32a2e2-6b91-4236-a361-995ccdc14c60"
},
{
"href": "/collections/598ce822-c357-46f3-ab70-63724d02d6ad"
}
],
"bundles": [
{
"href": "/bundles/b0176baa-d52e-4c20-a8e6-d586f2c70c76"
},
{
"href": "/bundles/40b1cd3f-07ad-4ca6-9716-132671f93a15"
}
]
},
"id": "be8325f7-243b-49f4-8a4b-df2b793ff3b5",
"name": "Another Test Item",
"handle": "123456789/9978",
"lastModified": "2016-05-27 03:00:20.063",
"isArchived": true,
"isWithdrawn": false,
"metadata": [
{
"key": "dc.contributor.author",
"value": "John Doe",
"language": "en"
},
{
"key": "dc.date.accessioned",
"value": "2016-05-27T07:45:04Z",
"language": null
},
{
"key": "dc.date.available",
"value": "2016-05-27T07:45:04Z",
"language": null
},
{
"key": "dc.date.issued",
"value": "2016-05-27",
"language": "en"
},
{
"key": "dc.identifier.uri",
"value": "http://hdl.handle.net/123456789/9978",
"language": null
},
{
"key": "dc.description.abstract",
"value": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas lacus velit, lacinia eu ultrices nec, auctor in sem. Donec interdum convallis ornare. Aliquam et tortor risus. Praesent ut feugiat eros, eu consequat nibh. Morbi id quam eu mi pellentesque consequat vel vitae sem. Praesent sed velit ullamcorper, efficitur odio non, aliquet urna. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Pellentesque eu placerat urna. Interdum et malesuada fames ac ante ipsum primis in faucibus. Nulla non aliquet mauris. Nulla quis posuere lorem. Pellentesque tempus maximus ipsum ac pretium. Nunc hendrerit tempus sem, vitae luctus erat consectetur vestibulum. Nulla sodales felis in dictum sagittis.\n\nNullam porta magna quis magna vulputate elementum. Pellentesque dictum lorem id nisl tincidunt condimentum. Sed est dolor, dapibus sit amet augue at, malesuada cursus quam. Pellentesque elit felis, malesuada dictum congue tristique, iaculis euismod ligula. Donec dignissim dolor eu lacus pulvinar porttitor. Sed quis semper augue, dictum sollicitudin eros. \n\nMauris congue lectus at turpis viverra scelerisque. Praesent at urna rhoncus, condimentum odio ac, sagittis libero. Nulla aliquam ornare bibendum. Duis quis ornare urna. Suspendisse semper tincidunt neque nec consequat. Sed enim diam, mollis eu neque vitae, lacinia varius risus. Fusce nec sem tempor, efficitur lectus sed, porta sem. Pellentesque sollicitudin ut dui vitae malesuada.",
"language": "en"
},
{
"key": "dc.title",
"value": "Another Test Item",
"language": "en"
},
{
"key": "dc.type",
"value": "(not specified)",
"language": "en"
}
}
]
}
];