From cfbc676427da3e2a4a244e59d80b941a55d441cf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christian=20M=C3=BCller?= Date: Sat, 26 Sep 2015 00:17:35 +0200 Subject: [PATCH] migrations improved to make notes/shortcuts 1:1 --- src/migrate.js | 95 +++++++++++++++++++++++++++++++++----------------- 1 file changed, 63 insertions(+), 32 deletions(-) diff --git a/src/migrate.js b/src/migrate.js index bbbf959..7795167 100644 --- a/src/migrate.js +++ b/src/migrate.js @@ -13,39 +13,60 @@ 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.INTEGER, + autoIncrement: true, + unique: true, + primaryKey: true + }, text: Sequelize.TEXT, - published: { type: Sequelize.DATE, defaultValue: Sequelize.NOW }, - edited: { type: Sequelize.DATE, allowNull: true, defaultValue: null }, + 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 + 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) { +sequelize.sync().then(function() { + client.hgetall("note", function(err, notes) { console.log("notes retrieved:", Object.keys(notes).length); - client.hgetall("published", function (err, published) { + client.hgetall("published", function(err, published) { console.log("published retrieved:", Object.keys(published).length); - client.hgetall("publisher", function (err, publisher) { + client.hgetall("publisher", function(err, publisher) { console.log("publisher retrieved:", Object.keys(publisher).length); - client.hgetall("password", function (err, password) { + client.hgetall("password", function(err, password) { console.log("password retrieved:", Object.keys(password).length); - client.hgetall("views", function (err, views) { + client.hgetall("views", function(err, views) { console.log("views retrieved:", Object.keys(views).length); - client.hgetall("edited", function (err, edited) { + 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) { + Object.keys(notes).forEach(function(id) { + client.smembers(id + ":urls", function(err, links) { Note.create({ text: notes[id], @@ -56,24 +77,26 @@ sequelize.sync().then(function () { views: views[id], }).then(note => { - links.forEach(LinkId => { - client.hget("short-url", LinkId, function (err, result) { + var createLink = LinkId => { + client.hget("short-url", LinkId, function(err, result) { - result = result.replace(/:([\w_-]+)\s/g, '"$1":'); var obj = {}; - 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) + 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 => { @@ -82,12 +105,20 @@ sequelize.sync().then(function () { }); }); - }); + }; + + 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]); + + - Link.create({ id: id }).then(link => { - link.setNote(note); - note.addLink(link); - }); }); })