From ae6ff0c228b744ab5614f6f1b0dba529b4b5456f Mon Sep 17 00:00:00 2001 From: eric Date: Mon, 23 Feb 2026 22:58:54 +0100 Subject: [PATCH] feat: run migrations --- bun.lockb | Bin 101763 -> 108200 bytes drizzle.config.ts | 2 +- package.json | 4 +- src/database/drizzle/0000_fast_lester.sql | 41 - src/database/drizzle/0001_rich_star_brand.sql | 16 - src/database/drizzle/0002_robust_saracen.sql | 29 - src/database/drizzle/0003_silky_sauron.sql | 20 - src/database/drizzle/0004_add_gif_search.sql | 2 - .../drizzle/0005_add_channel_restriction.sql | 3 - src/database/drizzle/0006_add_image_gen.sql | 3 - .../migration.sql | 84 ++ .../snapshot.json | 784 ++++++++++++++++++ src/database/drizzle/meta/0000_snapshot.json | 281 ------- src/database/drizzle/meta/0001_snapshot.json | 285 ------- src/database/drizzle/meta/0002_snapshot.json | 484 ----------- src/database/drizzle/meta/0003_snapshot.json | 560 ------------- src/database/drizzle/meta/0004_snapshot.json | 519 ------------ src/database/drizzle/meta/_journal.json | 55 -- src/database/migrate.ts | 6 +- src/index.ts | 4 + 20 files changed, 879 insertions(+), 2303 deletions(-) delete mode 100644 src/database/drizzle/0000_fast_lester.sql delete mode 100644 src/database/drizzle/0001_rich_star_brand.sql delete mode 100644 src/database/drizzle/0002_robust_saracen.sql delete mode 100644 src/database/drizzle/0003_silky_sauron.sql delete mode 100644 src/database/drizzle/0004_add_gif_search.sql delete mode 100644 src/database/drizzle/0005_add_channel_restriction.sql delete mode 100644 src/database/drizzle/0006_add_image_gen.sql create mode 100644 src/database/drizzle/20260223215824_parched_albert_cleary/migration.sql create mode 100644 src/database/drizzle/20260223215824_parched_albert_cleary/snapshot.json delete mode 100644 src/database/drizzle/meta/0000_snapshot.json delete mode 100644 src/database/drizzle/meta/0001_snapshot.json delete mode 100644 src/database/drizzle/meta/0002_snapshot.json delete mode 100644 src/database/drizzle/meta/0003_snapshot.json delete mode 100644 src/database/drizzle/meta/0004_snapshot.json delete mode 100644 src/database/drizzle/meta/_journal.json diff --git a/bun.lockb b/bun.lockb index e600fc84e654783829f1627bfb9bd26e5c4a96ee..d4a7fe62efcbcfeeb9e25853c4a3e371ccdf6985 100755 GIT binary patch delta 30890 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 delta 25830 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 statement-breakpoint -CREATE TABLE `membership` ( - `user_id` text, - `guild_id` text -); ---> statement-breakpoint -CREATE TABLE `memories` ( - `id` text PRIMARY KEY NOT NULL, - `content` text, - `timestamp` text DEFAULT (current_timestamp), - `user_id` integer, - `guild_id` integer, - FOREIGN KEY (`user_id`) REFERENCES `users`(`id`) ON UPDATE no action ON DELETE no action, - FOREIGN KEY (`guild_id`) REFERENCES `guilds`(`id`) ON UPDATE no action ON DELETE no action -); ---> statement-breakpoint -CREATE TABLE `messages` ( - `id` text PRIMARY KEY NOT NULL, - `content` text, - `timestamp` text DEFAULT (current_timestamp), - `channel_id` text, - `user_id` text, - `guild_id` text, - FOREIGN KEY (`user_id`) REFERENCES `users`(`id`) ON UPDATE no action ON DELETE no action, - FOREIGN KEY (`guild_id`) REFERENCES `guilds`(`id`) ON UPDATE no action ON DELETE no action -); ---> statement-breakpoint -CREATE TABLE `users` ( - `id` text PRIMARY KEY NOT NULL, - `name` text, - `opt_out` integer -); ---> statement-breakpoint -CREATE INDEX `user_guild_idx` ON `membership` (`user_id`,`guild_id`);--> statement-breakpoint -CREATE UNIQUE INDEX `user_guild_unique` ON `membership` (`user_id`,`guild_id`);--> statement-breakpoint -CREATE INDEX `user_timestamp_idx` ON `memories` (`user_id`,`timestamp`);--> statement-breakpoint -CREATE INDEX `channel_timestamp_idx` ON `messages` (`channel_id`,`timestamp`); \ No newline at end of file diff --git a/src/database/drizzle/0001_rich_star_brand.sql b/src/database/drizzle/0001_rich_star_brand.sql deleted file mode 100644 index 1fd9ab9..0000000 --- a/src/database/drizzle/0001_rich_star_brand.sql +++ /dev/null @@ -1,16 +0,0 @@ -PRAGMA foreign_keys=OFF;--> statement-breakpoint -CREATE TABLE `__new_memories` ( - `id` text PRIMARY KEY NOT NULL, - `content` text, - `timestamp` text DEFAULT (current_timestamp), - `user_id` text, - `guild_id` text, - FOREIGN KEY (`user_id`) REFERENCES `users`(`id`) ON UPDATE no action ON DELETE no action, - FOREIGN KEY (`guild_id`) REFERENCES `guilds`(`id`) ON UPDATE no action ON DELETE no action -); ---> statement-breakpoint -INSERT INTO `__new_memories`("id", "content", "timestamp", "user_id", "guild_id") SELECT "id", "content", "timestamp", "user_id", "guild_id" FROM `memories`;--> statement-breakpoint -DROP TABLE `memories`;--> statement-breakpoint -ALTER TABLE `__new_memories` RENAME TO `memories`;--> statement-breakpoint -PRAGMA foreign_keys=ON;--> statement-breakpoint -CREATE INDEX `user_timestamp_idx` ON `memories` (`user_id`,`timestamp`); \ No newline at end of file diff --git a/src/database/drizzle/0002_robust_saracen.sql b/src/database/drizzle/0002_robust_saracen.sql deleted file mode 100644 index 3792f17..0000000 --- a/src/database/drizzle/0002_robust_saracen.sql +++ /dev/null @@ -1,29 +0,0 @@ -CREATE TABLE `bot_options` ( - `guild_id` text PRIMARY KEY NOT NULL, - `active_personality_id` text, - `free_will_chance` integer DEFAULT 2, - `memory_chance` integer DEFAULT 30, - `mention_probability` integer DEFAULT 0, - `updated_at` text DEFAULT (current_timestamp), - FOREIGN KEY (`guild_id`) REFERENCES `guilds`(`id`) ON UPDATE no action ON DELETE no action -); ---> statement-breakpoint -CREATE TABLE `personalities` ( - `id` text PRIMARY KEY NOT NULL, - `guild_id` text, - `name` text NOT NULL, - `system_prompt` text NOT NULL, - `created_at` text DEFAULT (current_timestamp), - `updated_at` text DEFAULT (current_timestamp), - FOREIGN KEY (`guild_id`) REFERENCES `guilds`(`id`) ON UPDATE no action ON DELETE no action -); ---> statement-breakpoint -CREATE INDEX `personality_guild_idx` ON `personalities` (`guild_id`);--> statement-breakpoint -CREATE TABLE `web_sessions` ( - `id` text PRIMARY KEY NOT NULL, - `user_id` text NOT NULL, - `access_token` text NOT NULL, - `refresh_token` text, - `expires_at` text NOT NULL, - `created_at` text DEFAULT (current_timestamp) -); diff --git a/src/database/drizzle/0003_silky_sauron.sql b/src/database/drizzle/0003_silky_sauron.sql deleted file mode 100644 index 00505db..0000000 --- a/src/database/drizzle/0003_silky_sauron.sql +++ /dev/null @@ -1,20 +0,0 @@ --- Rename timestamp to created_at -ALTER TABLE `memories` RENAME COLUMN "timestamp" TO "created_at";--> statement-breakpoint - --- Drop old index if it exists (ignore errors) -DROP INDEX IF EXISTS `user_timestamp_idx`;--> statement-breakpoint - --- Add new columns -ALTER TABLE `memories` ADD `category` text DEFAULT 'general';--> statement-breakpoint -ALTER TABLE `memories` ADD `importance` integer DEFAULT 5;--> statement-breakpoint -ALTER TABLE `memories` ADD `source_message_id` text;--> statement-breakpoint -ALTER TABLE `memories` ADD `last_accessed_at` text;--> statement-breakpoint -ALTER TABLE `memories` ADD `access_count` integer DEFAULT 0;--> statement-breakpoint -ALTER TABLE `memories` ADD `embedding` text;--> statement-breakpoint - --- Create new indexes for memories -CREATE INDEX IF NOT EXISTS `memory_user_idx` ON `memories` (`user_id`);--> statement-breakpoint -CREATE INDEX IF NOT EXISTS `memory_guild_idx` ON `memories` (`guild_id`);--> statement-breakpoint -CREATE INDEX IF NOT EXISTS `memory_user_importance_idx` ON `memories` (`user_id`,`importance`);--> statement-breakpoint -CREATE INDEX IF NOT EXISTS `memory_category_idx` ON `memories` (`category`);--> statement-breakpoint -CREATE INDEX IF NOT EXISTS `memory_user_category_idx` ON `memories` (`user_id`,`category`); \ No newline at end of file diff --git a/src/database/drizzle/0004_add_gif_search.sql b/src/database/drizzle/0004_add_gif_search.sql deleted file mode 100644 index 2075255..0000000 --- a/src/database/drizzle/0004_add_gif_search.sql +++ /dev/null @@ -1,2 +0,0 @@ --- Add gif_search_enabled column to bot_options -ALTER TABLE `bot_options` ADD `gif_search_enabled` integer DEFAULT 0; diff --git a/src/database/drizzle/0005_add_channel_restriction.sql b/src/database/drizzle/0005_add_channel_restriction.sql deleted file mode 100644 index 87250f4..0000000 --- a/src/database/drizzle/0005_add_channel_restriction.sql +++ /dev/null @@ -1,3 +0,0 @@ --- Add channel restriction to bot_options --- Joel can be limited to respond only in a specific channel -ALTER TABLE bot_options ADD COLUMN restricted_channel_id TEXT; diff --git a/src/database/drizzle/0006_add_image_gen.sql b/src/database/drizzle/0006_add_image_gen.sql deleted file mode 100644 index 3147812..0000000 --- a/src/database/drizzle/0006_add_image_gen.sql +++ /dev/null @@ -1,3 +0,0 @@ --- Add image generation support to bot_options --- Joel can generate images including NSFW content -ALTER TABLE bot_options ADD COLUMN image_gen_enabled INTEGER DEFAULT 0; diff --git a/src/database/drizzle/20260223215824_parched_albert_cleary/migration.sql b/src/database/drizzle/20260223215824_parched_albert_cleary/migration.sql new file mode 100644 index 0000000..36cba0c --- /dev/null +++ b/src/database/drizzle/20260223215824_parched_albert_cleary/migration.sql @@ -0,0 +1,84 @@ +CREATE TABLE `bot_options` ( + `guild_id` text PRIMARY KEY, + `active_personality_id` text, + `free_will_chance` integer DEFAULT 2, + `memory_chance` integer DEFAULT 30, + `mention_probability` integer DEFAULT 0, + `gif_search_enabled` integer DEFAULT 0, + `image_gen_enabled` integer DEFAULT 0, + `restricted_channel_id` text, + `updated_at` text DEFAULT (current_timestamp), + CONSTRAINT `fk_bot_options_guild_id_guilds_id_fk` FOREIGN KEY (`guild_id`) REFERENCES `guilds`(`id`) +); +--> statement-breakpoint +CREATE TABLE `guilds` ( + `id` text PRIMARY KEY, + `name` text +); +--> statement-breakpoint +CREATE TABLE `membership` ( + `user_id` text, + `guild_id` text, + CONSTRAINT `user_guild_unique` UNIQUE(`user_id`,`guild_id`) +); +--> statement-breakpoint +CREATE TABLE `memories` ( + `id` text PRIMARY KEY, + `content` text NOT NULL, + `category` text DEFAULT 'general', + `importance` integer DEFAULT 5, + `source_message_id` text, + `user_id` text, + `guild_id` text, + `created_at` text DEFAULT (current_timestamp), + `last_accessed_at` text, + `access_count` integer DEFAULT 0, + `embedding` text, + CONSTRAINT `fk_memories_user_id_users_id_fk` FOREIGN KEY (`user_id`) REFERENCES `users`(`id`), + CONSTRAINT `fk_memories_guild_id_guilds_id_fk` FOREIGN KEY (`guild_id`) REFERENCES `guilds`(`id`) +); +--> statement-breakpoint +CREATE TABLE `messages` ( + `id` text PRIMARY KEY, + `content` text, + `timestamp` text DEFAULT (current_timestamp), + `channel_id` text, + `user_id` text, + `guild_id` text, + CONSTRAINT `fk_messages_user_id_users_id_fk` FOREIGN KEY (`user_id`) REFERENCES `users`(`id`), + CONSTRAINT `fk_messages_guild_id_guilds_id_fk` FOREIGN KEY (`guild_id`) REFERENCES `guilds`(`id`) +); +--> statement-breakpoint +CREATE TABLE `personalities` ( + `id` text PRIMARY KEY, + `guild_id` text, + `name` text NOT NULL, + `system_prompt` text NOT NULL, + `created_at` text DEFAULT (current_timestamp), + `updated_at` text DEFAULT (current_timestamp), + CONSTRAINT `fk_personalities_guild_id_guilds_id_fk` FOREIGN KEY (`guild_id`) REFERENCES `guilds`(`id`) +); +--> statement-breakpoint +CREATE TABLE `users` ( + `id` text PRIMARY KEY, + `name` text, + `opt_out` integer +); +--> statement-breakpoint +CREATE TABLE `web_sessions` ( + `id` text PRIMARY KEY, + `user_id` text NOT NULL, + `access_token` text NOT NULL, + `refresh_token` text, + `expires_at` text NOT NULL, + `created_at` text DEFAULT (current_timestamp) +); +--> statement-breakpoint +CREATE INDEX `user_guild_idx` ON `membership` (`user_id`,`guild_id`);--> statement-breakpoint +CREATE INDEX `memory_user_idx` ON `memories` (`user_id`);--> statement-breakpoint +CREATE INDEX `memory_guild_idx` ON `memories` (`guild_id`);--> statement-breakpoint +CREATE INDEX `memory_user_importance_idx` ON `memories` (`user_id`,`importance`);--> statement-breakpoint +CREATE INDEX `memory_category_idx` ON `memories` (`category`);--> statement-breakpoint +CREATE INDEX `memory_user_category_idx` ON `memories` (`user_id`,`category`);--> statement-breakpoint +CREATE INDEX `channel_timestamp_idx` ON `messages` (`channel_id`,`timestamp`);--> statement-breakpoint +CREATE INDEX `personality_guild_idx` ON `personalities` (`guild_id`); \ No newline at end of file diff --git a/src/database/drizzle/20260223215824_parched_albert_cleary/snapshot.json b/src/database/drizzle/20260223215824_parched_albert_cleary/snapshot.json new file mode 100644 index 0000000..07398f1 --- /dev/null +++ b/src/database/drizzle/20260223215824_parched_albert_cleary/snapshot.json @@ -0,0 +1,784 @@ +{ + "version": "7", + "dialect": "sqlite", + "id": "be840e0c-ae30-4161-b3ff-0d07d7a2523f", + "prevIds": [ + "00000000-0000-0000-0000-000000000000" + ], + "ddl": [ + { + "name": "bot_options", + "entityType": "tables" + }, + { + "name": "guilds", + "entityType": "tables" + }, + { + "name": "membership", + "entityType": "tables" + }, + { + "name": "memories", + "entityType": "tables" + }, + { + "name": "messages", + "entityType": "tables" + }, + { + "name": "personalities", + "entityType": "tables" + }, + { + "name": "users", + "entityType": "tables" + }, + { + "name": "web_sessions", + "entityType": "tables" + }, + { + "type": "text", + "notNull": false, + "autoincrement": false, + "default": null, + "generated": null, + "name": "guild_id", + "entityType": "columns", + "table": "bot_options" + }, + { + "type": "text", + "notNull": false, + "autoincrement": false, + "default": null, + "generated": null, + "name": "active_personality_id", + "entityType": "columns", + "table": "bot_options" + }, + { + "type": "integer", + "notNull": false, + "autoincrement": false, + "default": "2", + "generated": null, + "name": "free_will_chance", + "entityType": "columns", + "table": "bot_options" + }, + { + "type": "integer", + "notNull": false, + "autoincrement": false, + "default": "30", + "generated": null, + "name": "memory_chance", + "entityType": "columns", + "table": "bot_options" + }, + { + "type": "integer", + "notNull": false, + "autoincrement": false, + "default": "0", + "generated": null, + "name": "mention_probability", + "entityType": "columns", + "table": "bot_options" + }, + { + "type": "integer", + "notNull": false, + "autoincrement": false, + "default": "0", + "generated": null, + "name": "gif_search_enabled", + "entityType": "columns", + "table": "bot_options" + }, + { + "type": "integer", + "notNull": false, + "autoincrement": false, + "default": "0", + "generated": null, + "name": "image_gen_enabled", + "entityType": "columns", + "table": "bot_options" + }, + { + "type": "text", + "notNull": false, + "autoincrement": false, + "default": null, + "generated": null, + "name": "restricted_channel_id", + "entityType": "columns", + "table": "bot_options" + }, + { + "type": "text", + "notNull": false, + "autoincrement": false, + "default": "(current_timestamp)", + "generated": null, + "name": "updated_at", + "entityType": "columns", + "table": "bot_options" + }, + { + "type": "text", + "notNull": false, + "autoincrement": false, + "default": null, + "generated": null, + "name": "id", + "entityType": "columns", + "table": "guilds" + }, + { + "type": "text", + "notNull": false, + "autoincrement": false, + "default": null, + "generated": null, + "name": "name", + "entityType": "columns", + "table": "guilds" + }, + { + "type": "text", + "notNull": false, + "autoincrement": false, + "default": null, + "generated": null, + "name": "user_id", + "entityType": "columns", + "table": "membership" + }, + { + "type": "text", + "notNull": false, + "autoincrement": false, + "default": null, + "generated": null, + "name": "guild_id", + "entityType": "columns", + "table": "membership" + }, + { + "type": "text", + "notNull": false, + "autoincrement": false, + "default": null, + "generated": null, + "name": "id", + "entityType": "columns", + "table": "memories" + }, + { + "type": "text", + "notNull": true, + "autoincrement": false, + "default": null, + "generated": null, + "name": "content", + "entityType": "columns", + "table": "memories" + }, + { + "type": "text", + "notNull": false, + "autoincrement": false, + "default": "'general'", + "generated": null, + "name": "category", + "entityType": "columns", + "table": "memories" + }, + { + "type": "integer", + "notNull": false, + "autoincrement": false, + "default": "5", + "generated": null, + "name": "importance", + "entityType": "columns", + "table": "memories" + }, + { + "type": "text", + "notNull": false, + "autoincrement": false, + "default": null, + "generated": null, + "name": "source_message_id", + "entityType": "columns", + "table": "memories" + }, + { + "type": "text", + "notNull": false, + "autoincrement": false, + "default": null, + "generated": null, + "name": "user_id", + "entityType": "columns", + "table": "memories" + }, + { + "type": "text", + "notNull": false, + "autoincrement": false, + "default": null, + "generated": null, + "name": "guild_id", + "entityType": "columns", + "table": "memories" + }, + { + "type": "text", + "notNull": false, + "autoincrement": false, + "default": "(current_timestamp)", + "generated": null, + "name": "created_at", + "entityType": "columns", + "table": "memories" + }, + { + "type": "text", + "notNull": false, + "autoincrement": false, + "default": null, + "generated": null, + "name": "last_accessed_at", + "entityType": "columns", + "table": "memories" + }, + { + "type": "integer", + "notNull": false, + "autoincrement": false, + "default": "0", + "generated": null, + "name": "access_count", + "entityType": "columns", + "table": "memories" + }, + { + "type": "text", + "notNull": false, + "autoincrement": false, + "default": null, + "generated": null, + "name": "embedding", + "entityType": "columns", + "table": "memories" + }, + { + "type": "text", + "notNull": false, + "autoincrement": false, + "default": null, + "generated": null, + "name": "id", + "entityType": "columns", + "table": "messages" + }, + { + "type": "text", + "notNull": false, + "autoincrement": false, + "default": null, + "generated": null, + "name": "content", + "entityType": "columns", + "table": "messages" + }, + { + "type": "text", + "notNull": false, + "autoincrement": false, + "default": "(current_timestamp)", + "generated": null, + "name": "timestamp", + "entityType": "columns", + "table": "messages" + }, + { + "type": "text", + "notNull": false, + "autoincrement": false, + "default": null, + "generated": null, + "name": "channel_id", + "entityType": "columns", + "table": "messages" + }, + { + "type": "text", + "notNull": false, + "autoincrement": false, + "default": null, + "generated": null, + "name": "user_id", + "entityType": "columns", + "table": "messages" + }, + { + "type": "text", + "notNull": false, + "autoincrement": false, + "default": null, + "generated": null, + "name": "guild_id", + "entityType": "columns", + "table": "messages" + }, + { + "type": "text", + "notNull": false, + "autoincrement": false, + "default": null, + "generated": null, + "name": "id", + "entityType": "columns", + "table": "personalities" + }, + { + "type": "text", + "notNull": false, + "autoincrement": false, + "default": null, + "generated": null, + "name": "guild_id", + "entityType": "columns", + "table": "personalities" + }, + { + "type": "text", + "notNull": true, + "autoincrement": false, + "default": null, + "generated": null, + "name": "name", + "entityType": "columns", + "table": "personalities" + }, + { + "type": "text", + "notNull": true, + "autoincrement": false, + "default": null, + "generated": null, + "name": "system_prompt", + "entityType": "columns", + "table": "personalities" + }, + { + "type": "text", + "notNull": false, + "autoincrement": false, + "default": "(current_timestamp)", + "generated": null, + "name": "created_at", + "entityType": "columns", + "table": "personalities" + }, + { + "type": "text", + "notNull": false, + "autoincrement": false, + "default": "(current_timestamp)", + "generated": null, + "name": "updated_at", + "entityType": "columns", + "table": "personalities" + }, + { + "type": "text", + "notNull": false, + "autoincrement": false, + "default": null, + "generated": null, + "name": "id", + "entityType": "columns", + "table": "users" + }, + { + "type": "text", + "notNull": false, + "autoincrement": false, + "default": null, + "generated": null, + "name": "name", + "entityType": "columns", + "table": "users" + }, + { + "type": "integer", + "notNull": false, + "autoincrement": false, + "default": null, + "generated": null, + "name": "opt_out", + "entityType": "columns", + "table": "users" + }, + { + "type": "text", + "notNull": false, + "autoincrement": false, + "default": null, + "generated": null, + "name": "id", + "entityType": "columns", + "table": "web_sessions" + }, + { + "type": "text", + "notNull": true, + "autoincrement": false, + "default": null, + "generated": null, + "name": "user_id", + "entityType": "columns", + "table": "web_sessions" + }, + { + "type": "text", + "notNull": true, + "autoincrement": false, + "default": null, + "generated": null, + "name": "access_token", + "entityType": "columns", + "table": "web_sessions" + }, + { + "type": "text", + "notNull": false, + "autoincrement": false, + "default": null, + "generated": null, + "name": "refresh_token", + "entityType": "columns", + "table": "web_sessions" + }, + { + "type": "text", + "notNull": true, + "autoincrement": false, + "default": null, + "generated": null, + "name": "expires_at", + "entityType": "columns", + "table": "web_sessions" + }, + { + "type": "text", + "notNull": false, + "autoincrement": false, + "default": "(current_timestamp)", + "generated": null, + "name": "created_at", + "entityType": "columns", + "table": "web_sessions" + }, + { + "columns": [ + "guild_id" + ], + "tableTo": "guilds", + "columnsTo": [ + "id" + ], + "onUpdate": "NO ACTION", + "onDelete": "NO ACTION", + "nameExplicit": false, + "name": "fk_bot_options_guild_id_guilds_id_fk", + "entityType": "fks", + "table": "bot_options" + }, + { + "columns": [ + "user_id" + ], + "tableTo": "users", + "columnsTo": [ + "id" + ], + "onUpdate": "NO ACTION", + "onDelete": "NO ACTION", + "nameExplicit": false, + "name": "fk_memories_user_id_users_id_fk", + "entityType": "fks", + "table": "memories" + }, + { + "columns": [ + "guild_id" + ], + "tableTo": "guilds", + "columnsTo": [ + "id" + ], + "onUpdate": "NO ACTION", + "onDelete": "NO ACTION", + "nameExplicit": false, + "name": "fk_memories_guild_id_guilds_id_fk", + "entityType": "fks", + "table": "memories" + }, + { + "columns": [ + "user_id" + ], + "tableTo": "users", + "columnsTo": [ + "id" + ], + "onUpdate": "NO ACTION", + "onDelete": "NO ACTION", + "nameExplicit": false, + "name": "fk_messages_user_id_users_id_fk", + "entityType": "fks", + "table": "messages" + }, + { + "columns": [ + "guild_id" + ], + "tableTo": "guilds", + "columnsTo": [ + "id" + ], + "onUpdate": "NO ACTION", + "onDelete": "NO ACTION", + "nameExplicit": false, + "name": "fk_messages_guild_id_guilds_id_fk", + "entityType": "fks", + "table": "messages" + }, + { + "columns": [ + "guild_id" + ], + "tableTo": "guilds", + "columnsTo": [ + "id" + ], + "onUpdate": "NO ACTION", + "onDelete": "NO ACTION", + "nameExplicit": false, + "name": "fk_personalities_guild_id_guilds_id_fk", + "entityType": "fks", + "table": "personalities" + }, + { + "columns": [ + "guild_id" + ], + "nameExplicit": false, + "name": "bot_options_pk", + "table": "bot_options", + "entityType": "pks" + }, + { + "columns": [ + "id" + ], + "nameExplicit": false, + "name": "guilds_pk", + "table": "guilds", + "entityType": "pks" + }, + { + "columns": [ + "id" + ], + "nameExplicit": false, + "name": "memories_pk", + "table": "memories", + "entityType": "pks" + }, + { + "columns": [ + "id" + ], + "nameExplicit": false, + "name": "messages_pk", + "table": "messages", + "entityType": "pks" + }, + { + "columns": [ + "id" + ], + "nameExplicit": false, + "name": "personalities_pk", + "table": "personalities", + "entityType": "pks" + }, + { + "columns": [ + "id" + ], + "nameExplicit": false, + "name": "users_pk", + "table": "users", + "entityType": "pks" + }, + { + "columns": [ + "id" + ], + "nameExplicit": false, + "name": "web_sessions_pk", + "table": "web_sessions", + "entityType": "pks" + }, + { + "columns": [ + { + "value": "user_id", + "isExpression": false + }, + { + "value": "guild_id", + "isExpression": false + } + ], + "isUnique": false, + "where": null, + "origin": "manual", + "name": "user_guild_idx", + "entityType": "indexes", + "table": "membership" + }, + { + "columns": [ + { + "value": "user_id", + "isExpression": false + } + ], + "isUnique": false, + "where": null, + "origin": "manual", + "name": "memory_user_idx", + "entityType": "indexes", + "table": "memories" + }, + { + "columns": [ + { + "value": "guild_id", + "isExpression": false + } + ], + "isUnique": false, + "where": null, + "origin": "manual", + "name": "memory_guild_idx", + "entityType": "indexes", + "table": "memories" + }, + { + "columns": [ + { + "value": "user_id", + "isExpression": false + }, + { + "value": "importance", + "isExpression": false + } + ], + "isUnique": false, + "where": null, + "origin": "manual", + "name": "memory_user_importance_idx", + "entityType": "indexes", + "table": "memories" + }, + { + "columns": [ + { + "value": "category", + "isExpression": false + } + ], + "isUnique": false, + "where": null, + "origin": "manual", + "name": "memory_category_idx", + "entityType": "indexes", + "table": "memories" + }, + { + "columns": [ + { + "value": "user_id", + "isExpression": false + }, + { + "value": "category", + "isExpression": false + } + ], + "isUnique": false, + "where": null, + "origin": "manual", + "name": "memory_user_category_idx", + "entityType": "indexes", + "table": "memories" + }, + { + "columns": [ + { + "value": "channel_id", + "isExpression": false + }, + { + "value": "timestamp", + "isExpression": false + } + ], + "isUnique": false, + "where": null, + "origin": "manual", + "name": "channel_timestamp_idx", + "entityType": "indexes", + "table": "messages" + }, + { + "columns": [ + { + "value": "guild_id", + "isExpression": false + } + ], + "isUnique": false, + "where": null, + "origin": "manual", + "name": "personality_guild_idx", + "entityType": "indexes", + "table": "personalities" + }, + { + "columns": [ + "user_id", + "guild_id" + ], + "nameExplicit": true, + "name": "user_guild_unique", + "entityType": "uniques", + "table": "membership" + } + ], + "renames": [] +} \ No newline at end of file diff --git a/src/database/drizzle/meta/0000_snapshot.json b/src/database/drizzle/meta/0000_snapshot.json deleted file mode 100644 index 0007c27..0000000 --- a/src/database/drizzle/meta/0000_snapshot.json +++ /dev/null @@ -1,281 +0,0 @@ -{ - "version": "6", - "dialect": "sqlite", - "tables": { - "guilds": { - "name": "guilds", - "columns": { - "id": { - "name": "id", - "type": "text", - "primaryKey": true, - "notNull": true, - "autoincrement": false - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - } - }, - "indexes": {}, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "checkConstraints": {} - }, - "membership": { - "name": "membership", - "columns": { - "user_id": { - "name": "user_id", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "guild_id": { - "name": "guild_id", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - } - }, - "indexes": { - "user_guild_idx": { - "name": "user_guild_idx", - "columns": [ - "user_id", - "guild_id" - ], - "isUnique": false - }, - "user_guild_unique": { - "name": "user_guild_unique", - "columns": [ - "user_id", - "guild_id" - ], - "isUnique": true - } - }, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "checkConstraints": {} - }, - "memories": { - "name": "memories", - "columns": { - "id": { - "name": "id", - "type": "text", - "primaryKey": true, - "notNull": true, - "autoincrement": false - }, - "content": { - "name": "content", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "timestamp": { - "name": "timestamp", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": "(current_timestamp)" - }, - "user_id": { - "name": "user_id", - "type": "integer", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "guild_id": { - "name": "guild_id", - "type": "integer", - "primaryKey": false, - "notNull": false, - "autoincrement": false - } - }, - "indexes": { - "user_timestamp_idx": { - "name": "user_timestamp_idx", - "columns": [ - "user_id", - "timestamp" - ], - "isUnique": false - } - }, - "foreignKeys": { - "memories_user_id_users_id_fk": { - "name": "memories_user_id_users_id_fk", - "tableFrom": "memories", - "columnsFrom": [ - "user_id" - ], - "tableTo": "users", - "columnsTo": [ - "id" - ], - "onUpdate": "no action", - "onDelete": "no action" - }, - "memories_guild_id_guilds_id_fk": { - "name": "memories_guild_id_guilds_id_fk", - "tableFrom": "memories", - "columnsFrom": [ - "guild_id" - ], - "tableTo": "guilds", - "columnsTo": [ - "id" - ], - "onUpdate": "no action", - "onDelete": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "checkConstraints": {} - }, - "messages": { - "name": "messages", - "columns": { - "id": { - "name": "id", - "type": "text", - "primaryKey": true, - "notNull": true, - "autoincrement": false - }, - "content": { - "name": "content", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "timestamp": { - "name": "timestamp", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": "(current_timestamp)" - }, - "channel_id": { - "name": "channel_id", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "user_id": { - "name": "user_id", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "guild_id": { - "name": "guild_id", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - } - }, - "indexes": { - "channel_timestamp_idx": { - "name": "channel_timestamp_idx", - "columns": [ - "channel_id", - "timestamp" - ], - "isUnique": false - } - }, - "foreignKeys": { - "messages_user_id_users_id_fk": { - "name": "messages_user_id_users_id_fk", - "tableFrom": "messages", - "columnsFrom": [ - "user_id" - ], - "tableTo": "users", - "columnsTo": [ - "id" - ], - "onUpdate": "no action", - "onDelete": "no action" - }, - "messages_guild_id_guilds_id_fk": { - "name": "messages_guild_id_guilds_id_fk", - "tableFrom": "messages", - "columnsFrom": [ - "guild_id" - ], - "tableTo": "guilds", - "columnsTo": [ - "id" - ], - "onUpdate": "no action", - "onDelete": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "checkConstraints": {} - }, - "users": { - "name": "users", - "columns": { - "id": { - "name": "id", - "type": "text", - "primaryKey": true, - "notNull": true, - "autoincrement": false - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "opt_out": { - "name": "opt_out", - "type": "integer", - "primaryKey": false, - "notNull": false, - "autoincrement": false - } - }, - "indexes": {}, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "checkConstraints": {} - } - }, - "enums": {}, - "_meta": { - "tables": {}, - "columns": {} - }, - "id": "b6ea108a-adf7-4bb9-b407-5903f0798578", - "prevId": "00000000-0000-0000-0000-000000000000", - "views": {} -} \ No newline at end of file diff --git a/src/database/drizzle/meta/0001_snapshot.json b/src/database/drizzle/meta/0001_snapshot.json deleted file mode 100644 index 40d6cf2..0000000 --- a/src/database/drizzle/meta/0001_snapshot.json +++ /dev/null @@ -1,285 +0,0 @@ -{ - "version": "6", - "dialect": "sqlite", - "id": "72ff388b-edab-47a7-b92a-b2b895992b7e", - "prevId": "b6ea108a-adf7-4bb9-b407-5903f0798578", - "tables": { - "guilds": { - "name": "guilds", - "columns": { - "id": { - "name": "id", - "type": "text", - "primaryKey": true, - "notNull": true, - "autoincrement": false - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - } - }, - "indexes": {}, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "checkConstraints": {} - }, - "membership": { - "name": "membership", - "columns": { - "user_id": { - "name": "user_id", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "guild_id": { - "name": "guild_id", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - } - }, - "indexes": { - "user_guild_idx": { - "name": "user_guild_idx", - "columns": [ - "user_id", - "guild_id" - ], - "isUnique": false - }, - "user_guild_unique": { - "name": "user_guild_unique", - "columns": [ - "user_id", - "guild_id" - ], - "isUnique": true - } - }, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "checkConstraints": {} - }, - "memories": { - "name": "memories", - "columns": { - "id": { - "name": "id", - "type": "text", - "primaryKey": true, - "notNull": true, - "autoincrement": false - }, - "content": { - "name": "content", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "timestamp": { - "name": "timestamp", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": "(current_timestamp)" - }, - "user_id": { - "name": "user_id", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "guild_id": { - "name": "guild_id", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - } - }, - "indexes": { - "user_timestamp_idx": { - "name": "user_timestamp_idx", - "columns": [ - "user_id", - "timestamp" - ], - "isUnique": false - } - }, - "foreignKeys": { - "memories_user_id_users_id_fk": { - "name": "memories_user_id_users_id_fk", - "tableFrom": "memories", - "tableTo": "users", - "columnsFrom": [ - "user_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "no action", - "onUpdate": "no action" - }, - "memories_guild_id_guilds_id_fk": { - "name": "memories_guild_id_guilds_id_fk", - "tableFrom": "memories", - "tableTo": "guilds", - "columnsFrom": [ - "guild_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "no action", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "checkConstraints": {} - }, - "messages": { - "name": "messages", - "columns": { - "id": { - "name": "id", - "type": "text", - "primaryKey": true, - "notNull": true, - "autoincrement": false - }, - "content": { - "name": "content", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "timestamp": { - "name": "timestamp", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": "(current_timestamp)" - }, - "channel_id": { - "name": "channel_id", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "user_id": { - "name": "user_id", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "guild_id": { - "name": "guild_id", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - } - }, - "indexes": { - "channel_timestamp_idx": { - "name": "channel_timestamp_idx", - "columns": [ - "channel_id", - "timestamp" - ], - "isUnique": false - } - }, - "foreignKeys": { - "messages_user_id_users_id_fk": { - "name": "messages_user_id_users_id_fk", - "tableFrom": "messages", - "tableTo": "users", - "columnsFrom": [ - "user_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "no action", - "onUpdate": "no action" - }, - "messages_guild_id_guilds_id_fk": { - "name": "messages_guild_id_guilds_id_fk", - "tableFrom": "messages", - "tableTo": "guilds", - "columnsFrom": [ - "guild_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "no action", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "checkConstraints": {} - }, - "users": { - "name": "users", - "columns": { - "id": { - "name": "id", - "type": "text", - "primaryKey": true, - "notNull": true, - "autoincrement": false - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "opt_out": { - "name": "opt_out", - "type": "integer", - "primaryKey": false, - "notNull": false, - "autoincrement": false - } - }, - "indexes": {}, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "checkConstraints": {} - } - }, - "views": {}, - "enums": {}, - "_meta": { - "schemas": {}, - "tables": {}, - "columns": {} - }, - "internal": { - "indexes": {} - } -} \ No newline at end of file diff --git a/src/database/drizzle/meta/0002_snapshot.json b/src/database/drizzle/meta/0002_snapshot.json deleted file mode 100644 index 119c57f..0000000 --- a/src/database/drizzle/meta/0002_snapshot.json +++ /dev/null @@ -1,484 +0,0 @@ -{ - "version": "6", - "dialect": "sqlite", - "id": "076a0cb6-fb7d-47b0-ad34-2c635b1533c2", - "prevId": "72ff388b-edab-47a7-b92a-b2b895992b7e", - "tables": { - "bot_options": { - "name": "bot_options", - "columns": { - "guild_id": { - "name": "guild_id", - "type": "text", - "primaryKey": true, - "notNull": true, - "autoincrement": false - }, - "active_personality_id": { - "name": "active_personality_id", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "free_will_chance": { - "name": "free_will_chance", - "type": "integer", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": 2 - }, - "memory_chance": { - "name": "memory_chance", - "type": "integer", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": 30 - }, - "mention_probability": { - "name": "mention_probability", - "type": "integer", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": 0 - }, - "updated_at": { - "name": "updated_at", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": "(current_timestamp)" - } - }, - "indexes": {}, - "foreignKeys": { - "bot_options_guild_id_guilds_id_fk": { - "name": "bot_options_guild_id_guilds_id_fk", - "tableFrom": "bot_options", - "tableTo": "guilds", - "columnsFrom": [ - "guild_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "no action", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "checkConstraints": {} - }, - "guilds": { - "name": "guilds", - "columns": { - "id": { - "name": "id", - "type": "text", - "primaryKey": true, - "notNull": true, - "autoincrement": false - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - } - }, - "indexes": {}, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "checkConstraints": {} - }, - "membership": { - "name": "membership", - "columns": { - "user_id": { - "name": "user_id", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "guild_id": { - "name": "guild_id", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - } - }, - "indexes": { - "user_guild_idx": { - "name": "user_guild_idx", - "columns": [ - "user_id", - "guild_id" - ], - "isUnique": false - }, - "user_guild_unique": { - "name": "user_guild_unique", - "columns": [ - "user_id", - "guild_id" - ], - "isUnique": true - } - }, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "checkConstraints": {} - }, - "memories": { - "name": "memories", - "columns": { - "id": { - "name": "id", - "type": "text", - "primaryKey": true, - "notNull": true, - "autoincrement": false - }, - "content": { - "name": "content", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "timestamp": { - "name": "timestamp", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": "(current_timestamp)" - }, - "user_id": { - "name": "user_id", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "guild_id": { - "name": "guild_id", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - } - }, - "indexes": { - "user_timestamp_idx": { - "name": "user_timestamp_idx", - "columns": [ - "user_id", - "timestamp" - ], - "isUnique": false - } - }, - "foreignKeys": { - "memories_user_id_users_id_fk": { - "name": "memories_user_id_users_id_fk", - "tableFrom": "memories", - "tableTo": "users", - "columnsFrom": [ - "user_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "no action", - "onUpdate": "no action" - }, - "memories_guild_id_guilds_id_fk": { - "name": "memories_guild_id_guilds_id_fk", - "tableFrom": "memories", - "tableTo": "guilds", - "columnsFrom": [ - "guild_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "no action", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "checkConstraints": {} - }, - "messages": { - "name": "messages", - "columns": { - "id": { - "name": "id", - "type": "text", - "primaryKey": true, - "notNull": true, - "autoincrement": false - }, - "content": { - "name": "content", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "timestamp": { - "name": "timestamp", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": "(current_timestamp)" - }, - "channel_id": { - "name": "channel_id", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "user_id": { - "name": "user_id", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "guild_id": { - "name": "guild_id", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - } - }, - "indexes": { - "channel_timestamp_idx": { - "name": "channel_timestamp_idx", - "columns": [ - "channel_id", - "timestamp" - ], - "isUnique": false - } - }, - "foreignKeys": { - "messages_user_id_users_id_fk": { - "name": "messages_user_id_users_id_fk", - "tableFrom": "messages", - "tableTo": "users", - "columnsFrom": [ - "user_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "no action", - "onUpdate": "no action" - }, - "messages_guild_id_guilds_id_fk": { - "name": "messages_guild_id_guilds_id_fk", - "tableFrom": "messages", - "tableTo": "guilds", - "columnsFrom": [ - "guild_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "no action", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "checkConstraints": {} - }, - "personalities": { - "name": "personalities", - "columns": { - "id": { - "name": "id", - "type": "text", - "primaryKey": true, - "notNull": true, - "autoincrement": false - }, - "guild_id": { - "name": "guild_id", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "system_prompt": { - "name": "system_prompt", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": "(current_timestamp)" - }, - "updated_at": { - "name": "updated_at", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": "(current_timestamp)" - } - }, - "indexes": { - "personality_guild_idx": { - "name": "personality_guild_idx", - "columns": [ - "guild_id" - ], - "isUnique": false - } - }, - "foreignKeys": { - "personalities_guild_id_guilds_id_fk": { - "name": "personalities_guild_id_guilds_id_fk", - "tableFrom": "personalities", - "tableTo": "guilds", - "columnsFrom": [ - "guild_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "no action", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "checkConstraints": {} - }, - "users": { - "name": "users", - "columns": { - "id": { - "name": "id", - "type": "text", - "primaryKey": true, - "notNull": true, - "autoincrement": false - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "opt_out": { - "name": "opt_out", - "type": "integer", - "primaryKey": false, - "notNull": false, - "autoincrement": false - } - }, - "indexes": {}, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "checkConstraints": {} - }, - "web_sessions": { - "name": "web_sessions", - "columns": { - "id": { - "name": "id", - "type": "text", - "primaryKey": true, - "notNull": true, - "autoincrement": false - }, - "user_id": { - "name": "user_id", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "access_token": { - "name": "access_token", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "refresh_token": { - "name": "refresh_token", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "expires_at": { - "name": "expires_at", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": "(current_timestamp)" - } - }, - "indexes": {}, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "checkConstraints": {} - } - }, - "views": {}, - "enums": {}, - "_meta": { - "schemas": {}, - "tables": {}, - "columns": {} - }, - "internal": { - "indexes": {} - } -} \ No newline at end of file diff --git a/src/database/drizzle/meta/0003_snapshot.json b/src/database/drizzle/meta/0003_snapshot.json deleted file mode 100644 index 1ca9c73..0000000 --- a/src/database/drizzle/meta/0003_snapshot.json +++ /dev/null @@ -1,560 +0,0 @@ -{ - "version": "6", - "dialect": "sqlite", - "id": "e2827c5c-cc3c-451c-bc4f-5d472d09d7df", - "prevId": "076a0cb6-fb7d-47b0-ad34-2c635b1533c2", - "tables": { - "bot_options": { - "name": "bot_options", - "columns": { - "guild_id": { - "name": "guild_id", - "type": "text", - "primaryKey": true, - "notNull": true, - "autoincrement": false - }, - "active_personality_id": { - "name": "active_personality_id", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "free_will_chance": { - "name": "free_will_chance", - "type": "integer", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": 2 - }, - "memory_chance": { - "name": "memory_chance", - "type": "integer", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": 30 - }, - "mention_probability": { - "name": "mention_probability", - "type": "integer", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": 0 - }, - "updated_at": { - "name": "updated_at", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": "(current_timestamp)" - } - }, - "indexes": {}, - "foreignKeys": { - "bot_options_guild_id_guilds_id_fk": { - "name": "bot_options_guild_id_guilds_id_fk", - "tableFrom": "bot_options", - "tableTo": "guilds", - "columnsFrom": [ - "guild_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "no action", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "checkConstraints": {} - }, - "guilds": { - "name": "guilds", - "columns": { - "id": { - "name": "id", - "type": "text", - "primaryKey": true, - "notNull": true, - "autoincrement": false - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - } - }, - "indexes": {}, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "checkConstraints": {} - }, - "membership": { - "name": "membership", - "columns": { - "user_id": { - "name": "user_id", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "guild_id": { - "name": "guild_id", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - } - }, - "indexes": { - "user_guild_idx": { - "name": "user_guild_idx", - "columns": [ - "user_id", - "guild_id" - ], - "isUnique": false - }, - "user_guild_unique": { - "name": "user_guild_unique", - "columns": [ - "user_id", - "guild_id" - ], - "isUnique": true - } - }, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "checkConstraints": {} - }, - "memories": { - "name": "memories", - "columns": { - "id": { - "name": "id", - "type": "text", - "primaryKey": true, - "notNull": true, - "autoincrement": false - }, - "content": { - "name": "content", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "category": { - "name": "category", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": "'general'" - }, - "importance": { - "name": "importance", - "type": "integer", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": 5 - }, - "source_message_id": { - "name": "source_message_id", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "user_id": { - "name": "user_id", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "guild_id": { - "name": "guild_id", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": "(current_timestamp)" - }, - "last_accessed_at": { - "name": "last_accessed_at", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "access_count": { - "name": "access_count", - "type": "integer", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": 0 - }, - "embedding": { - "name": "embedding", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - } - }, - "indexes": { - "memory_user_idx": { - "name": "memory_user_idx", - "columns": [ - "user_id" - ], - "isUnique": false - }, - "memory_guild_idx": { - "name": "memory_guild_idx", - "columns": [ - "guild_id" - ], - "isUnique": false - }, - "memory_user_importance_idx": { - "name": "memory_user_importance_idx", - "columns": [ - "user_id", - "importance" - ], - "isUnique": false - }, - "memory_category_idx": { - "name": "memory_category_idx", - "columns": [ - "category" - ], - "isUnique": false - }, - "memory_user_category_idx": { - "name": "memory_user_category_idx", - "columns": [ - "user_id", - "category" - ], - "isUnique": false - } - }, - "foreignKeys": { - "memories_user_id_users_id_fk": { - "name": "memories_user_id_users_id_fk", - "tableFrom": "memories", - "tableTo": "users", - "columnsFrom": [ - "user_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "no action", - "onUpdate": "no action" - }, - "memories_guild_id_guilds_id_fk": { - "name": "memories_guild_id_guilds_id_fk", - "tableFrom": "memories", - "tableTo": "guilds", - "columnsFrom": [ - "guild_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "no action", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "checkConstraints": {} - }, - "messages": { - "name": "messages", - "columns": { - "id": { - "name": "id", - "type": "text", - "primaryKey": true, - "notNull": true, - "autoincrement": false - }, - "content": { - "name": "content", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "timestamp": { - "name": "timestamp", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": "(current_timestamp)" - }, - "channel_id": { - "name": "channel_id", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "user_id": { - "name": "user_id", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "guild_id": { - "name": "guild_id", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - } - }, - "indexes": { - "channel_timestamp_idx": { - "name": "channel_timestamp_idx", - "columns": [ - "channel_id", - "timestamp" - ], - "isUnique": false - } - }, - "foreignKeys": { - "messages_user_id_users_id_fk": { - "name": "messages_user_id_users_id_fk", - "tableFrom": "messages", - "tableTo": "users", - "columnsFrom": [ - "user_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "no action", - "onUpdate": "no action" - }, - "messages_guild_id_guilds_id_fk": { - "name": "messages_guild_id_guilds_id_fk", - "tableFrom": "messages", - "tableTo": "guilds", - "columnsFrom": [ - "guild_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "no action", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "checkConstraints": {} - }, - "personalities": { - "name": "personalities", - "columns": { - "id": { - "name": "id", - "type": "text", - "primaryKey": true, - "notNull": true, - "autoincrement": false - }, - "guild_id": { - "name": "guild_id", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "system_prompt": { - "name": "system_prompt", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": "(current_timestamp)" - }, - "updated_at": { - "name": "updated_at", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": "(current_timestamp)" - } - }, - "indexes": { - "personality_guild_idx": { - "name": "personality_guild_idx", - "columns": [ - "guild_id" - ], - "isUnique": false - } - }, - "foreignKeys": { - "personalities_guild_id_guilds_id_fk": { - "name": "personalities_guild_id_guilds_id_fk", - "tableFrom": "personalities", - "tableTo": "guilds", - "columnsFrom": [ - "guild_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "no action", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "checkConstraints": {} - }, - "users": { - "name": "users", - "columns": { - "id": { - "name": "id", - "type": "text", - "primaryKey": true, - "notNull": true, - "autoincrement": false - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "opt_out": { - "name": "opt_out", - "type": "integer", - "primaryKey": false, - "notNull": false, - "autoincrement": false - } - }, - "indexes": {}, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "checkConstraints": {} - }, - "web_sessions": { - "name": "web_sessions", - "columns": { - "id": { - "name": "id", - "type": "text", - "primaryKey": true, - "notNull": true, - "autoincrement": false - }, - "user_id": { - "name": "user_id", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "access_token": { - "name": "access_token", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "refresh_token": { - "name": "refresh_token", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "expires_at": { - "name": "expires_at", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": "(current_timestamp)" - } - }, - "indexes": {}, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "checkConstraints": {} - } - }, - "views": {}, - "enums": {}, - "_meta": { - "schemas": {}, - "tables": {}, - "columns": { - "\"memories\".\"timestamp\"": "\"memories\".\"created_at\"" - } - }, - "internal": { - "indexes": {} - } -} \ No newline at end of file diff --git a/src/database/drizzle/meta/0004_snapshot.json b/src/database/drizzle/meta/0004_snapshot.json deleted file mode 100644 index 5033f6f..0000000 --- a/src/database/drizzle/meta/0004_snapshot.json +++ /dev/null @@ -1,519 +0,0 @@ -{ - "version": "6", - "dialect": "sqlite", - "id": "f3938d6d-aa4e-461e-bc5f-6e583e0eacf0", - "prevId": "e2827c5c-cc3c-451c-bc4f-5d472d09d7df", - "tables": { - "bot_options": { - "name": "bot_options", - "columns": { - "guild_id": { - "name": "guild_id", - "type": "text", - "primaryKey": true, - "notNull": true, - "autoincrement": false - }, - "active_personality_id": { - "name": "active_personality_id", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "free_will_chance": { - "name": "free_will_chance", - "type": "integer", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": 2 - }, - "memory_chance": { - "name": "memory_chance", - "type": "integer", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": 30 - }, - "mention_probability": { - "name": "mention_probability", - "type": "integer", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": 0 - }, - "gif_search_enabled": { - "name": "gif_search_enabled", - "type": "integer", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": 0 - }, - "updated_at": { - "name": "updated_at", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": "(current_timestamp)" - } - }, - "indexes": {}, - "foreignKeys": { - "bot_options_guild_id_guilds_id_fk": { - "name": "bot_options_guild_id_guilds_id_fk", - "tableFrom": "bot_options", - "tableTo": "guilds", - "columnsFrom": ["guild_id"], - "columnsTo": ["id"], - "onDelete": "no action", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "checkConstraints": {} - }, - "guilds": { - "name": "guilds", - "columns": { - "id": { - "name": "id", - "type": "text", - "primaryKey": true, - "notNull": true, - "autoincrement": false - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - } - }, - "indexes": {}, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "checkConstraints": {} - }, - "membership": { - "name": "membership", - "columns": { - "user_id": { - "name": "user_id", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "guild_id": { - "name": "guild_id", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - } - }, - "indexes": { - "user_guild_idx": { - "name": "user_guild_idx", - "columns": ["user_id", "guild_id"], - "isUnique": false - }, - "user_guild_unique": { - "name": "user_guild_unique", - "columns": ["user_id", "guild_id"], - "isUnique": true - } - }, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "checkConstraints": {} - }, - "memories": { - "name": "memories", - "columns": { - "id": { - "name": "id", - "type": "text", - "primaryKey": true, - "notNull": true, - "autoincrement": false - }, - "content": { - "name": "content", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "category": { - "name": "category", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": "'general'" - }, - "importance": { - "name": "importance", - "type": "integer", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": 5 - }, - "source_message_id": { - "name": "source_message_id", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "user_id": { - "name": "user_id", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "guild_id": { - "name": "guild_id", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": "(current_timestamp)" - }, - "last_accessed_at": { - "name": "last_accessed_at", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "access_count": { - "name": "access_count", - "type": "integer", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": 0 - }, - "embedding": { - "name": "embedding", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - } - }, - "indexes": { - "memory_user_idx": { - "name": "memory_user_idx", - "columns": ["user_id"], - "isUnique": false - }, - "memory_guild_idx": { - "name": "memory_guild_idx", - "columns": ["guild_id"], - "isUnique": false - }, - "memory_user_importance_idx": { - "name": "memory_user_importance_idx", - "columns": ["user_id", "importance"], - "isUnique": false - }, - "memory_category_idx": { - "name": "memory_category_idx", - "columns": ["category"], - "isUnique": false - }, - "memory_user_category_idx": { - "name": "memory_user_category_idx", - "columns": ["user_id", "category"], - "isUnique": false - } - }, - "foreignKeys": { - "memories_user_id_users_id_fk": { - "name": "memories_user_id_users_id_fk", - "tableFrom": "memories", - "tableTo": "users", - "columnsFrom": ["user_id"], - "columnsTo": ["id"], - "onDelete": "no action", - "onUpdate": "no action" - }, - "memories_guild_id_guilds_id_fk": { - "name": "memories_guild_id_guilds_id_fk", - "tableFrom": "memories", - "tableTo": "guilds", - "columnsFrom": ["guild_id"], - "columnsTo": ["id"], - "onDelete": "no action", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "checkConstraints": {} - }, - "messages": { - "name": "messages", - "columns": { - "id": { - "name": "id", - "type": "text", - "primaryKey": true, - "notNull": true, - "autoincrement": false - }, - "content": { - "name": "content", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "timestamp": { - "name": "timestamp", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": "(current_timestamp)" - }, - "channel_id": { - "name": "channel_id", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "user_id": { - "name": "user_id", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "guild_id": { - "name": "guild_id", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - } - }, - "indexes": { - "channel_timestamp_idx": { - "name": "channel_timestamp_idx", - "columns": ["channel_id", "timestamp"], - "isUnique": false - } - }, - "foreignKeys": { - "messages_user_id_users_id_fk": { - "name": "messages_user_id_users_id_fk", - "tableFrom": "messages", - "tableTo": "users", - "columnsFrom": ["user_id"], - "columnsTo": ["id"], - "onDelete": "no action", - "onUpdate": "no action" - }, - "messages_guild_id_guilds_id_fk": { - "name": "messages_guild_id_guilds_id_fk", - "tableFrom": "messages", - "tableTo": "guilds", - "columnsFrom": ["guild_id"], - "columnsTo": ["id"], - "onDelete": "no action", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "checkConstraints": {} - }, - "personalities": { - "name": "personalities", - "columns": { - "id": { - "name": "id", - "type": "text", - "primaryKey": true, - "notNull": true, - "autoincrement": false - }, - "guild_id": { - "name": "guild_id", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "system_prompt": { - "name": "system_prompt", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": "(current_timestamp)" - }, - "updated_at": { - "name": "updated_at", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": "(current_timestamp)" - } - }, - "indexes": { - "personality_guild_idx": { - "name": "personality_guild_idx", - "columns": ["guild_id"], - "isUnique": false - } - }, - "foreignKeys": { - "personalities_guild_id_guilds_id_fk": { - "name": "personalities_guild_id_guilds_id_fk", - "tableFrom": "personalities", - "tableTo": "guilds", - "columnsFrom": ["guild_id"], - "columnsTo": ["id"], - "onDelete": "no action", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "checkConstraints": {} - }, - "users": { - "name": "users", - "columns": { - "id": { - "name": "id", - "type": "text", - "primaryKey": true, - "notNull": true, - "autoincrement": false - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "opt_out": { - "name": "opt_out", - "type": "integer", - "primaryKey": false, - "notNull": false, - "autoincrement": false - } - }, - "indexes": {}, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "checkConstraints": {} - }, - "web_sessions": { - "name": "web_sessions", - "columns": { - "id": { - "name": "id", - "type": "text", - "primaryKey": true, - "notNull": true, - "autoincrement": false - }, - "user_id": { - "name": "user_id", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "access_token": { - "name": "access_token", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "refresh_token": { - "name": "refresh_token", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "expires_at": { - "name": "expires_at", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": "(current_timestamp)" - } - }, - "indexes": {}, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "checkConstraints": {} - } - }, - "views": {}, - "enums": {}, - "_meta": { - "schemas": {}, - "tables": {}, - "columns": {} - }, - "internal": { - "indexes": {} - } -} diff --git a/src/database/drizzle/meta/_journal.json b/src/database/drizzle/meta/_journal.json deleted file mode 100644 index 8201743..0000000 --- a/src/database/drizzle/meta/_journal.json +++ /dev/null @@ -1,55 +0,0 @@ -{ - "version": "5", - "dialect": "sqlite", - "entries": [ - { - "idx": 0, - "version": "5", - "when": 1714908216508, - "tag": "0000_fast_lester", - "breakpoints": true - }, - { - "idx": 1, - "version": "6", - "when": 1769598308518, - "tag": "0001_rich_star_brand", - "breakpoints": true - }, - { - "idx": 2, - "version": "6", - "when": 1769961851484, - "tag": "0002_robust_saracen", - "breakpoints": true - }, - { - "idx": 3, - "version": "6", - "when": 1769964737832, - "tag": "0003_silky_sauron", - "breakpoints": true - }, - { - "idx": 4, - "version": "6", - "when": 1770048000000, - "tag": "0004_add_gif_search", - "breakpoints": true - }, - { - "idx": 5, - "version": "6", - "when": 1770134400000, - "tag": "0005_add_channel_restriction", - "breakpoints": true - }, - { - "idx": 6, - "version": "6", - "when": 1770220800000, - "tag": "0006_add_image_gen", - "breakpoints": true - } - ] -} diff --git a/src/database/migrate.ts b/src/database/migrate.ts index 7007aea..9f22621 100644 --- a/src/database/migrate.ts +++ b/src/database/migrate.ts @@ -9,7 +9,7 @@ import { createLogger } from "../core/logger"; const logger = createLogger("Database:Migrate"); -async function runMigrations(): Promise { +export async function runMigrations(): Promise { logger.info("Running database migrations..."); try { @@ -23,4 +23,6 @@ async function runMigrations(): Promise { } } -runMigrations(); +if (import.meta.main) { + runMigrations(); +} diff --git a/src/index.ts b/src/index.ts index 9039773..e4edb47 100644 --- a/src/index.ts +++ b/src/index.ts @@ -18,6 +18,7 @@ import { createLogger } from "./core/logger"; import { registerEvents } from "./events"; import { stopSpontaneousMentionsCron } from "./features/joel"; import { startWebServer } from "./web"; +import { runMigrations } from "./database/migrate"; const logger = createLogger("Main"); @@ -43,6 +44,9 @@ async function main(): Promise { logger.info("Starting Joel bot..."); try { + // Run database migrations + await runMigrations(); + await client.login(config.discord.token); // Start web server after bot is logged in