the-social-notebook-server/server/api.js

207 lines
5.9 KiB
JavaScript

var express = require('express');
var router = express.Router();
var utils = require('./utils');
var db = require('./DBManager');
router.get('/status', (req, res) => {
var d = new Date();
res.send({
Status: "OK",
Mantra: "KISS - Yo!",
Time: d.toString()
});
});
router.post('/login', (req, res) => {
if (!req.body.username || !req.body.password) {
utils.response_400(res, {
username: "JhonSnow",
password: "I-know_nothing"
});
} else {
var query = db.createQuery('User')
.filter('username', req.body.username)
.filter('password', req.body.password);
db.runQuery(query, (err, entities) => {
if (err || entities.length !== 1) {
res.send({
status: "OK",
user: null
});
} else {
entities = entities.map(utils.convertToUserObj);
res.send({
status: "OK",
user: entities[0]
});
}
});
}
});
router.post('/register', (req, res) => {
if (!req.body.username || !req.body.password || !req.body.email) {
utils.response_400(res, {
username: "JhonSnow",
password: "I-know_nothing",
email: "jhon@nights_watch.com"
});
} else {
var query = db.createQuery('User')
.filter('username', req.body.username);
db.runQuery(query, (err, entities) => {
if (err || entities.length === 1) {
res.send({
status: "Error",
message: "User name exists"
});
} else {
db.save({
key: db.key('User'),
data: {
username: req.body.username,
password: req.body.password,
email: req.body.email,
creation_time: new Date(),
avatar: 'http://www.aljazeera.com/mritems/images/site/DefaultAvatar.jpg'
}
}, function (err, user) {
if (err) {
utils.response_500(res, "DB Error");
} else {
res.statusCode = 201;
res.send({
status: "OK",
message: "created"
});
}
});
}
});
}
});
router.post('/user/upsert', (req, res) => {});
router.post('/note/upsert', (req, res) => {
if (!req.body || !req.body.title || !req.body.body || !req.body.owner_id || !req.body.address) {
utils.response_400(res, {
title: "Note To Self",
body: "I know nothing!!!",
lat: 35.01,
lng: 51.2,
address: "Some Where over the rainbow",
tags: ['nofilter', 'testing', 'education'],
owner_id: 123,
is_public: true
});
} else {
if (req.body.id) { //Update a Note
var key = db.key(['Note', Number(req.body.id)]);
db.get(key, (err, entity) => {
if (err) {
utils.response_500(res, "DB Error");
} else {
if (!entity) {
utils.response_400(res, {
title: "Note To Self",
body: "I know nothing!!!",
lat: 35.01,
lng: 51.2,
address: "Some Where over the rainbow",
tags: ['nofilter', 'testing', 'education'],
owner_id: 123,
is_public: true
}, "id not valid - No Notes with that ID");
} else {
entity.data.title = req.body.title || entity.data.title;
entity.data.body = req.body.body || entity.data.body;
entity.data.lat = req.body.lat || entity.data.lat;
entity.data.lng = req.body.lng || entity.data.lng;
entity.data.address = req.body.address || entity.data.address;
entity.data.tags = req.body.tags || entity.data.tags;
entity.data.is_public = req.body.is_public || entity.data.is_public;
db.save(entity, (err, _resp) => {
if (err) {
utils.response_500(res, "DB Error");
} else {
res.send(utils.convertToNoteObj(entity));
}
});
}
}
});
} else { //** Create a new Note **//
db.save({
key: db.key('Note'),
data: {
title: req.body.title,
lat: req.body.lat,
lng: req.body.lng,
address: req.body.address,
body: req.body.body,
owner_id: req.body.owner_id,
is_public: req.body.is_public || false,
created_at: new Date(),
likes: 0,
tags: req.body.tags || [],
}
},
(err, response) => {
if (err) {
utils.response_500(res, "DB Error");
} else {
res.statusCode = 201;
var id = Number(response.mutationResults[0].key.path[0].id);
var key = db.key(['Note', id]);
db.get(key, (err, entity) => {
console.log(JSON.stringify(entity, null, 2));
if (!err) res.send({
status: "OK",
note: utils.convertToNoteObj(entity)
});
else utils.response_500(res, "DB Error->" + err);
});
}
});
}
}
});
router.get('/note/all', (req, res) => {
if (!req.query.uid) {
utils.response_400(res, "uid=123", "Missing uid in query string");
} else {
var query = db.createQuery('Note')
.filter('owner_id', req.query.uid);
// .order('creation_time', {
// descending: true
// });
db.runQuery(query, (err, entities) => {
if (err || entities.length < 1) {
res.send({
status: (err ? "Error" : "OK"),
message: err ? "DB error, " + err : "No Notes",
notes: (err ? null : [])
});
} else {
entities = entities.map(utils.convertToNoteObj);
res.send({
status: "OK",
notes: entities
});
}
});
}
});
module.exports = router;
// // about page route (http://localhost:8080/about)
// router.get('/about', function(req, res) {
// res.send('im the about page!');
// });