Skip to content

Commit

Permalink
Add initial migration
Browse files Browse the repository at this point in the history
  • Loading branch information
holzmaster committed Mar 26, 2024
1 parent 567e6ee commit 763662d
Show file tree
Hide file tree
Showing 2 changed files with 225 additions and 2 deletions.
4 changes: 2 additions & 2 deletions src/app.ts
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,7 @@ console.log(

let botContext: BotContext;

log.info("Started.");
log.info("Bot starting up...");
const config = conf.getConfig();

if (!config.auth.bot_token) {
Expand Down Expand Up @@ -204,7 +204,7 @@ const leetTask = async () => {

login().then(
client => {
log.info(`Bot logged in as ${client.user.tag}`);
log.info(`Logged in as ${client.user.tag}`);
log.info(
`Got ${client.users.cache.size} users, in ${client.channels.cache.size} channels of ${client.guilds.cache.size} guilds`,
);
Expand Down
223 changes: 223 additions & 0 deletions src/storage/migrations/00-initial.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,223 @@
import { sql, type Kysely } from "kysely";

// biome-ignore lint/suspicious/noExplicitAny: needed
export async function up(db: Kysely<any>): Promise<void> {
// Initial schema that originated from sequelize
// obtained from production database using ".schema" command
// Just copied the raw SQL instead of using kysely's syntax.
// Only added "IF NOT EXISTS", so users with a pre-existing database won't be fucked up
// *Note*: Somehow the DB driver only executes the first statement if using a large string. That's why we have created multiple statements that are awaited.
await sql`
CREATE TABLE IF NOT EXISTS FadingMessages (
id VARCHAR(36) PRIMARY KEY,
messageId VARCHAR(32),
channelId VARCHAR(32),
guildId VARCHAR(32),
beginTime DATETIME,
endTime DATETIME,
createdAt DATETIME NOT NULL,
updatedAt DATETIME NOT NULL
);
`.execute(db);
await sql`
CREATE TABLE IF NOT EXISTS AdditionalMessageData (
id VARCHAR(36) PRIMARY KEY,
messageId VARCHAR(32) NOT NULL,
channelId VARCHAR(32) NOT NULL,
guildId VARCHAR(32) NOT NULL,
customData TEXT DEFAULT '{}',
createdAt DATETIME NOT NULL,
updatedAt DATETIME NOT NULL
);
`.execute(db);
await sql`
CREATE TABLE IF NOT EXISTS GuildRagequits (
id VARCHAR(36) PRIMARY KEY,
guildId VARCHAR(32) NOT NULL,
userId VARCHAR(32) NOT NULL,
numRagequits INTEGER NOT NULL DEFAULT 0,
createdAt DATETIME NOT NULL,
updatedAt DATETIME NOT NULL
);
`.execute(db);
await sql`
CREATE TABLE IF NOT EXISTS Stempels (
id VARCHAR(36) PRIMARY KEY,
invitator VARCHAR(32) NOT NULL,
invitedMember VARCHAR(32) NOT NULL UNIQUE,
createdAt DATETIME NOT NULL,
updatedAt DATETIME NOT NULL
);
`.execute(db);
await sql`
CREATE TABLE IF NOT EXISTS Bans (
id VARCHAR(36) PRIMARY KEY,
userId VARCHAR(32) NOT NULL,
reason VARCHAR(255),
bannedUntil DATETIME,
isSelfBan TINYINT(1) NOT NULL,
createdAt DATETIME NOT NULL,
updatedAt DATETIME NOT NULL
);
`.execute(db);
await sql`
CREATE TABLE IF NOT EXISTS Birthdays (
id VARCHAR(36) PRIMARY KEY,
userId VARCHAR(32) NOT NULL UNIQUE,
day INTEGER NOT NULL,
month INTEGER NOT NULL,
createdAt DATETIME NOT NULL,
updatedAt DATETIME NOT NULL
);
`.execute(db);
await sql`
CREATE TABLE IF NOT EXISTS Penis (
id VARCHAR(36) PRIMARY KEY,
userId VARCHAR(32) NOT NULL,
measuredAt DATETIME,
size INTEGER NOT NULL,
createdAt DATETIME NOT NULL,
updatedAt DATETIME NOT NULL,
diameter INTEGER
);
`.execute(db);
await sql`
CREATE TABLE IF NOT EXISTS Nicknames (
id VARCHAR(36) PRIMARY KEY,
userId VARCHAR(32) NOT NULL,
nickName VARCHAR(32) NOT NULL,
createdAt DATETIME NOT NULL,
updatedAt DATETIME NOT NULL
);
`.execute(db);
await sql`
CREATE TABLE IF NOT EXISTS Boobs (
id VARCHAR(36) PRIMARY KEY,
userId VARCHAR(32) NOT NULL,
measuredAt DATETIME,
size INTEGER NOT NULL,
createdAt DATETIME NOT NULL,
updatedAt DATETIME NOT NULL
);
`.execute(db);
await sql`
CREATE TABLE IF NOT EXISTS AustrianTranslations (
id INTEGER PRIMARY KEY AUTOINCREMENT,
german VARCHAR(255) NOT NULL,
austrian VARCHAR(255) NOT NULL UNIQUE,
createdAt DATETIME NOT NULL,
updatedAt DATETIME NOT NULL
);
`.execute(db);
await sql`
CREATE TABLE IF NOT EXISTS Reminders (
id VARCHAR(36) PRIMARY KEY,
userId VARCHAR(32) NOT NULL,
remindAt DATETIME NOT NULL,
messageId VARCHAR(32) NULL,
channelId VARCHAR(32) NOT NULL,
guildId VARCHAR(32) NOT NULL,
createdAt DATETIME NOT NULL,
updatedAt DATETIME NOT NULL,
reminderNote VARCHAR(32) NULL
);
`.execute(db);
await sql`
CREATE TABLE IF NOT EXISTS EhrePoints (
id VARCHAR(36) PRIMARY KEY,
userId VARCHAR(32) NOT NULL UNIQUE,
points DOUBLE PRECISION NOT NULL,
createdAt DATETIME NOT NULL,
updatedAt DATETIME NOT NULL
);
`.execute(db);
await sql`
CREATE TABLE IF NOT EXISTS EhreVotes (
id VARCHAR(36) PRIMARY KEY,
userId VARCHAR(32) NOT NULL UNIQUE,
createdAt DATETIME NOT NULL,
updatedAt DATETIME NOT NULL
);
`.execute(db);
await sql`
CREATE TABLE IF NOT EXISTS WoisActions (
id VARCHAR(36) PRIMARY KEY,
messageId VARCHAR(32) NOT NULL UNIQUE,
reason VARCHAR(32) NOT NULL,
date DATETIME NOT NULL,
interestedUsers JSON,
createdAt DATETIME NOT NULL,
updatedAt DATETIME NOT NULL,
isWoisgangAction BOOLEAN
);
`.execute(db);
await sql`
CREATE TABLE IF NOT EXISTS SplidGroups (
id VARCHAR(36) PRIMARY KEY,
creatorId VARCHAR(32) NOT NULL,
guildId VARCHAR(32) NOT NULL,
groupCode VARCHAR(32) NOT NULL,
shortDescription VARCHAR(69) NOT NULL,
longDescription VARCHAR(1000),
createdAt DATETIME NOT NULL,
updatedAt DATETIME NOT NULL
);
`.execute(db);
await sql`
CREATE TABLE IF NOT EXISTS SplidLinks (
id VARCHAR(36) PRIMARY KEY,
guildId VARCHAR(32) NOT NULL,
discordUserId VARCHAR(32) NOT NULL,
externalSplidId VARCHAR(420) NOT NULL,
createdAt DATETIME NOT NULL,
updatedAt DATETIME NOT NULL
);
`.execute(db);
await sql`CREATE UNIQUE INDEX IF NOT EXISTS additional_message_data_guild_id_channel_id_message_id ON AdditionalMessageData (guildId, channelId, messageId);`.execute(
db,
);
await sql`CREATE UNIQUE INDEX IF NOT EXISTS guild_ragequits_guild_id_user_id ON GuildRagequits (guildId, userId);`.execute(
db,
);
await sql`CREATE UNIQUE INDEX IF NOT EXISTS bans_user_id ON Bans (userId);`.execute(
db,
);
await sql`CREATE INDEX IF NOT EXISTS bans_banned_until ON Bans (bannedUntil ASC);`.execute(
db,
);
await sql`CREATE INDEX IF NOT EXISTS penis_measured_at ON Penis (measuredAt ASC);`.execute(
db,
);
await sql`CREATE INDEX IF NOT EXISTS boobs_measured_at ON Boobs (measuredAt ASC);`.execute(
db,
);
await sql`CREATE UNIQUE INDEX IF NOT EXISTS austrian_translations_austrian ON AustrianTranslations (austrian);`.execute(
db,
);
await sql`CREATE INDEX IF NOT EXISTS austrian_translations_german ON AustrianTranslations (german);`.execute(
db,
);
await sql`CREATE INDEX IF NOT EXISTS reminders_remind_at ON Reminders (remindAt ASC);`.execute(
db,
);
await sql`CREATE INDEX IF NOT EXISTS splid_groups_guild_id ON SplidGroups (guildId);`.execute(
db,
);
await sql`CREATE UNIQUE INDEX IF NOT EXISTS splid_groups_short_description ON SplidGroups (shortDescription);`.execute(
db,
);
await sql`CREATE UNIQUE INDEX IF NOT EXISTS splid_groups_group_code_guild_id ON SplidGroups (groupCode, guildId);`.execute(
db,
);
await sql`CREATE INDEX IF NOT EXISTS splid_links_external_splid_id_discord_user_id ON SplidLinks (externalSplidId, discordUserId);`.execute(
db,
);
await sql`CREATE UNIQUE INDEX IF NOT EXISTS splid_links_guild_id_discord_user_id_external_splid_id ON SplidLinks (guildId, discordUserId, externalSplidId); `.execute(
db,
);
}

// biome-ignore lint/suspicious/noExplicitAny: needed
export async function down(db: Kysely<any>): Promise<void> {
throw new Error("Not supported lol");
}

0 comments on commit 763662d

Please sign in to comment.