89 lines
2.1 KiB
JavaScript
89 lines
2.1 KiB
JavaScript
import express from 'express'
|
|
import jf from 'jsonfile'
|
|
import fs from 'fs'
|
|
import uuid from 'uuid'
|
|
|
|
const router = express.Router()
|
|
|
|
router.get('/:id', showComparison)
|
|
router.post('/:id', createComparisonWithId)
|
|
router.post('/', createComparison)
|
|
|
|
// return the comparison given an id, if it exsits
|
|
function showComparison (req, res) {
|
|
const id = req.params.id
|
|
return readRecord(res, id)
|
|
}
|
|
|
|
// Creates a new comparison
|
|
function createComparison (req, res) {
|
|
// generate a new id
|
|
const id = uuid()
|
|
const {a, b} = req.body
|
|
|
|
return writeRecord(res, id, {a, b, id})
|
|
}
|
|
|
|
// Creates a new comparison
|
|
function createComparisonWithId (req, res) {
|
|
// use the id provided in the req
|
|
const id = req.params.id
|
|
const {a, b} = req.body
|
|
|
|
return writeRecord(res, id, {a, b, id})
|
|
}
|
|
|
|
// reads the record from the database
|
|
function readRecord (res, id, data) {
|
|
// generate a filename
|
|
const filename = fnData(id)
|
|
|
|
// check if that file exists
|
|
fs.exists(filename, function (exists) {
|
|
// if the file does not exist, return a 404
|
|
if (!exists) return res.status(404).send(`Data id ${id} not found.`)
|
|
|
|
// otherwise, read the file as JSON
|
|
jf.readFile(filename, function (err, data) {
|
|
if (err) { return handleError(res, err) }
|
|
|
|
// and return
|
|
return res.json(data)
|
|
})
|
|
})
|
|
}
|
|
|
|
// writes the record to the database, if it doesn't exist
|
|
function writeRecord (res, id, data) {
|
|
// look up its filename
|
|
var filename = fnData(id)
|
|
|
|
// need to test that the file does not exist
|
|
|
|
// check if that file exists
|
|
fs.exists(filename, (exists) => {
|
|
// if the file already exists, return a 405
|
|
if (exists) return res.status(405).send(`Data id ${id} is already in use.`)
|
|
|
|
// and write it to the filesystem
|
|
jf.writeFile(filename, data, (err) => (
|
|
err
|
|
? handleError(res, err)
|
|
// if successful, return the comparison object
|
|
: res.status(201).json(data)
|
|
))
|
|
})
|
|
}
|
|
|
|
module.exports = router
|
|
|
|
function handleError (res, err) {
|
|
console.log(err)
|
|
return res.send(500, err)
|
|
}
|
|
|
|
// returns a filename for the given comparison
|
|
function fnData (id) {
|
|
return `./data/${id}.json`
|
|
}
|