#68 proper db migrations
This commit is contained in:
parent
5acdfe0c07
commit
7aeb83fde3
|
@ -1,6 +1,8 @@
|
||||||
/data
|
/data
|
||||||
/locale/*/db.sqlite
|
/locale/*/db.sqlite
|
||||||
|
|
||||||
|
/db.sqlite
|
||||||
|
|
||||||
/daemonise.json
|
/daemonise.json
|
||||||
/daemonise.log
|
/daemonise.log
|
||||||
|
|
||||||
|
|
2
Makefile
2
Makefile
|
@ -1,5 +1,6 @@
|
||||||
install:
|
install:
|
||||||
yarn
|
yarn
|
||||||
|
node server/migrate.js
|
||||||
|
|
||||||
run:
|
run:
|
||||||
yarn dev
|
yarn dev
|
||||||
|
@ -12,6 +13,7 @@ stop:
|
||||||
|
|
||||||
deploy: install
|
deploy: install
|
||||||
yarn build
|
yarn build
|
||||||
|
node server/migrate.js
|
||||||
|
|
||||||
switch:
|
switch:
|
||||||
-rm data
|
-rm data
|
||||||
|
|
|
@ -0,0 +1,19 @@
|
||||||
|
-- Up
|
||||||
|
|
||||||
|
CREATE TABLE nouns (
|
||||||
|
id TEXT NOT NULL PRIMARY KEY,
|
||||||
|
masc TEXT NOT NULL,
|
||||||
|
fem TEXT NOT NULL,
|
||||||
|
neutr TEXT NOT NULL,
|
||||||
|
mascPl TEXT NOT NULL,
|
||||||
|
femPl TEXT NOT NULL,
|
||||||
|
neutrPl TEXT NOT NULL,
|
||||||
|
approved INTEGER NOT NULL,
|
||||||
|
base_id TEXT
|
||||||
|
);
|
||||||
|
|
||||||
|
INSERT INTO nouns VALUES ('01EEKD4RYFWXG63Y563HF0RP56', 'pan', 'pani', 'panu|państwo', 'panowie', 'panie', 'państwo', 1, null);
|
||||||
|
|
||||||
|
-- Down
|
||||||
|
|
||||||
|
DROP TABLE nouns;
|
|
@ -8,7 +8,7 @@
|
||||||
<section>
|
<section>
|
||||||
<T>nouns.intro</T>
|
<T>nouns.intro</T>
|
||||||
|
|
||||||
<Share :title="$t('nouns.headerLonger')"/>
|
<Share :title="$t('nouns.headerLong')"/>
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
<Separator icon="book-open"/>
|
<Separator icon="book-open"/>
|
||||||
|
|
|
@ -0,0 +1,7 @@
|
||||||
|
const sqlite = require('sqlite');
|
||||||
|
const sqlite3 = require('sqlite3');
|
||||||
|
|
||||||
|
module.exports = _ => sqlite.open({
|
||||||
|
filename: __dirname + '/../db.sqlite',
|
||||||
|
driver: sqlite3.Database,
|
||||||
|
});
|
|
@ -1,35 +0,0 @@
|
||||||
const sqlite = require('sqlite');
|
|
||||||
const sqlite3 = require('sqlite3');
|
|
||||||
const ulid = require('ulid').ulid;
|
|
||||||
|
|
||||||
const fixtures = [
|
|
||||||
['pan', 'pani', 'panu|państwo', 'panowie', 'panie', 'państwo'],
|
|
||||||
['ojciec', 'matka', 'rodzic', 'ojcowie', 'matki', 'rodzice'],
|
|
||||||
['filolog', 'filolożka', 'filologum', 'filologowie', 'filolożki', 'filologa'],
|
|
||||||
];
|
|
||||||
|
|
||||||
async function initDb() {
|
|
||||||
const db = await sqlite.open({
|
|
||||||
filename: __dirname + '/../data/db.sqlite',
|
|
||||||
driver: sqlite3.Database,
|
|
||||||
});
|
|
||||||
|
|
||||||
await db.exec(`DROP TABLE IF EXISTS nouns`);
|
|
||||||
await db.exec(`CREATE TABLE nouns (
|
|
||||||
id TEXT NOT NULL PRIMARY KEY,
|
|
||||||
masc TEXT NOT NULL,
|
|
||||||
fem TEXT NOT NULL,
|
|
||||||
neutr TEXT NOT NULL,
|
|
||||||
mascPl TEXT NOT NULL,
|
|
||||||
femPl TEXT NOT NULL,
|
|
||||||
neutrPl TEXT NOT NULL,
|
|
||||||
approved INTEGER NOT NULL,
|
|
||||||
base_id TEXT
|
|
||||||
)`);
|
|
||||||
|
|
||||||
for (let fixture of fixtures) {
|
|
||||||
await db.get('INSERT OR REPLACE INTO nouns VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)', ulid(), ...fixture, 1, null);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
initDb();
|
|
|
@ -0,0 +1,8 @@
|
||||||
|
const dbConnection = require('./db');
|
||||||
|
|
||||||
|
async function migrate() {
|
||||||
|
const db = await dbConnection();
|
||||||
|
await db.migrate({migrationsPath: __dirname + '/../migrations'})
|
||||||
|
}
|
||||||
|
|
||||||
|
migrate();
|
|
@ -1,13 +1,9 @@
|
||||||
const sqlite = require('sqlite');
|
const dbConnection = require('./db');
|
||||||
const sqlite3 = require('sqlite3');
|
|
||||||
const mailer = require('mailer');
|
const mailer = require('mailer');
|
||||||
require('dotenv').config({ path:__dirname + '/../.env' });
|
require('dotenv').config({ path:__dirname + '/../.env' });
|
||||||
|
|
||||||
async function notify() {
|
async function notify() {
|
||||||
const db = await sqlite.open({
|
const db = await dbConnection();
|
||||||
filename: __dirname + '/../data/db.sqlite',
|
|
||||||
driver: sqlite3.Database,
|
|
||||||
});
|
|
||||||
|
|
||||||
const awaitingModeration = (await db.get(`SELECT count(*) as c FROM nouns WHERE approved = 0`)).c;
|
const awaitingModeration = (await db.get(`SELECT count(*) as c FROM nouns WHERE approved = 0`)).c;
|
||||||
if (!awaitingModeration) {
|
if (!awaitingModeration) {
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
const sqlite = require('sqlite');
|
const dbConnection = require('./db');
|
||||||
const sqlite3 = require('sqlite3');
|
|
||||||
const SQL = require('sql-template-strings');
|
const SQL = require('sql-template-strings');
|
||||||
import { ulid } from 'ulid'
|
import { ulid } from 'ulid'
|
||||||
|
|
||||||
|
@ -64,10 +63,7 @@ const isTroll = (body) => {
|
||||||
}
|
}
|
||||||
|
|
||||||
export default async function (req, res, next) {
|
export default async function (req, res, next) {
|
||||||
const db = await sqlite.open({
|
const db = await dbConnection();
|
||||||
filename: __dirname + '/../data/db.sqlite',
|
|
||||||
driver: sqlite3.Database,
|
|
||||||
});
|
|
||||||
|
|
||||||
const [url, queryString] = req.url.split('?');
|
const [url, queryString] = req.url.split('?');
|
||||||
const query = parseQuery(queryString || '');
|
const query = parseQuery(queryString || '');
|
||||||
|
|
Reference in New Issue