From ee8cfa51f357b44dd6e45d085f3cf1a63ba7da93 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christian=20M=C3=BCller?= Date: Sat, 26 Sep 2015 00:38:22 +0200 Subject: [PATCH] redirection to note id added --- server.js | 3 +- src/migrate.js | 122 ++++++++++++------------------------------------- src/page.js | 9 ++-- src/storage.js | 24 +++++----- 4 files changed, 47 insertions(+), 111 deletions(-) diff --git a/server.js b/server.js index 291ce54..980849e 100644 --- a/server.js +++ b/server.js @@ -14,7 +14,8 @@ app.get('/new', function (req, res) { app.get("/:year/:month/:day/:title", function (req, res) { var P = req.params; - res.send("opening note " + P.title); + storage.getNoteId(P.year + "/" + P.month + "/" + P.day + "/" + P.title) + .then(id => res.redirect("/" + id)); }); app.get(/\/([a-zA-Z0-9]*)/, function (req, res) { diff --git a/src/migrate.js b/src/migrate.js index 7795167..e480ac3 100644 --- a/src/migrate.js +++ b/src/migrate.js @@ -13,116 +13,52 @@ var sequelize = new Sequelize('database', null, null, { }); var Note = sequelize.define('Note', { - id: { - type: Sequelize.INTEGER, - autoIncrement: true, - unique: true, - primaryKey: true - }, + id: { type: Sequelize.STRING(6), unique: true, primaryKey: true }, + deprecatedId: Sequelize.TEXT, text: Sequelize.TEXT, - published: { - type: Sequelize.DATE, - defaultValue: Sequelize.NOW - }, - edited: { - type: Sequelize.DATE, - allowNull: true, - defaultValue: null - }, - publisher: Sequelize.STRING(32), + published: { type: Sequelize.DATE, defaultValue: Sequelize.NOW }, + edited: { type: Sequelize.DATE, allowNull: true, defaultValue: null }, password: Sequelize.STRING(16), views: Sequelize.INTEGER, }); -var Link = sequelize.define('Link', { - id: { - type: Sequelize.STRING, - unique: true, - primaryKey: true - }, - lastUsage: { - type: Sequelize.DATE, - allowNull: true, - defaultValue: null - }, - params: Sequelize.STRING, - deprecatedId: Sequelize.STRING -}); - -Note.hasMany(Link); -Link.belongsTo(Note); - sequelize.sync().then(function() { client.hgetall("note", function(err, notes) { console.log("notes retrieved:", Object.keys(notes).length); client.hgetall("published", function(err, published) { console.log("published retrieved:", Object.keys(published).length); - client.hgetall("publisher", function(err, publisher) { - console.log("publisher retrieved:", Object.keys(publisher).length); - client.hgetall("password", function(err, password) { - console.log("password retrieved:", Object.keys(password).length); - client.hgetall("views", function(err, views) { - console.log("views retrieved:", Object.keys(views).length); - client.hgetall("edited", function(err, edited) { - console.log("edited retrieved:", Object.keys(edited).length); - Object.keys(notes).forEach(function(id) { - client.smembers(id + ":urls", function(err, links) { - + client.hgetall("password", function(err, password) { + console.log("password retrieved:", Object.keys(password).length); + client.hgetall("views", function(err, views) { + console.log("views retrieved:", Object.keys(views).length); + client.hgetall("edited", function(err, edited) { + console.log("edited retrieved:", Object.keys(edited).length); + Object.keys(notes).forEach(function(id) { + client.smembers(id + ":urls", function(err, links) { + + var createLink = LinkId => { Note.create({ + id: LinkId, + deprecatedId: id, text: notes[id], published: published[id] && new Date(published[id] * 1000) || new Date(), - publisher: publisher[id].indexOf("NPY") == -1 && publisher[id] || "NoteHub", password: password[id] && password[id].length == 32 && password[id], edited: !isNaN(edited[id]) && edited[id] && new Date(edited[id] * 1000) || null, views: views[id], - }).then(note => { - - var createLink = LinkId => { - client.hget("short-url", LinkId, function(err, result) { - - - var obj = {}; - if (result) { - result = result.replace(/:([\w_-]+)\s/g, '"$1":'); - try { - obj = JSON.parse(result); - delete obj.title; - delete obj.day; - delete obj.year; - delete obj.month; - } catch (e) { - return console.log("PARSE ERROR FOR", result) - } - } - Link.create({ - id: LinkId, - deprecatedId: id, - params: Object.keys(obj).length == 0 ? null : JSON.stringify(obj) - }).then(link => { - - link.setNote(note); - note.addLink(link); - - }); - }); - }; - - if (links.length == 0) { - var tmp = id.split("/"); - var paramString = '{:day "' + tmp[2] + - '", :month "' + tmp[1] + '", :title "' + tmp[3] + '", :year "' + tmp[0] + '"}'; - client.hget("short-url", paramString, function(err, result) { - if (!result) throw("oops:" + paramString + ":" + id); - createLink(result); - }); - } else createLink(links[links.length - 1]); - - - - + }) + }; + + if (links.length == 0) { + var tmp = id.split("/"); + var paramString = '{:day "' + tmp[2] + + '", :month "' + tmp[1] + '", :title "' + tmp[3] + '", :year "' + tmp[0] + '"}'; + client.hget("short-url", paramString, function(err, result) { + if (!result) throw ("oops:" + paramString + ":" + id); + createLink(result); }); - }) - }); + } else createLink(links[links.length - 1]); + + }) }); }); }); diff --git a/src/page.js b/src/page.js index a3d070a..e18a2bb 100644 --- a/src/page.js +++ b/src/page.js @@ -2,8 +2,9 @@ var marked = require("marked"); var fs = require("fs"); var template = fs.readFileSync("resources/template.html", "utf-8"); -var buildHTML = (title, content) => template - .replace("%TITLE%", title) - .replace("%CONTENT%", content); +var buildHTML = (id, title, content) => template + .replace("%TITLE%", title) + .replace(/%LINK%/g, id) + .replace("%CONTENT%", content); -module.exports.build = note => buildHTML(note.title, marked(note.text)); +module.exports.build = note => buildHTML(note.id, note.title, marked(note.text)); diff --git a/src/storage.js b/src/storage.js index f1b5cf4..4395336 100644 --- a/src/storage.js +++ b/src/storage.js @@ -10,25 +10,23 @@ var sequelize = new Sequelize('database', null, null, { }); var Note = sequelize.define('Note', { - id: { type: Sequelize.INTEGER, autoIncrement: true, unique: true, primaryKey: true }, + id: { type: Sequelize.STRING(6), unique: true, primaryKey: true }, + deprecatedId: Sequelize.TEXT, text: Sequelize.TEXT, published: { type: Sequelize.DATE, defaultValue: Sequelize.NOW }, edited: { type: Sequelize.DATE, allowNull: true, defaultValue: null }, - publisher: Sequelize.STRING(32), password: Sequelize.STRING(16), views: Sequelize.INTEGER, }); -var Link = sequelize.define('Link', { - id: { type: Sequelize.STRING, unique: true, primaryKey: true }, - lastUsage: { type: Sequelize.DATE, allowNull: true, defaultValue: null }, - params: Sequelize.STRING -}); - -Note.hasMany(Link); -Link.belongsTo(Note); +module.exports.getNote = id => { + console.log("resolving note", id); + return Note.findById(id); +} -module.exports.getNote = linkId => { - console.log("resolving note", linkId); - return Link.findById(linkId).then(link => Note.findById(link.NoteId)); +module.exports.getNoteId = deprecatedId => { + console.log("resolving deprecated Id", deprecatedId); + return Note.findOne({ + where: { deprecatedId: deprecatedId } + }).then(note => note.id); }