added mock collection REST data

This commit is contained in:
Art Lowel
2016-12-13 15:15:23 +01:00
parent 6c51618a2a
commit 213ca4ae53
3 changed files with 76 additions and 59 deletions

View File

@@ -1,12 +1,12 @@
var util = require('util'); const util = require('util');
var { Router } = require('express'); const { Router } = require('express');
// Our API for demos only // Our API for demos only
import { fakeDataBase } from './db'; import { fakeDataBase } from './db';
import { fakeDemoRedisCache } from './cache'; import { fakeDemoRedisCache } from './cache';
// you would use cookies/token etc // you would use cookies/token etc
var USER_ID = 'f9d98cf1-1b96-464e-8755-bcc2a5c09077'; // hardcoded as an example const USER_ID = 'f9d98cf1-1b96-464e-8755-bcc2a5c09077'; // hardcoded as an example
// Our API for demos only // Our API for demos only
export function serverApi(req, res) { export function serverApi(req, res) {
@@ -27,80 +27,97 @@ export function serverApi(req, res) {
} }
// todo API // collection API
var COUNT = 4; let COUNT = 2;
var TODOS = [ const COLLECTIONS = [
{ id: 0, value: 'finish example', created_at: new Date(), completed: false }, {
{ id: 1, value: 'add tests', created_at: new Date(), completed: false }, "id": "9e32a2e2-6b91-4236-a361-995ccdc14c60",
{ id: 2, value: 'include development environment', created_at: new Date(), completed: false }, "name": "Test Collection 1",
{ id: 3, value: 'include production environment', created_at: new Date(), completed: false } "handle": "123456789/5179",
"type": "collection",
"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>",
},
{
"id": "598ce822-c357-46f3-ab70-63724d02d6ad",
"name": "Test Collection 2",
"handle": "123456789/6547",
"type": "collection",
"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>",
}
]; ];
export function createTodoApi() { export function createMockApi() {
var router = Router() let router = Router();
router.route('/todos') router.route('/collections')
.get(function(req, res) { .get(function(req, res) {
console.log('GET'); console.log('GET');
// 70ms latency // 70ms latency
setTimeout(function() { setTimeout(function() {
res.json(TODOS); res.json(COLLECTIONS);
}, 0); }, 0);
}) // })
.post(function(req, res) { // .post(function(req, res) {
console.log('POST', util.inspect(req.body, { colors: true })); // console.log('POST', util.inspect(req.body, { colors: true }));
var todo = req.body; // let collection = req.body;
if (todo) { // if (collection) {
TODOS.push({ // COLLECTIONS.push({
value: todo.value, // value: collection.value,
created_at: new Date(), // created_at: new Date(),
completed: todo.completed, // completed: collection.completed,
id: COUNT++ // id: COUNT++
}); // });
return res.json(todo); // return res.json(collection);
} // }
//
return res.end(); // return res.end();
}); });
router.param('todo_id', function(req, res, next, todo_id) { router.param('collection_id', function(req, res, next, collection_id) {
// ensure correct prop type // ensure correct prop type
var id = Number(req.params.todo_id); let id = req.params.collection_id;
try { try {
var todo = TODOS[id]; req.collection_id = id;
req.todo_id = id; req.collection = COLLECTIONS.find((collection) => {
req.todo = TODOS[id]; return collection.id = id;
});
next(); next();
} catch (e) { } catch (e) {
next(new Error('failed to load todo')); next(new Error('failed to load collection'));
} }
}); });
router.route('/todos/:todo_id') router.route('/collections/:collection_id')
.get(function(req, res) { .get(function(req, res) {
console.log('GET', util.inspect(req.todo, { colors: true })); console.log('GET', util.inspect(req.collection, { colors: true }));
res.json(req.todo); res.json(req.collection);
}) // })
.put(function(req, res) { // .put(function(req, res) {
console.log('PUT', util.inspect(req.body, { colors: true })); // console.log('PUT', util.inspect(req.body, { colors: true }));
//
var index = TODOS.indexOf(req.todo); // let index = COLLECTIONS.indexOf(req.collection);
var todo = TODOS[index] = req.body; // let collection = COLLECTIONS[index] = req.body;
//
res.json(todo); // res.json(collection);
}) // })
.delete(function(req, res) { // .delete(function(req, res) {
console.log('DELETE', req.todo_id); // console.log('DELETE', req.collection_id);
//
var index = TODOS.indexOf(req.todo); // let index = COLLECTIONS.indexOf(req.collection);
TODOS.splice(index, 1); // COLLECTIONS.splice(index, 1);
//
res.json(req.todo); // res.json(req.collection);
}); });
return router; return router;
}; }

View File

@@ -73,10 +73,10 @@ app.use(cacheControl, express.static(path.join(ROOT, 'dist/client'), { index: fa
///////////////////////// /////////////////////////
// ** Example API // ** Example API
// Notice API should be in a separate process // Notice API should be in a separate process
import { serverApi, createTodoApi } from './backend/api'; import { serverApi, createMockApi } from './backend/api';
// Our API for demos only // Our API for demos only
app.get('/data.json', serverApi); app.get('/data.json', serverApi);
app.use('/api', createTodoApi()); app.use('/api', createMockApi());
function ngApp(req, res) { function ngApp(req, res) {
res.render('index', { res.render('index', {

View File

@@ -66,10 +66,10 @@ app.use(cacheControl, express.static(path.join(ROOT, 'dist/client'), { index: fa
///////////////////////// /////////////////////////
// ** Example API // ** Example API
// Notice API should be in aseparate process // Notice API should be in aseparate process
import { serverApi, createTodoApi } from './backend/api'; import { serverApi, createMockApi } from './backend/api';
// Our API for demos only // Our API for demos only
app.get('/data.json', serverApi); app.get('/data.json', serverApi);
app.use('/api', createTodoApi()); app.use('/api', createMockApi());
function ngApp(req, res) { function ngApp(req, res) {
res.render('index', { res.render('index', {