175 lines
5.4 KiB
JavaScript
175 lines
5.4 KiB
JavaScript
const express = require('express');
|
|
const fs = require('fs');
|
|
const retrieveDb = require('./database.js');
|
|
|
|
const app = express();
|
|
app.use(express.json());
|
|
|
|
console.log(`Args: ${process.argv}, length: ${process.argv.length}`);
|
|
const configUrl = process.argv.length >= 2 ? process.argv[2] : null;
|
|
let config = {};
|
|
if (configUrl) {
|
|
console.log(`Reading config from ${configUrl}`);
|
|
let data = fs.readFileSync(configUrl, 'utf8');
|
|
if (data) {
|
|
console.log(`Got data: ${data}`);
|
|
config = JSON.parse(data);
|
|
console.log(`Parsed json data ${config} ...`);
|
|
console.log(`Config ${config}`);
|
|
} else {
|
|
console.error('No data...');
|
|
}
|
|
} else {
|
|
console.log('No configuration provided...');
|
|
}
|
|
|
|
const port = config?.port || 8000;
|
|
const dbUrl = config?.dbUrl || './data/people.dat';
|
|
|
|
const db = retrieveDb(dbUrl);
|
|
|
|
app.get('/', (req, res) => {
|
|
res.setHeader('Content-Type', 'application/json');
|
|
res.send(JSON.stringify({
|
|
message: 'Index page'
|
|
}));
|
|
});
|
|
|
|
function convertToCamelCased(data) {
|
|
return {
|
|
id: data.id,
|
|
firstName: data['first_name'],
|
|
lastName: data['last_name'],
|
|
email: data['email'],
|
|
status: data['status']
|
|
};
|
|
}
|
|
|
|
app.get('/people/:personId', (req, res) => {
|
|
res.setHeader('Content-Type', 'application/json');
|
|
let personId = req.params.personId;
|
|
db.get('select * from persons p where p.id = ?', [personId], (err, data) => {
|
|
if (!err) {
|
|
if (!data) {
|
|
// no person data found with the given id
|
|
res.status(404);
|
|
res.send(JSON.stringify({}));
|
|
return;
|
|
}
|
|
|
|
// I found the user, returning data...
|
|
res.send(JSON.stringify(convertToCamelCased(data)));
|
|
} else {
|
|
console.error('Fetching person with id from database failed', err);
|
|
res.status(500)
|
|
.send(JSON.stringify({}));
|
|
}
|
|
});
|
|
});
|
|
|
|
app.put('/people', (req, res) => {
|
|
console.log(`Put person with data`, req.body);
|
|
let {firstName: firstName, lastName: lastName, email, status} = req.body;
|
|
|
|
const stmt = db.prepare('insert into persons (first_name, last_name, email, status) values (?, ?, ?, ?)');
|
|
stmt.run([firstName, lastName, email, status || 0], (serr) => {
|
|
if (!serr) {
|
|
let lastId = stmt.lastID;
|
|
console.log(`Added person with lastId ${lastId}`);
|
|
res.send(JSON.stringify({...req.body, id: lastId}));
|
|
} else {
|
|
console.error('Got error while putting new person', serr);
|
|
res.status(500)
|
|
.send('Internal server error');
|
|
}
|
|
|
|
});
|
|
});
|
|
|
|
app.post('/people/:personId', (req, res) => {
|
|
console.log(`Update person with data`, req.body);
|
|
let personId = req.params.personId;
|
|
let {firstName, lastName, email, status} = req.body;
|
|
|
|
db.get('select * from persons p where p.id = ?', [personId], (err, data) => {
|
|
if (err) {
|
|
console.log(`Error while checking if person exists with ${personId}`);
|
|
res.status(500).send('');
|
|
return;
|
|
}
|
|
|
|
if (!data) {
|
|
res.status(404).send('');
|
|
return;
|
|
}
|
|
|
|
console.log(`Person found, updating person with id ${personId} ...`);
|
|
|
|
db.run('update persons set first_name = ?, last_name = ?, email = ?, status = ?'
|
|
+ ' where id = ?',
|
|
[firstName, lastName, email, status || 0, personId], (err2) => {
|
|
if (!err2) {
|
|
res.send(JSON.stringify({}));
|
|
} else {
|
|
console.error('Got error while putting new person', err2);
|
|
res.status(500)
|
|
.send('Internal server error');
|
|
}
|
|
|
|
});
|
|
});
|
|
});
|
|
|
|
app.delete('/people/:personId', (req, res) => {
|
|
let personId = req.params.personId;
|
|
db.get('select * from persons p where p.id = ?', [personId], (err, data) => {
|
|
if (err) {
|
|
console.error('Got error', err);
|
|
res.status(500).end();
|
|
return;
|
|
}
|
|
|
|
if (!data) {
|
|
// there is no record to be deleted
|
|
res.status(404).end();
|
|
return;
|
|
}
|
|
|
|
// we are sure that there is a record to delete
|
|
|
|
db.run('delete from persons where id = ?', [personId], (err) => {
|
|
if (!err) {
|
|
console.log(`Deleting person with id ${personId} was successful.`);
|
|
res.status(200)
|
|
.send(JSON.stringify({
|
|
status: 'OK'
|
|
}));
|
|
} else {
|
|
console.error(`Got error while deleting person with id ${personId}`, err);
|
|
res.status(500).send(JSON.stringify({
|
|
status: 'INTERNAL SERVER ERROR',
|
|
message: `I couldn't delete person with id ${personId}...`,
|
|
}));
|
|
}
|
|
});
|
|
|
|
});
|
|
});
|
|
|
|
app.get('/people/', (req, res) => {
|
|
console.log('Getting all people data');
|
|
res.setHeader('Content-Type', 'application/json');
|
|
db.all('select * from persons', (err, data) => {
|
|
if (!err) {
|
|
res.send(JSON.stringify(data.map(r => convertToCamelCased(r))));
|
|
} else {
|
|
console.error('Fetching persons from database failed', err);
|
|
res.send(JSON.stringify([]));
|
|
}
|
|
});
|
|
});
|
|
|
|
app.listen(port, () => {
|
|
console.log(`Listening on ${port}`);
|
|
});
|