set up foreign keys properly
This commit is contained in:
parent
d50b335ccd
commit
f585788a7a
|
@ -0,0 +1,201 @@
|
||||||
|
-- Up
|
||||||
|
|
||||||
|
PRAGMA foreign_keys=off;
|
||||||
|
|
||||||
|
ALTER TABLE users RENAME TO _users_old;
|
||||||
|
create table users (
|
||||||
|
id TEXT not null
|
||||||
|
primary key,
|
||||||
|
username TEXT not null,
|
||||||
|
email TEXT not null,
|
||||||
|
roles TEXT not null,
|
||||||
|
avatarSource TEXT,
|
||||||
|
bannedReason TEXT,
|
||||||
|
suspiciousChecked TINYINT default 0 not null,
|
||||||
|
usernameNorm TEXT,
|
||||||
|
bannedTerms TEXT default NULL,
|
||||||
|
bannedBy TEXT default NULL,
|
||||||
|
lastActive INTEGER,
|
||||||
|
banSnapshot TEXT
|
||||||
|
);
|
||||||
|
INSERT INTO users SELECT * FROM _users_old;
|
||||||
|
DROP TABLE _users_old;
|
||||||
|
|
||||||
|
ALTER TABLE authenticators RENAME TO _authenticators_old;
|
||||||
|
create table authenticators (
|
||||||
|
id TEXT not null primary key,
|
||||||
|
userId TEXT
|
||||||
|
references users on delete cascade,
|
||||||
|
type TEXT not null,
|
||||||
|
payload TEXT not null,
|
||||||
|
validUntil INTEGER
|
||||||
|
);
|
||||||
|
INSERT INTO authenticators SELECT * FROM _authenticators_old;
|
||||||
|
DROP TABLE _authenticators_old;
|
||||||
|
|
||||||
|
ALTER TABLE inclusive RENAME TO _inclusive_old;
|
||||||
|
create table inclusive
|
||||||
|
(
|
||||||
|
id TEXT not null
|
||||||
|
primary key,
|
||||||
|
insteadOf TEXT not null,
|
||||||
|
say TEXT not null,
|
||||||
|
because TEXT not null,
|
||||||
|
locale TEXT not null,
|
||||||
|
approved INTEGER not null,
|
||||||
|
base_id TEXT,
|
||||||
|
author_id TEXT
|
||||||
|
references users on delete set null,
|
||||||
|
categories TEXT,
|
||||||
|
links TEXT,
|
||||||
|
deleted INTEGER default 0 not null
|
||||||
|
);
|
||||||
|
INSERT INTO inclusive SELECT * FROM _inclusive_old;
|
||||||
|
DROP TABLE _inclusive_old;
|
||||||
|
|
||||||
|
ALTER TABLE names RENAME TO _names_old;
|
||||||
|
create table names
|
||||||
|
(
|
||||||
|
id TEXT not null
|
||||||
|
primary key,
|
||||||
|
name TEXT not null,
|
||||||
|
locale TEXT not null,
|
||||||
|
origin TEXT,
|
||||||
|
meaning TEXT,
|
||||||
|
usage TEXT,
|
||||||
|
legally TEXT,
|
||||||
|
pros TEXT,
|
||||||
|
cons TEXT,
|
||||||
|
notablePeople TEXT,
|
||||||
|
links TEXT,
|
||||||
|
namedays TEXT,
|
||||||
|
namedaysComment TEXT,
|
||||||
|
deleted INTEGER default 0 not null,
|
||||||
|
approved INTEGER default 0 not null,
|
||||||
|
base_id TEXT,
|
||||||
|
author_id TEXT
|
||||||
|
);
|
||||||
|
INSERT INTO names SELECT * FROM _names_old;
|
||||||
|
DROP TABLE _names_old;
|
||||||
|
|
||||||
|
ALTER TABLE nouns RENAME TO _nouns_old;
|
||||||
|
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,
|
||||||
|
locale TEXT default 'pl' not null,
|
||||||
|
author_id TEXT
|
||||||
|
references users on delete set null,
|
||||||
|
deleted INTEGER default 0 not null,
|
||||||
|
sources TEXT default NULL
|
||||||
|
);
|
||||||
|
INSERT INTO nouns SELECT * FROM _nouns_old;
|
||||||
|
DROP TABLE _nouns_old;
|
||||||
|
|
||||||
|
ALTER TABLE profiles RENAME TO _profiles_old;
|
||||||
|
create table profiles
|
||||||
|
(
|
||||||
|
id TEXT not null
|
||||||
|
primary key,
|
||||||
|
userId TEXT not null
|
||||||
|
references users on delete cascade,
|
||||||
|
locale TEXT not null,
|
||||||
|
names TEXT not null,
|
||||||
|
pronouns TEXT not null,
|
||||||
|
description TEXT not null,
|
||||||
|
birthday TEXT,
|
||||||
|
links TEXT not null,
|
||||||
|
flags TEXT not null,
|
||||||
|
words TEXT not null,
|
||||||
|
active INTEGER not null,
|
||||||
|
teamName TEXT default NULL,
|
||||||
|
footerName TEXT default NULL,
|
||||||
|
footerAreas TEXT default NULL,
|
||||||
|
customFlags TEXT default '{}' not null,
|
||||||
|
card TEXT,
|
||||||
|
credentials TEXT default NULL,
|
||||||
|
credentialsLevel INTEGER default NULL,
|
||||||
|
credentialsName INTEGER default NULL,
|
||||||
|
cardDark TEXT,
|
||||||
|
unique (userId, locale)
|
||||||
|
);
|
||||||
|
INSERT INTO profiles SELECT * FROM _profiles_old;
|
||||||
|
DROP TABLE _profiles_old;
|
||||||
|
|
||||||
|
ALTER TABLE reports RENAME TO _reports_old;
|
||||||
|
create table reports
|
||||||
|
(
|
||||||
|
id TEXT not null
|
||||||
|
primary key,
|
||||||
|
userId TEXT
|
||||||
|
references users on delete cascade ,
|
||||||
|
reporterId TEXT
|
||||||
|
references users on delete set null,
|
||||||
|
comment TEXT not null,
|
||||||
|
isAutomatic INTEGER,
|
||||||
|
isHandled INTEGER,
|
||||||
|
snapshot TEXT
|
||||||
|
);
|
||||||
|
INSERT INTO reports SELECT * FROM _reports_old;
|
||||||
|
DROP TABLE _reports_old;
|
||||||
|
|
||||||
|
ALTER TABLE sources RENAME TO _sources_old;
|
||||||
|
create table sources
|
||||||
|
(
|
||||||
|
id TEXT not null
|
||||||
|
primary key,
|
||||||
|
locale TEXT not null,
|
||||||
|
pronouns TEXT not null,
|
||||||
|
type TEXT not null,
|
||||||
|
author TEXT,
|
||||||
|
title TEXT not null,
|
||||||
|
extra TEXT,
|
||||||
|
year INTEGER,
|
||||||
|
fragments TEXT not null,
|
||||||
|
comment TEXT,
|
||||||
|
link TEXT,
|
||||||
|
submitter_id TEXT
|
||||||
|
references users on delete set null,
|
||||||
|
approved INTEGER default 0,
|
||||||
|
deleted INTEGER default 0,
|
||||||
|
base_id TEXT,
|
||||||
|
key TEXT default NULL,
|
||||||
|
images TEXT default NULL
|
||||||
|
);
|
||||||
|
INSERT INTO sources SELECT * FROM _sources_old;
|
||||||
|
DROP TABLE _sources_old;
|
||||||
|
|
||||||
|
ALTER TABLE terms RENAME TO _terms_old;
|
||||||
|
create table terms
|
||||||
|
(
|
||||||
|
id TEXT not null
|
||||||
|
primary key,
|
||||||
|
term TEXT not null,
|
||||||
|
original TEXT,
|
||||||
|
definition TEXT not null,
|
||||||
|
locale TEXT not null,
|
||||||
|
approved INTEGER not null,
|
||||||
|
base_id TEXT,
|
||||||
|
author_id TEXT
|
||||||
|
references users on delete set null,
|
||||||
|
deleted INTEGER default 0 not null,
|
||||||
|
flags TEXT default '[]' not null,
|
||||||
|
category TEXT default NULL,
|
||||||
|
images TEXT default '' not null,
|
||||||
|
key TEXT
|
||||||
|
);
|
||||||
|
INSERT INTO terms SELECT * FROM _terms_old;
|
||||||
|
DROP TABLE _terms_old;
|
||||||
|
|
||||||
|
PRAGMA foreign_keys=on;
|
||||||
|
|
||||||
|
-- Down
|
||||||
|
|
|
@ -403,8 +403,7 @@ router.post('/user/delete', handleErrorAsync(async (req, res) => {
|
||||||
return res.status(401).json({error: 'Unauthorised'});
|
return res.status(401).json({error: 'Unauthorised'});
|
||||||
}
|
}
|
||||||
|
|
||||||
await req.db.get(SQL`DELETE FROM profiles WHERE userId = ${req.user.id}`)
|
await req.db.get('PRAGMA foreign_keys = ON')
|
||||||
await req.db.get(SQL`DELETE FROM authenticators WHERE userId = ${req.user.id}`)
|
|
||||||
await req.db.get(SQL`DELETE FROM users WHERE id = ${req.user.id}`)
|
await req.db.get(SQL`DELETE FROM users WHERE id = ${req.user.id}`)
|
||||||
|
|
||||||
return res.json(true);
|
return res.json(true);
|
||||||
|
|
Reference in New Issue