Files
notehub/src/migrate.js
T

133 lines
4.2 KiB
JavaScript
Raw Normal View History

2015-09-13 13:20:43 +02:00
var redis = require("redis"),
2015-09-13 14:59:52 +02:00
client = redis.createClient();
2015-09-13 13:20:43 +02:00
var Sequelize = require('sequelize');
var sequelize = new Sequelize('database', null, null, {
dialect: 'sqlite',
pool: {
max: 5,
min: 0,
idle: 10000
},
storage: 'database.sqlite'
});
2015-09-13 14:59:52 +02:00
var Note = sequelize.define('Note', {
id: {
type: Sequelize.INTEGER,
autoIncrement: true,
unique: true,
primaryKey: true
},
2015-09-13 14:59:52 +02:00
text: Sequelize.TEXT,
published: {
type: Sequelize.DATE,
defaultValue: Sequelize.NOW
},
edited: {
type: Sequelize.DATE,
allowNull: true,
defaultValue: null
},
2015-09-13 14:59:52 +02:00
publisher: Sequelize.STRING(32),
password: Sequelize.STRING(16),
views: Sequelize.INTEGER,
2015-09-13 13:20:43 +02:00
});
2015-09-25 20:02:23 +02:00
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
2015-09-13 17:24:12 +02:00
});
2015-09-25 20:02:23 +02:00
Note.hasMany(Link);
Link.belongsTo(Note);
2015-09-13 17:24:12 +02:00
sequelize.sync().then(function() {
client.hgetall("note", function(err, notes) {
2015-09-13 14:59:52 +02:00
console.log("notes retrieved:", Object.keys(notes).length);
client.hgetall("published", function(err, published) {
2015-09-13 14:59:52 +02:00
console.log("published retrieved:", Object.keys(published).length);
client.hgetall("publisher", function(err, publisher) {
2015-09-13 14:59:52 +02:00
console.log("publisher retrieved:", Object.keys(publisher).length);
client.hgetall("password", function(err, password) {
2015-09-13 14:59:52 +02:00
console.log("password retrieved:", Object.keys(password).length);
client.hgetall("views", function(err, views) {
2015-09-13 14:59:52 +02:00
console.log("views retrieved:", Object.keys(views).length);
client.hgetall("edited", function(err, edited) {
2015-09-13 14:59:52 +02:00
console.log("edited retrieved:", Object.keys(edited).length);
Object.keys(notes).forEach(function(id) {
client.smembers(id + ":urls", function(err, links) {
2015-09-13 17:24:12 +02:00
Note.create({
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 => {
2015-09-13 18:06:27 +02:00
var createLink = LinkId => {
client.hget("short-url", LinkId, function(err, result) {
2015-09-13 18:06:27 +02:00
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)
}
2015-09-13 18:06:27 +02:00
}
2015-09-25 20:02:23 +02:00
Link.create({
id: LinkId,
deprecatedId: id,
2015-09-13 18:06:27 +02:00
params: Object.keys(obj).length == 0 ? null : JSON.stringify(obj)
2015-09-25 20:02:23 +02:00
}).then(link => {
2015-09-13 18:06:27 +02:00
2015-09-25 20:02:23 +02:00
link.setNote(note);
note.addLink(link);
2015-09-13 18:06:27 +02:00
2015-09-25 20:02:23 +02:00
});
2015-09-13 18:06:27 +02:00
});
};
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]);
2015-09-25 20:02:23 +02:00
2015-09-13 17:24:12 +02:00
});
})
2015-09-13 14:59:52 +02:00
});
});
});
});
});
});
2015-09-13 13:20:43 +02:00
});
2015-09-13 14:59:52 +02:00
})