Move db schema to structure.sql
This commit is contained in:
+1
-1
@@ -7,4 +7,4 @@ services:
|
|||||||
- "8000:8000"
|
- "8000:8000"
|
||||||
volumes:
|
volumes:
|
||||||
- ./data:/app/data
|
- ./data:/app/data
|
||||||
- ./migrations:/app/migrations
|
- ./sql:/app/sql
|
||||||
|
|||||||
@@ -0,0 +1,110 @@
|
|||||||
|
CREATE TABLE
|
||||||
|
IF NOT EXISTS discord_names (
|
||||||
|
id INTEGER PRIMARY KEY,
|
||||||
|
user_id INTEGER NOT NULL,
|
||||||
|
discord_id TEXT NOT NULL,
|
||||||
|
discord_username TEXT NOT NULL,
|
||||||
|
added_on datetime NOT NULL DEFAULT (datetime ('now', 'localtime'))
|
||||||
|
);
|
||||||
|
|
||||||
|
CREATE TABLE
|
||||||
|
IF NOT EXISTS settings (
|
||||||
|
guild_id TEXT PRIMARY KEY,
|
||||||
|
general_chat_id TEXT,
|
||||||
|
new_member_channel_id TEXT,
|
||||||
|
tickets_channel_id TEXT,
|
||||||
|
event_logs_channel_id TEXT,
|
||||||
|
discord_logs_channel_id TEXT,
|
||||||
|
audit_logs_channel_id TEXT,
|
||||||
|
voice_logs_channel_id TEXT,
|
||||||
|
admin_role_id TEXT,
|
||||||
|
private_help_role_id TEXT,
|
||||||
|
devwatch_role_id TEXT,
|
||||||
|
staff_categories TEXT,
|
||||||
|
safe_channels TEXT,
|
||||||
|
link_skip_channels TEXT,
|
||||||
|
github_release_channel TEXT,
|
||||||
|
moderator_channel_id TEXT,
|
||||||
|
private_help_channel_id TEXT
|
||||||
|
);
|
||||||
|
|
||||||
|
CREATE TABLE
|
||||||
|
IF NOT EXISTS messages (
|
||||||
|
id TEXT PRIMARY KEY ON CONFLICT REPLACE,
|
||||||
|
author_id TEXT NOT NULL,
|
||||||
|
author_name TEXT NOT NULL,
|
||||||
|
channel_id TEXT NOT NULL,
|
||||||
|
attachments TEXT NOT NULL,
|
||||||
|
stickers TEXT NOT NULL,
|
||||||
|
content TEXT NOT NULL
|
||||||
|
);
|
||||||
|
|
||||||
|
CREATE INDEX IF NOT EXISTS index_authors ON messages (author_id);
|
||||||
|
|
||||||
|
CREATE INDEX IF NOT EXISTS index_channels ON messages (channel_id);
|
||||||
|
|
||||||
|
CREATE TABLE
|
||||||
|
IF NOT EXISTS tickets (id INTEGER PRIMARY KEY, message_id TEXT NOT NULL);
|
||||||
|
|
||||||
|
CREATE TABLE
|
||||||
|
IF NOT EXISTS ticket_phrases (
|
||||||
|
id INTEGER PRIMARY KEY,
|
||||||
|
user_id TEXT NOT NULL,
|
||||||
|
phrase TEXT NOT NULL
|
||||||
|
);
|
||||||
|
|
||||||
|
CREATE TABLE
|
||||||
|
IF NOT EXISTS notes (
|
||||||
|
id INTEGER PRIMARY KEY,
|
||||||
|
user_id TEXT,
|
||||||
|
reason TEXT,
|
||||||
|
mod_id TEXT,
|
||||||
|
timestamp datetime NOT NULL DEFAULT (datetime ('now', 'localtime'))
|
||||||
|
);
|
||||||
|
|
||||||
|
CREATE INDEX IF NOT EXISTS index_user_ids ON notes (user_id);
|
||||||
|
|
||||||
|
CREATE TABLE
|
||||||
|
IF NOT EXISTS note_edits (
|
||||||
|
id INTEGER PRIMARY KEY,
|
||||||
|
note_id INTEGER,
|
||||||
|
mod_id TEXT,
|
||||||
|
previous_reason TEXT,
|
||||||
|
timestamp datetime NOT NULL DEFAULT (datetime ('now', 'localtime')),
|
||||||
|
FOREIGN KEY (note_id) REFERENCES notes (id)
|
||||||
|
);
|
||||||
|
|
||||||
|
CREATE TABLE
|
||||||
|
IF NOT EXISTS bans (
|
||||||
|
id INTEGER PRIMARY KEY,
|
||||||
|
user_id TEXT,
|
||||||
|
expires INTEGER,
|
||||||
|
expires_at datetime,
|
||||||
|
full_ban INTEGER
|
||||||
|
);
|
||||||
|
|
||||||
|
CREATE TABLE
|
||||||
|
IF NOT EXISTS github_user_mapping (
|
||||||
|
id INTEGER PRIMARY KEY,
|
||||||
|
discord_id TEXT,
|
||||||
|
github_username TEXT
|
||||||
|
);
|
||||||
|
|
||||||
|
CREATE TABLE
|
||||||
|
IF NOT EXISTS knowledgebase (
|
||||||
|
id INTEGER PRIMARY KEY,
|
||||||
|
guild_id TEXT NOT NULL,
|
||||||
|
name TEXT NOT NULL,
|
||||||
|
content TEXT NOT NULL
|
||||||
|
);
|
||||||
|
|
||||||
|
CREATE TABLE
|
||||||
|
IF NOT EXISTS private_help_tickets (
|
||||||
|
id INTEGER PRIMARY KEY,
|
||||||
|
thread_id TEXT NOT NULL,
|
||||||
|
user_id TEXT NOT NULL,
|
||||||
|
status INTEGER NOT NULL,
|
||||||
|
timestamp datetime NOT NULL DEFAULT (datetime ('now', 'localtime'))
|
||||||
|
);
|
||||||
|
|
||||||
|
CREATE INDEX IF NOT EXISTS index_timestamp ON private_help_tickets (timestamp);
|
||||||
+5
-107
@@ -5,111 +5,7 @@ import { fileURLToPath } from 'url';
|
|||||||
import { Message } from '../events';
|
import { Message } from '../events';
|
||||||
import { AppealMessage, Ban, GithubUserMapping, GuildArraySetting, GuildSetting, GuildSettings, KnowledgebaseItem, LoggedMessage, Note, PrivateHelpTicket, TicketMessage, TicketPhrase } from '../types';
|
import { AppealMessage, Ban, GithubUserMapping, GuildArraySetting, GuildSetting, GuildSettings, KnowledgebaseItem, LoggedMessage, Note, PrivateHelpTicket, TicketMessage, TicketPhrase } from '../types';
|
||||||
import { serializeMessage, wait } from '../utils';
|
import { serializeMessage, wait } from '../utils';
|
||||||
|
import { readFileSync } from 'fs';
|
||||||
const DB_SCHEMA = `
|
|
||||||
CREATE TABLE IF NOT EXISTS discord_names (
|
|
||||||
id INTEGER PRIMARY KEY,
|
|
||||||
user_id INTEGER NOT NULL,
|
|
||||||
discord_id TEXT NOT NULL,
|
|
||||||
discord_username TEXT NOT NULL,
|
|
||||||
added_on datetime NOT NULL DEFAULT (datetime('now', 'localtime'))
|
|
||||||
);
|
|
||||||
|
|
||||||
CREATE TABLE IF NOT EXISTS settings (
|
|
||||||
guild_id TEXT PRIMARY KEY,
|
|
||||||
general_chat_id TEXT,
|
|
||||||
new_member_channel_id TEXT,
|
|
||||||
tickets_channel_id TEXT,
|
|
||||||
event_logs_channel_id TEXT,
|
|
||||||
discord_logs_channel_id TEXT,
|
|
||||||
audit_logs_channel_id TEXT,
|
|
||||||
voice_logs_channel_id TEXT,
|
|
||||||
admin_role_id TEXT,
|
|
||||||
private_help_role_id TEXT,
|
|
||||||
devwatch_role_id TEXT,
|
|
||||||
staff_categories TEXT,
|
|
||||||
safe_channels TEXT,
|
|
||||||
link_skip_channels TEXT,
|
|
||||||
github_release_channel TEXT,
|
|
||||||
moderator_channel_id TEXT,
|
|
||||||
private_help_channel_id TEXT
|
|
||||||
);
|
|
||||||
|
|
||||||
CREATE TABLE IF NOT EXISTS messages (
|
|
||||||
id TEXT PRIMARY KEY ON CONFLICT REPLACE,
|
|
||||||
author_id TEXT NOT NULL,
|
|
||||||
author_name TEXT NOT NULL,
|
|
||||||
channel_id TEXT NOT NULL,
|
|
||||||
attachments TEXT NOT NULL,
|
|
||||||
stickers TEXT NOT NULL,
|
|
||||||
content TEXT NOT NULL
|
|
||||||
);
|
|
||||||
|
|
||||||
CREATE INDEX IF NOT EXISTS index_authors ON messages (author_id);
|
|
||||||
|
|
||||||
CREATE INDEX IF NOT EXISTS index_channels ON messages (channel_id);
|
|
||||||
|
|
||||||
CREATE TABLE IF NOT EXISTS tickets (
|
|
||||||
id INTEGER PRIMARY KEY,
|
|
||||||
message_id TEXT NOT NULL
|
|
||||||
);
|
|
||||||
|
|
||||||
CREATE TABLE IF NOT EXISTS ticket_phrases (
|
|
||||||
id INTEGER PRIMARY KEY,
|
|
||||||
user_id TEXT NOT NULL,
|
|
||||||
phrase TEXT NOT NULL
|
|
||||||
);
|
|
||||||
|
|
||||||
CREATE TABLE IF NOT EXISTS notes (
|
|
||||||
id INTEGER PRIMARY KEY,
|
|
||||||
user_id TEXT,
|
|
||||||
reason TEXT,
|
|
||||||
mod_id TEXT,
|
|
||||||
timestamp datetime NOT NULL DEFAULT (datetime('now', 'localtime'))
|
|
||||||
);
|
|
||||||
|
|
||||||
CREATE INDEX IF NOT EXISTS index_user_ids ON notes (user_id);
|
|
||||||
|
|
||||||
CREATE TABLE IF NOT EXISTS note_edits (
|
|
||||||
id INTEGER PRIMARY KEY,
|
|
||||||
note_id INTEGER,
|
|
||||||
mod_id TEXT,
|
|
||||||
previous_reason TEXT,
|
|
||||||
timestamp datetime NOT NULL DEFAULT (datetime('now', 'localtime')),
|
|
||||||
FOREIGN KEY(note_id) REFERENCES notes(id)
|
|
||||||
);
|
|
||||||
|
|
||||||
CREATE TABLE IF NOT EXISTS bans (
|
|
||||||
id INTEGER PRIMARY KEY,
|
|
||||||
user_id TEXT,
|
|
||||||
expires INTEGER,
|
|
||||||
expires_at datetime,
|
|
||||||
full_ban INTEGER
|
|
||||||
);
|
|
||||||
|
|
||||||
CREATE TABLE IF NOT EXISTS github_user_mapping (
|
|
||||||
id INTEGER PRIMARY KEY,
|
|
||||||
discord_id TEXT,
|
|
||||||
github_username TEXT
|
|
||||||
);
|
|
||||||
|
|
||||||
CREATE TABLE IF NOT EXISTS knowledgebase (
|
|
||||||
id INTEGER PRIMARY KEY,
|
|
||||||
guild_id TEXT NOT NULL,
|
|
||||||
name TEXT NOT NULL,
|
|
||||||
content TEXT NOT NULL
|
|
||||||
);
|
|
||||||
|
|
||||||
CREATE TABLE IF NOT EXISTS private_help_tickets (
|
|
||||||
id INTEGER PRIMARY KEY,
|
|
||||||
thread_id TEXT NOT NULL,
|
|
||||||
user_id TEXT NOT NULL,
|
|
||||||
status INTEGER NOT NULL,
|
|
||||||
timestamp datetime NOT NULL DEFAULT (datetime('now', 'localtime'))
|
|
||||||
);
|
|
||||||
|
|
||||||
CREATE INDEX IF NOT EXISTS index_timestamp ON private_help_tickets (timestamp);
|
|
||||||
`;
|
|
||||||
|
|
||||||
export const enum PrivateHelpTicketStatus {
|
export const enum PrivateHelpTicketStatus {
|
||||||
OPEN = 0,
|
OPEN = 0,
|
||||||
@@ -137,7 +33,9 @@ export class Database {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private static async ensure() {
|
private static async ensure() {
|
||||||
await Database.db.exec(DB_SCHEMA);
|
const __dirname = dirname(fileURLToPath(import.meta.url));
|
||||||
|
const schema = readFileSync(path.join(__dirname, '..', '..', 'sql', 'structure.sql'), { encoding: 'utf-8' });
|
||||||
|
await Database.db.exec(schema);
|
||||||
console.log('SQLite database ensured');
|
console.log('SQLite database ensured');
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -146,7 +44,7 @@ export class Database {
|
|||||||
|
|
||||||
const __dirname = dirname(fileURLToPath(import.meta.url));
|
const __dirname = dirname(fileURLToPath(import.meta.url));
|
||||||
await Database.db.migrate({
|
await Database.db.migrate({
|
||||||
migrationsPath: path.join(__dirname, '..', '..', 'migrations')
|
migrationsPath: path.join(__dirname, '..', '..', 'sql', 'migrations')
|
||||||
});
|
});
|
||||||
|
|
||||||
console.log('Database migrations ran');
|
console.log('Database migrations ran');
|
||||||
|
|||||||
Reference in New Issue
Block a user