diff options
-rw-r--r-- | package.json | 2 | ||||
-rw-r--r-- | src/index.js | 96 |
2 files changed, 43 insertions, 55 deletions
diff --git a/package.json b/package.json index f6d49a7..3f8c90c 100644 --- a/package.json +++ b/package.json @@ -15,7 +15,7 @@ "dependencies": { "handlebars": "^3.0.3", "hapi": "^8.8.1", - "hapi-postgres": "^1.0.2" + "pg": "^4.4.1" }, "devDependencies": { "mocha": "^2.2.5", diff --git a/src/index.js b/src/index.js index 6e7358a..9c1019e 100644 --- a/src/index.js +++ b/src/index.js @@ -4,6 +4,7 @@ var path = require('path'); // require external libs var Hapi = require('hapi'); +var pg = require('pg'); // require custom libs var utils = require('./utils'); @@ -14,6 +15,8 @@ server.connection({ port: process.env.PORT || 8000 }); +server.app.DB_URI = process.env.DATABASE_URL || 'postgres://postgres:postgres@127.0.0.1/solfege'; + server.views({ engines: { html: require('handlebars') @@ -21,82 +24,67 @@ server.views({ path: path.join(__dirname, 'templates') }); -server.register({ - register: require('hapi-postgres'), - options: { - uri: process.env.DATABASE_URL || 'postgres://postgres:postgres@127.0.0.1/solfege' - } -}, function(err) { - if (err) { - console.error('Failed to load hapi-postgres', err); - } -}); - server.method('search', function(query, next) { - var client = server.plugins['hapi-postgres'].client; - var done = server.plugins['hapi-postgres'].done; + return pg.connect(server.app.DB_URI, function(err, client, done) { + var norm = utils.normalize(query); - var norm = utils.normalize(query); - - var sql = 'SELECT title, artist_name FROM songs JOIN phrase_song ON (songs.song_id = phrase_song.song_id) WHERE phrase_song.phrase_id IN (SELECT phrase_id FROM phrases WHERE solfege LIKE \'%' + norm + '%\') GROUP BY songs.song_id;'; - return client.query(sql, function(err, results) { - done(); + var sql = 'SELECT title, artist_name FROM songs JOIN phrase_song ON (songs.song_id = phrase_song.song_id) WHERE phrase_song.phrase_id IN (SELECT phrase_id FROM phrases WHERE solfege LIKE \'%' + norm + '%\') GROUP BY songs.song_id;'; + client.query(sql, function(err, results) { + done(); - if (err) { - next(err); - } else { - next(null, results.rows); - } + if (err) { + next(err); + } else { + next(null, results.rows); + } + }); }); }); server.method('getSongsWithSimilarTitle', function(title, next) { - var client = server.plugins['hapi-postgres'].client; - var done = server.plugins['hapi-postgres'].done; - - var sql = 'SELECT song_id, title, artist_name FROM songs WHERE title @@ plainto_tsquery(\'' + title + '\');'; - return client.query(sql, function(err, results) { - done(); - if (err) { - next(err); - } else { - next(null, results.rows); - } + return pg.connect(server.app.DB_URI, function(err, client, done) { + var sql = 'SELECT song_id, title, artist_name FROM songs WHERE title @@ plainto_tsquery(\'' + title + '\');'; + client.query(sql, function(err, results) { + done(); + if (err) { + next(err); + } else { + next(null, results.rows); + } + }); }); }); server.method('addSongWithPhrase', function(options, next) { - var client = server.plugins['hapi-postgres'].client; - var done = server.plugins['hapi-postgres'].done; - if (!options.title || !options.artist_name || !options.solfege) { - done(); return next(new Error('Missing required title, artist_name, or solfege')); } options.solfege = utils.normalize(options.solfege); - var sql = 'INSERT INTO songs (title, artist_name) VALUES (\'' + options.title + '\', \'' + options.artist_name + '\'); INSERT INTO phrases (solfege) VALUES (\'' + options.solfege + '\'); INSERT INTO phrase_song (song_id, phrase_id) VALUES ((SELECT CURRVAL(\'songs_song_id_seq\')), (SELECT CURRVAL(\'phrases_phrase_id_seq\')));'; - return client.query(sql, function(err, results) { - done(); - if (err) { - next(err); - } else { - next(null); - } + + return pg.connect(server.app.DB_URI, function(err, client, done) { + var sql = 'INSERT INTO songs (title, artist_name) VALUES (\'' + options.title + '\', \'' + options.artist_name + '\'); INSERT INTO phrases (solfege) VALUES (\'' + options.solfege + '\'); INSERT INTO phrase_song (song_id, phrase_id) VALUES ((SELECT CURRVAL(\'songs_song_id_seq\')), (SELECT CURRVAL(\'phrases_phrase_id_seq\')));'; + client.query(sql, function(err, results) { + done(); + if (err) { + next(err); + } else { + next(null); + } + }); }); }); server.method('addPhraseToSong', function(options, next) { - var client = server.plugins['hapi-postgres'].client; - var done = server.plugins['hapi-postgres'].done; - if (!options.song_id || !options.phrase) { - done(); return next(new Error('Missing required song_id or phrase')); - } else { - var solfege = utils.normalize(options.phrase); + } + + var solfege = utils.normalize(options.phrase); + + return pg.connect(server.app.DB_URI, function(err, client, done) { var sql = 'INSERT INTO phrases (solfege) VALUES (\'' + solfege + '\'); INSERT INTO phrase_song (song_id, phrase_id) VALUES (' + options.song_id + ', (SELECT phrase_id FROM phrases WHERE solfege=\'' + solfege + '\'));'; - return client.query(sql, function(err, results) { + client.query(sql, function(err, results) { done(); if (err) { @@ -105,7 +93,7 @@ server.method('addPhraseToSong', function(options, next) { next(null); } }); - } + }); }); // search results |