"main": "index.js", | "main": "index.js", | ||||
"scripts": { | "scripts": { | ||||
"test": "echo \"Error: no test specified\" && exit 1", | "test": "echo \"Error: no test specified\" && exit 1", | ||||
"start": "node index.js" | |||||
"start": "node index.js", | |||||
"setup": "node scripts/setup.js", | |||||
"reset": "node scripts/reset.js" | |||||
}, | }, | ||||
"author": { | "author": { | ||||
"name": "Martin Dørum Nygaard", | "name": "Martin Dørum Nygaard", |
var fs = require("fs"); | |||||
var pg = require("pg"); | |||||
var conf = JSON.parse(fs.readFileSync("./conf.json")); | |||||
var sql = fs.readFileSync("sql/reset.sql", "utf8"); | |||||
var client = new pg.Client( | |||||
"postgres://"+ | |||||
conf.db.user+":"+ | |||||
conf.db.pass+"@"+ | |||||
conf.db.host+"/"+ | |||||
conf.db.database | |||||
); | |||||
client.connect(function(err) { | |||||
if (err) { | |||||
return console.log("Couldn't connect: "+err); | |||||
process.exit(); | |||||
} | |||||
client.query(sql, function(err, res) { | |||||
if (err) { | |||||
console.log("Error running query: "+err); | |||||
} else { | |||||
console.log("Database reset."); | |||||
} | |||||
process.exit(); | |||||
}); | |||||
}); |
var fs = require("fs"); | |||||
var pg = require("pg"); | |||||
var conf = JSON.parse(fs.readFileSync("./conf.json")); | |||||
var sql = fs.readFileSync("sql/setup.sql", "utf8"); | |||||
var client = new pg.Client( | |||||
"postgres://"+ | |||||
conf.db.user+":"+ | |||||
conf.db.pass+"@"+ | |||||
conf.db.host+"/"+ | |||||
conf.db.database | |||||
); | |||||
client.connect(function(err) { | |||||
if (err) { | |||||
console.log("Couldn't connect: "+err); | |||||
console.log("Make sure that the database exists."); | |||||
process.exit(); | |||||
} | |||||
client.query(sql, function(err, res) { | |||||
if (err) { | |||||
console.log("Error running query: "+err); | |||||
console.log("Make sure that the database is empty."); | |||||
} else { | |||||
console.log("Database set up."); | |||||
} | |||||
process.exit(); | |||||
}); | |||||
}); |
DROP TABLE IF EXISTS users CASCADE; | |||||
DROP TABLE IF EXISTS collections CASCADE; | |||||
DROP TABLE IF EXISTS images CASCADE; |
username VARCHAR(64) UNIQUE NOT NULL, | username VARCHAR(64) UNIQUE NOT NULL, | ||||
pass_hash CHAR(128) NOT NULL, | pass_hash CHAR(128) NOT NULL, | ||||
date_created TIMESTAMP WITHOUT TIME ZONE NOT NULL DEFAULT NOW() | date_created TIMESTAMP WITHOUT TIME ZONE NOT NULL DEFAULT NOW() | ||||
) | |||||
); | |||||
CREATE TABLE collections ( | CREATE TABLE collections ( | ||||
id SERIAL PRIMARY KEY, | id SERIAL PRIMARY KEY, | ||||
name VARCHAR(64), | name VARCHAR(64), | ||||
user_id INTEGER NOT NULL REFERENCES users(id) ON DELETE CASCADE | user_id INTEGER NOT NULL REFERENCES users(id) ON DELETE CASCADE | ||||
) | |||||
); | |||||
CREATE TABLE images ( | CREATE TABLE images ( | ||||
id SERIAL PRIMARY KEY, | id SERIAL PRIMARY KEY, | ||||
extension VARCHAR(16) NOT NULL, | extension VARCHAR(16) NOT NULL, | ||||
collection_id INTEGER NOT NULL REFERENCES collections(id) ON DELETE CASCADE | collection_id INTEGER NOT NULL REFERENCES collections(id) ON DELETE CASCADE | ||||
) | |||||
); |