diff options
author | Julien Dessaux | 2022-10-28 23:51:18 +0200 |
---|---|---|
committer | Julien Dessaux | 2022-10-28 23:51:18 +0200 |
commit | 4c42c4fda1616f2fc96bb566e1e2200ea756f0d5 (patch) | |
tree | de3e1e095b3e23523fbb837cb5dda613ecdb479c /database | |
parent | Began implementing middlewares, session and auth (diff) | |
download | jeux-de-mots-4c42c4fda1616f2fc96bb566e1e2200ea756f0d5.tar.gz jeux-de-mots-4c42c4fda1616f2fc96bb566e1e2200ea756f0d5.tar.bz2 jeux-de-mots-4c42c4fda1616f2fc96bb566e1e2200ea756f0d5.zip |
Added a basic database schema and migration function
Diffstat (limited to 'database')
-rw-r--r-- | database/000_init.sql | 10 | ||||
-rw-r--r-- | database/db.js | 26 |
2 files changed, 36 insertions, 0 deletions
diff --git a/database/000_init.sql b/database/000_init.sql new file mode 100644 index 0000000..b9f4f23 --- /dev/null +++ b/database/000_init.sql @@ -0,0 +1,10 @@ +CREATE TABLE schema_version ( + version INTEGER NOT NULL +); +CREATE TABLE users ( + id INTEGER PRIMARY KEY, + username TEXT NOT NULL UNIQUE, + hash TEXT, + email TEXT, + created_at DATE DEFAULT (datetime('now')) +); diff --git a/database/db.js b/database/db.js new file mode 100644 index 0000000..d849429 --- /dev/null +++ b/database/db.js @@ -0,0 +1,26 @@ +import fs from "fs"; +import Database from "better-sqlite3"; + +const allMigrations = [ + "database/000_init.sql", +]; + +const db = new Database("jdm.db"); +db.pragma("foreign_keys = ON"); + +db.transaction(function migrate() { + let version; + try { + version = db.prepare("SELECT version FROM schema_version").all()[0].version; + } catch { + version = 0; + } + if (version === allMigrations.length) return; + while (version < allMigrations.length) { + db.exec(fs.readFileSync(allMigrations[version], "utf8")); + version++; + } + db.exec(`DELETE FROM schema_version; INSERT INTO schema_version (version) VALUES (${version});`); +})(); + +export default db; |