Move db schema to structure.sql

This commit is contained in:
Tarrgon
2026-06-05 12:46:26 -04:00
parent 39c7f35cf9
commit 148599dcf1
4 changed files with 116 additions and 108 deletions
+1 -1
View File
@@ -7,4 +7,4 @@ services:
- "8000:8000"
volumes:
- ./data:/app/data
- ./migrations:/app/migrations
- ./sql:/app/sql
+110
View File
@@ -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
View File
@@ -5,111 +5,7 @@ import { fileURLToPath } from 'url';
import { Message } from '../events';
import { AppealMessage, Ban, GithubUserMapping, GuildArraySetting, GuildSetting, GuildSettings, KnowledgebaseItem, LoggedMessage, Note, PrivateHelpTicket, TicketMessage, TicketPhrase } from '../types';
import { serializeMessage, wait } from '../utils';
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);
`;
import { readFileSync } from 'fs';
export const enum PrivateHelpTicketStatus {
OPEN = 0,
@@ -137,7 +33,9 @@ export class Database {
}
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');
}
@@ -146,7 +44,7 @@ export class Database {
const __dirname = dirname(fileURLToPath(import.meta.url));
await Database.db.migrate({
migrationsPath: path.join(__dirname, '..', '..', 'migrations')
migrationsPath: path.join(__dirname, '..', '..', 'sql', 'migrations')
});
console.log('Database migrations ran');