migrations improved to make notes/shortcuts 1:1
This commit is contained in:
+54
-23
@@ -13,39 +13,60 @@ var sequelize = new Sequelize('database', null, null, {
|
|||||||
});
|
});
|
||||||
|
|
||||||
var Note = sequelize.define('Note', {
|
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,
|
text: Sequelize.TEXT,
|
||||||
published: { type: Sequelize.DATE, defaultValue: Sequelize.NOW },
|
published: {
|
||||||
edited: { type: Sequelize.DATE, allowNull: true, defaultValue: null },
|
type: Sequelize.DATE,
|
||||||
|
defaultValue: Sequelize.NOW
|
||||||
|
},
|
||||||
|
edited: {
|
||||||
|
type: Sequelize.DATE,
|
||||||
|
allowNull: true,
|
||||||
|
defaultValue: null
|
||||||
|
},
|
||||||
publisher: Sequelize.STRING(32),
|
publisher: Sequelize.STRING(32),
|
||||||
password: Sequelize.STRING(16),
|
password: Sequelize.STRING(16),
|
||||||
views: Sequelize.INTEGER,
|
views: Sequelize.INTEGER,
|
||||||
});
|
});
|
||||||
|
|
||||||
var Link = sequelize.define('Link', {
|
var Link = sequelize.define('Link', {
|
||||||
id: { type: Sequelize.STRING, unique: true, primaryKey: true },
|
id: {
|
||||||
lastUsage: { type: Sequelize.DATE, allowNull: true, defaultValue: null },
|
type: Sequelize.STRING,
|
||||||
params: Sequelize.STRING
|
unique: true,
|
||||||
|
primaryKey: true
|
||||||
|
},
|
||||||
|
lastUsage: {
|
||||||
|
type: Sequelize.DATE,
|
||||||
|
allowNull: true,
|
||||||
|
defaultValue: null
|
||||||
|
},
|
||||||
|
params: Sequelize.STRING,
|
||||||
|
deprecatedId: Sequelize.STRING
|
||||||
});
|
});
|
||||||
|
|
||||||
Note.hasMany(Link);
|
Note.hasMany(Link);
|
||||||
Link.belongsTo(Note);
|
Link.belongsTo(Note);
|
||||||
|
|
||||||
sequelize.sync().then(function () {
|
sequelize.sync().then(function() {
|
||||||
client.hgetall("note", function (err, notes) {
|
client.hgetall("note", function(err, notes) {
|
||||||
console.log("notes retrieved:", Object.keys(notes).length);
|
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);
|
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);
|
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);
|
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);
|
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);
|
console.log("edited retrieved:", Object.keys(edited).length);
|
||||||
Object.keys(notes).forEach(function (id) {
|
Object.keys(notes).forEach(function(id) {
|
||||||
client.smembers(id + ":urls", function (err, links) {
|
client.smembers(id + ":urls", function(err, links) {
|
||||||
|
|
||||||
Note.create({
|
Note.create({
|
||||||
text: notes[id],
|
text: notes[id],
|
||||||
@@ -56,12 +77,13 @@ sequelize.sync().then(function () {
|
|||||||
views: views[id],
|
views: views[id],
|
||||||
}).then(note => {
|
}).then(note => {
|
||||||
|
|
||||||
links.forEach(LinkId => {
|
var createLink = LinkId => {
|
||||||
client.hget("short-url", LinkId, function (err, result) {
|
client.hget("short-url", LinkId, function(err, result) {
|
||||||
|
|
||||||
result = result.replace(/:([\w_-]+)\s/g, '"$1":');
|
|
||||||
|
|
||||||
var obj = {};
|
var obj = {};
|
||||||
|
if (result) {
|
||||||
|
result = result.replace(/:([\w_-]+)\s/g, '"$1":');
|
||||||
try {
|
try {
|
||||||
obj = JSON.parse(result);
|
obj = JSON.parse(result);
|
||||||
delete obj.title;
|
delete obj.title;
|
||||||
@@ -71,9 +93,10 @@ sequelize.sync().then(function () {
|
|||||||
} catch (e) {
|
} catch (e) {
|
||||||
return console.log("PARSE ERROR FOR", result)
|
return console.log("PARSE ERROR FOR", result)
|
||||||
}
|
}
|
||||||
|
}
|
||||||
Link.create({
|
Link.create({
|
||||||
id: LinkId,
|
id: LinkId,
|
||||||
|
deprecatedId: id,
|
||||||
params: Object.keys(obj).length == 0 ? null : JSON.stringify(obj)
|
params: Object.keys(obj).length == 0 ? null : JSON.stringify(obj)
|
||||||
}).then(link => {
|
}).then(link => {
|
||||||
|
|
||||||
@@ -82,12 +105,20 @@ sequelize.sync().then(function () {
|
|||||||
|
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
});
|
};
|
||||||
|
|
||||||
Link.create({ id: id }).then(link => {
|
if (links.length == 0) {
|
||||||
link.setNote(note);
|
var tmp = id.split("/");
|
||||||
note.addLink(link);
|
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]);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
});
|
});
|
||||||
})
|
})
|
||||||
|
|||||||
Reference in New Issue
Block a user