diff --git a/server.js b/server.js index 5bd1b04..2921b75 100644 --- a/server.js +++ b/server.js @@ -1,20 +1,21 @@ var express = require('express'); var page = require('./src/page'); +var storage = require('./src/storage'); var app = express(); app.use(express.static(__dirname + '/resources/public')); -app.get('/:year/:month/:day/:title', function (req, res) { - var params = req.params; - var id = params.year + "/" + params.month + "/" + params.day + "/" + params.title; - res.send("opening note " + id); +app.get('/new', function (req, res) { + res.send("opening new note mask") }); -app.get('/:link', function (req, res) { - +app.get(/(.*)\??.*/, function (req, res) { + var link = req.params["0"].slice(1); + storage.getNote(link).then(note => { + res.send("opening note " + note.text) + }); }); - var server = app.listen(3000, function () { console.log('NoteHub server listening on port %s', server.address().port); -}); \ No newline at end of file +}); diff --git a/src/migrate.js b/src/migrate.js index 6d426f7..bbbf959 100644 --- a/src/migrate.js +++ b/src/migrate.js @@ -13,7 +13,7 @@ var sequelize = new Sequelize('database', null, null, { }); var Note = sequelize.define('Note', { - id: { type: Sequelize.STRING, 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 }, @@ -22,14 +22,14 @@ var Note = sequelize.define('Note', { views: Sequelize.INTEGER, }); -var Shortcut = sequelize.define('Shortcut', { +var Link = sequelize.define('Link', { id: { type: Sequelize.STRING, unique: true, primaryKey: true }, - lastResolution: { type: Sequelize.DATE, allowNull: true, defaultValue: null }, + lastUsage: { type: Sequelize.DATE, allowNull: true, defaultValue: null }, params: Sequelize.STRING }); -Note.hasMany(Shortcut); -Shortcut.belongsTo(Note); +Note.hasMany(Link); +Link.belongsTo(Note); sequelize.sync().then(function () { client.hgetall("note", function (err, notes) { @@ -48,7 +48,6 @@ sequelize.sync().then(function () { client.smembers(id + ":urls", function (err, links) { Note.create({ - id: id, text: notes[id], published: published[id] && new Date(published[id] * 1000) || new Date(), publisher: publisher[id].indexOf("NPY") == -1 && publisher[id] || "NoteHub", @@ -57,8 +56,8 @@ sequelize.sync().then(function () { views: views[id], }).then(note => { - links.forEach(shortcutId => { - client.hget("short-url", shortcutId, function (err, result) { + links.forEach(LinkId => { + client.hget("short-url", LinkId, function (err, result) { result = result.replace(/:([\w_-]+)\s/g, '"$1":'); @@ -69,22 +68,27 @@ sequelize.sync().then(function () { delete obj.day; delete obj.year; delete obj.month; - } catch (e) { return console.log("PARSE ERROR FOR", result) } - Shortcut.create({ - id: shortcutId, + Link.create({ + id: LinkId, params: Object.keys(obj).length == 0 ? null : JSON.stringify(obj) - }).then(shortcut => { + }).then(link => { - shortcut.setNote(note); - note.addShortcut(shortcut); + link.setNote(note); + note.addLink(link); - }) + }); }); }); + + Link.create({ id: id }).then(link => { + link.setNote(note); + note.addLink(link); + }); + }); }) }); diff --git a/src/storage.js b/src/storage.js new file mode 100644 index 0000000..79f0803 --- /dev/null +++ b/src/storage.js @@ -0,0 +1,33 @@ +var Sequelize = require('sequelize'); +var sequelize = new Sequelize('database', null, null, { + dialect: 'sqlite', + pool: { + max: 5, + min: 0, + idle: 10000 + }, + storage: 'database.sqlite' +}); + +var Note = sequelize.define('Note', { + 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 }, + 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 = linkId => Link.findById(linkId).then(link => { + return Note.findById(link.NoteId); +});