diff --git a/packages/database/migrations/0004_uneven_silver_sable.sql b/packages/database/migrations/0004_uneven_silver_sable.sql new file mode 100644 index 00000000..7b64efb8 --- /dev/null +++ b/packages/database/migrations/0004_uneven_silver_sable.sql @@ -0,0 +1,20 @@ +CREATE TABLE `perf_snapshots` ( + `id` integer PRIMARY KEY AUTOINCREMENT NOT NULL, + `session_id` integer NOT NULL, + `ts` integer NOT NULL, + `players` integer DEFAULT 0 NOT NULL, + `fxs_memory` integer, + `node_memory` integer, + `perf` text NOT NULL, + FOREIGN KEY (`session_id`) REFERENCES `server_sessions`(`id`) ON UPDATE no action ON DELETE cascade +); +--> statement-breakpoint +CREATE INDEX `perf_snapshot_session_ts_idx` ON `perf_snapshots` (`session_id`,`ts`);--> statement-breakpoint +CREATE TABLE `server_sessions` ( + `id` integer PRIMARY KEY AUTOINCREMENT NOT NULL, + `started_at` integer NOT NULL, + `ended_at` integer, + `close_reason` text +); +--> statement-breakpoint +CREATE INDEX `server_session_started_idx` ON `server_sessions` (`started_at`); \ No newline at end of file diff --git a/packages/database/migrations/0005_chubby_daredevil.sql b/packages/database/migrations/0005_chubby_daredevil.sql new file mode 100644 index 00000000..333fbc8a --- /dev/null +++ b/packages/database/migrations/0005_chubby_daredevil.sql @@ -0,0 +1,9 @@ +CREATE TABLE `disconnect_events` ( + `id` integer PRIMARY KEY AUTOINCREMENT NOT NULL, + `session_id` integer NOT NULL, + `ts` integer NOT NULL, + `category` text NOT NULL, + FOREIGN KEY (`session_id`) REFERENCES `server_sessions`(`id`) ON UPDATE no action ON DELETE cascade +); +--> statement-breakpoint +CREATE INDEX `disconnect_event_session_ts_idx` ON `disconnect_events` (`session_id`,`ts`); \ No newline at end of file diff --git a/packages/database/migrations/0006_productive_thor.sql b/packages/database/migrations/0006_productive_thor.sql new file mode 100644 index 00000000..97513b8b --- /dev/null +++ b/packages/database/migrations/0006_productive_thor.sql @@ -0,0 +1,11 @@ +CREATE TABLE `admin_groups` ( + `id` integer PRIMARY KEY AUTOINCREMENT NOT NULL, + `name` text NOT NULL, + `permissions` integer DEFAULT 0 NOT NULL, + `colour` text DEFAULT '#ffffff' NOT NULL, + `icon` text, + `created_at` integer DEFAULT CURRENT_TIMESTAMP NOT NULL +); +--> statement-breakpoint +CREATE UNIQUE INDEX `admin_groups_name_unique` ON `admin_groups` (`name`);--> statement-breakpoint +ALTER TABLE `admin_users` ADD `group_id` integer REFERENCES admin_groups(id); \ No newline at end of file diff --git a/packages/database/migrations/0007_petite_skrulls.sql b/packages/database/migrations/0007_petite_skrulls.sql new file mode 100644 index 00000000..b3d1fd1c --- /dev/null +++ b/packages/database/migrations/0007_petite_skrulls.sql @@ -0,0 +1,13 @@ +CREATE TABLE `player_sessions` ( + `id` integer PRIMARY KEY AUTOINCREMENT NOT NULL, + `player_id` integer NOT NULL, + `server_session_id` integer, + `connected_at` integer NOT NULL, + `disconnected_at` integer, + `duration_ms` integer, + `end_reason` text, + FOREIGN KEY (`player_id`) REFERENCES `players`(`id`) ON UPDATE no action ON DELETE cascade, + FOREIGN KEY (`server_session_id`) REFERENCES `server_sessions`(`id`) ON UPDATE no action ON DELETE set null +); +--> statement-breakpoint +CREATE INDEX `player_session_player_connected_idx` ON `player_sessions` (`player_id`,`connected_at`); \ No newline at end of file diff --git a/packages/database/migrations/meta/0004_snapshot.json b/packages/database/migrations/meta/0004_snapshot.json new file mode 100644 index 00000000..e8f3bcf6 --- /dev/null +++ b/packages/database/migrations/meta/0004_snapshot.json @@ -0,0 +1,1080 @@ +{ + "version": "6", + "dialect": "sqlite", + "id": "49e2249c-2979-4129-b9bf-57e6f11cee40", + "prevId": "873237ed-888e-42b4-965c-00680fc48211", + "tables": { + "admin_users": { + "name": "admin_users", + "columns": { + "id": { + "name": "id", + "type": "integer", + "primaryKey": true, + "notNull": true, + "autoincrement": true + }, + "username": { + "name": "username", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "password_hash": { + "name": "password_hash", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "player_id": { + "name": "player_id", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "permissions": { + "name": "permissions", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": 0 + }, + "created_at": { + "name": "created_at", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "last_login_at": { + "name": "last_login_at", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + } + }, + "indexes": { + "admin_users_username_unique": { + "name": "admin_users_username_unique", + "columns": ["username"], + "isUnique": true + }, + "admin_username_idx": { + "name": "admin_username_idx", + "columns": ["username"], + "isUnique": false + } + }, + "foreignKeys": { + "admin_users_player_id_players_id_fk": { + "name": "admin_users_player_id_players_id_fk", + "tableFrom": "admin_users", + "tableTo": "players", + "columnsFrom": ["player_id"], + "columnsTo": ["id"], + "onDelete": "set null", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "api_tokens": { + "name": "api_tokens", + "columns": { + "id": { + "name": "id", + "type": "integer", + "primaryKey": true, + "notNull": true, + "autoincrement": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "token": { + "name": "token", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "created_at": { + "name": "created_at", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "last_used": { + "name": "last_used", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "revoked_at": { + "name": "revoked_at", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + } + }, + "indexes": { + "api_tokens_token_unique": { + "name": "api_tokens_token_unique", + "columns": ["token"], + "isUnique": true + }, + "tokens_token_idx": { + "name": "tokens_token_idx", + "columns": ["token"], + "isUnique": false + } + }, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "audit_log": { + "name": "audit_log", + "columns": { + "id": { + "name": "id", + "type": "integer", + "primaryKey": true, + "notNull": true, + "autoincrement": true + }, + "admin_id": { + "name": "admin_id", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "action": { + "name": "action", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "player_id": { + "name": "player_id", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "metadata": { + "name": "metadata", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "created_at": { + "name": "created_at", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + } + }, + "indexes": { + "audit_admin_idx": { + "name": "audit_admin_idx", + "columns": ["admin_id"], + "isUnique": false + }, + "audit_created_idx": { + "name": "audit_created_idx", + "columns": ["created_at"], + "isUnique": false + } + }, + "foreignKeys": { + "audit_log_admin_id_admin_users_id_fk": { + "name": "audit_log_admin_id_admin_users_id_fk", + "tableFrom": "audit_log", + "tableTo": "admin_users", + "columnsFrom": ["admin_id"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "audit_log_player_id_players_id_fk": { + "name": "audit_log_player_id_players_id_fk", + "tableFrom": "audit_log", + "tableTo": "players", + "columnsFrom": ["player_id"], + "columnsTo": ["id"], + "onDelete": "set null", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "bans": { + "name": "bans", + "columns": { + "id": { + "name": "id", + "type": "integer", + "primaryKey": true, + "notNull": true, + "autoincrement": true + }, + "player_id": { + "name": "player_id", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "reason": { + "name": "reason", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "issuer": { + "name": "issuer", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "expires_at": { + "name": "expires_at", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "created_at": { + "name": "created_at", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "revoked_at": { + "name": "revoked_at", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + } + }, + "indexes": { + "bans_player_idx": { + "name": "bans_player_idx", + "columns": ["player_id"], + "isUnique": false + } + }, + "foreignKeys": { + "bans_player_id_players_id_fk": { + "name": "bans_player_id_players_id_fk", + "tableFrom": "bans", + "tableTo": "players", + "columnsFrom": ["player_id"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "bans_issuer_admin_users_id_fk": { + "name": "bans_issuer_admin_users_id_fk", + "tableFrom": "bans", + "tableTo": "admin_users", + "columnsFrom": ["issuer"], + "columnsTo": ["id"], + "onDelete": "set null", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "kicks": { + "name": "kicks", + "columns": { + "id": { + "name": "id", + "type": "integer", + "primaryKey": true, + "notNull": true, + "autoincrement": true + }, + "player_id": { + "name": "player_id", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "reason": { + "name": "reason", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "revoked": { + "name": "revoked", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": 0 + }, + "issuer": { + "name": "issuer", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "issued_at": { + "name": "issued_at", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "CURRENT_TIMESTAMP" + } + }, + "indexes": {}, + "foreignKeys": { + "kicks_player_id_players_id_fk": { + "name": "kicks_player_id_players_id_fk", + "tableFrom": "kicks", + "tableTo": "players", + "columnsFrom": ["player_id"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "kicks_issuer_admin_users_id_fk": { + "name": "kicks_issuer_admin_users_id_fk", + "tableFrom": "kicks", + "tableTo": "admin_users", + "columnsFrom": ["issuer"], + "columnsTo": ["id"], + "onDelete": "set null", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "perf_snapshots": { + "name": "perf_snapshots", + "columns": { + "id": { + "name": "id", + "type": "integer", + "primaryKey": true, + "notNull": true, + "autoincrement": true + }, + "session_id": { + "name": "session_id", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "ts": { + "name": "ts", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "players": { + "name": "players", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": 0 + }, + "fxs_memory": { + "name": "fxs_memory", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "node_memory": { + "name": "node_memory", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "perf": { + "name": "perf", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + } + }, + "indexes": { + "perf_snapshot_session_ts_idx": { + "name": "perf_snapshot_session_ts_idx", + "columns": ["session_id", "ts"], + "isUnique": false + } + }, + "foreignKeys": { + "perf_snapshots_session_id_server_sessions_id_fk": { + "name": "perf_snapshots_session_id_server_sessions_id_fk", + "tableFrom": "perf_snapshots", + "tableTo": "server_sessions", + "columnsFrom": ["session_id"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "player_identifiers": { + "name": "player_identifiers", + "columns": { + "id": { + "name": "id", + "type": "integer", + "primaryKey": true, + "notNull": true, + "autoincrement": true + }, + "player_id": { + "name": "player_id", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "type": { + "name": "type", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "value": { + "name": "value", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + } + }, + "indexes": { + "idx_identifier_value": { + "name": "idx_identifier_value", + "columns": ["value"], + "isUnique": false + }, + "player_identifiers_type_value_unique": { + "name": "player_identifiers_type_value_unique", + "columns": ["type", "value"], + "isUnique": true + } + }, + "foreignKeys": { + "player_identifiers_player_id_players_id_fk": { + "name": "player_identifiers_player_id_players_id_fk", + "tableFrom": "player_identifiers", + "tableTo": "players", + "columnsFrom": ["player_id"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "player_notes": { + "name": "player_notes", + "columns": { + "id": { + "name": "id", + "type": "integer", + "primaryKey": true, + "notNull": true, + "autoincrement": true + }, + "player_id": { + "name": "player_id", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "content": { + "name": "content", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "issuer": { + "name": "issuer", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "issued_at": { + "name": "issued_at", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "CURRENT_TIMESTAMP" + } + }, + "indexes": {}, + "foreignKeys": { + "player_notes_player_id_players_id_fk": { + "name": "player_notes_player_id_players_id_fk", + "tableFrom": "player_notes", + "tableTo": "players", + "columnsFrom": ["player_id"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "player_notes_issuer_admin_users_id_fk": { + "name": "player_notes_issuer_admin_users_id_fk", + "tableFrom": "player_notes", + "tableTo": "admin_users", + "columnsFrom": ["issuer"], + "columnsTo": ["id"], + "onDelete": "set null", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "players": { + "name": "players", + "columns": { + "id": { + "name": "id", + "type": "integer", + "primaryKey": true, + "notNull": true, + "autoincrement": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "playtime": { + "name": "playtime", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": 0 + }, + "first_seen": { + "name": "first_seen", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "CURRENT_TIMESTAMP" + }, + "last_seen": { + "name": "last_seen", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "CURRENT_TIMESTAMP" + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "report_messages": { + "name": "report_messages", + "columns": { + "id": { + "name": "id", + "type": "integer", + "primaryKey": true, + "notNull": true, + "autoincrement": true + }, + "report_id": { + "name": "report_id", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "player_id": { + "name": "player_id", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "admin_id": { + "name": "admin_id", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "message": { + "name": "message", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "timestamp": { + "name": "timestamp", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "CURRENT_TIMESTAMP" + } + }, + "indexes": {}, + "foreignKeys": { + "report_messages_report_id_reports_id_fk": { + "name": "report_messages_report_id_reports_id_fk", + "tableFrom": "report_messages", + "tableTo": "reports", + "columnsFrom": ["report_id"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "report_messages_player_id_players_id_fk": { + "name": "report_messages_player_id_players_id_fk", + "tableFrom": "report_messages", + "tableTo": "players", + "columnsFrom": ["player_id"], + "columnsTo": ["id"], + "onDelete": "set null", + "onUpdate": "no action" + }, + "report_messages_admin_id_admin_users_id_fk": { + "name": "report_messages_admin_id_admin_users_id_fk", + "tableFrom": "report_messages", + "tableTo": "admin_users", + "columnsFrom": ["admin_id"], + "columnsTo": ["id"], + "onDelete": "set null", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "reports": { + "name": "reports", + "columns": { + "id": { + "name": "id", + "type": "integer", + "primaryKey": true, + "notNull": true, + "autoincrement": true + }, + "reporter_id": { + "name": "reporter_id", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "subject": { + "name": "subject", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "status": { + "name": "status", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "'open'" + }, + "opened_at": { + "name": "opened_at", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "CURRENT_TIMESTAMP" + }, + "last_action": { + "name": "last_action", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "CURRENT_TIMESTAMP" + } + }, + "indexes": {}, + "foreignKeys": { + "reports_reporter_id_players_id_fk": { + "name": "reports_reporter_id_players_id_fk", + "tableFrom": "reports", + "tableTo": "players", + "columnsFrom": ["reporter_id"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "server_sessions": { + "name": "server_sessions", + "columns": { + "id": { + "name": "id", + "type": "integer", + "primaryKey": true, + "notNull": true, + "autoincrement": true + }, + "started_at": { + "name": "started_at", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "ended_at": { + "name": "ended_at", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "close_reason": { + "name": "close_reason", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + } + }, + "indexes": { + "server_session_started_idx": { + "name": "server_session_started_idx", + "columns": ["started_at"], + "isUnique": false + } + }, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "sessions": { + "name": "sessions", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true, + "autoincrement": false + }, + "admin_id": { + "name": "admin_id", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "created_at": { + "name": "created_at", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "expires_at": { + "name": "expires_at", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + } + }, + "indexes": { + "sessions_admin_idx": { + "name": "sessions_admin_idx", + "columns": ["admin_id"], + "isUnique": false + } + }, + "foreignKeys": { + "sessions_admin_id_admin_users_id_fk": { + "name": "sessions_admin_id_admin_users_id_fk", + "tableFrom": "sessions", + "tableTo": "admin_users", + "columnsFrom": ["admin_id"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "settings": { + "name": "settings", + "columns": { + "key": { + "name": "key", + "type": "text", + "primaryKey": true, + "notNull": true, + "autoincrement": false + }, + "value": { + "name": "value", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "updated_at": { + "name": "updated_at", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "warns": { + "name": "warns", + "columns": { + "id": { + "name": "id", + "type": "integer", + "primaryKey": true, + "notNull": true, + "autoincrement": true + }, + "player_id": { + "name": "player_id", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "reason": { + "name": "reason", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "read": { + "name": "read", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": 0 + }, + "revoked": { + "name": "revoked", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": 0 + }, + "issuer": { + "name": "issuer", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "issued_at": { + "name": "issued_at", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "CURRENT_TIMESTAMP" + } + }, + "indexes": {}, + "foreignKeys": { + "warns_player_id_players_id_fk": { + "name": "warns_player_id_players_id_fk", + "tableFrom": "warns", + "tableTo": "players", + "columnsFrom": ["player_id"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "warns_issuer_admin_users_id_fk": { + "name": "warns_issuer_admin_users_id_fk", + "tableFrom": "warns", + "tableTo": "admin_users", + "columnsFrom": ["issuer"], + "columnsTo": ["id"], + "onDelete": "set null", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "whitelisted_identifiers": { + "name": "whitelisted_identifiers", + "columns": { + "id": { + "name": "id", + "type": "integer", + "primaryKey": true, + "notNull": true, + "autoincrement": true + }, + "type": { + "name": "type", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "value": { + "name": "value", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "admin_id": { + "name": "admin_id", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "system": { + "name": "system", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": 0 + }, + "added_at": { + "name": "added_at", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "CURRENT_TIMESTAMP" + } + }, + "indexes": { + "idx_whitelist_identifier_value": { + "name": "idx_whitelist_identifier_value", + "columns": ["value"], + "isUnique": false + }, + "whitelisted_identifiers_type_value_unique": { + "name": "whitelisted_identifiers_type_value_unique", + "columns": ["type", "value"], + "isUnique": true + } + }, + "foreignKeys": { + "whitelisted_identifiers_admin_id_admin_users_id_fk": { + "name": "whitelisted_identifiers_admin_id_admin_users_id_fk", + "tableFrom": "whitelisted_identifiers", + "tableTo": "admin_users", + "columnsFrom": ["admin_id"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + } + }, + "views": {}, + "enums": {}, + "_meta": { + "schemas": {}, + "tables": {}, + "columns": {} + }, + "internal": { + "indexes": {} + } +} diff --git a/packages/database/migrations/meta/0005_snapshot.json b/packages/database/migrations/meta/0005_snapshot.json new file mode 100644 index 00000000..a9001ce5 --- /dev/null +++ b/packages/database/migrations/meta/0005_snapshot.json @@ -0,0 +1,1134 @@ +{ + "version": "6", + "dialect": "sqlite", + "id": "d9629986-225a-4cdf-8e6d-0f66da21e9fe", + "prevId": "49e2249c-2979-4129-b9bf-57e6f11cee40", + "tables": { + "admin_users": { + "name": "admin_users", + "columns": { + "id": { + "name": "id", + "type": "integer", + "primaryKey": true, + "notNull": true, + "autoincrement": true + }, + "username": { + "name": "username", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "password_hash": { + "name": "password_hash", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "player_id": { + "name": "player_id", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "permissions": { + "name": "permissions", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": 0 + }, + "created_at": { + "name": "created_at", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "last_login_at": { + "name": "last_login_at", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + } + }, + "indexes": { + "admin_users_username_unique": { + "name": "admin_users_username_unique", + "columns": ["username"], + "isUnique": true + }, + "admin_username_idx": { + "name": "admin_username_idx", + "columns": ["username"], + "isUnique": false + } + }, + "foreignKeys": { + "admin_users_player_id_players_id_fk": { + "name": "admin_users_player_id_players_id_fk", + "tableFrom": "admin_users", + "tableTo": "players", + "columnsFrom": ["player_id"], + "columnsTo": ["id"], + "onDelete": "set null", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "api_tokens": { + "name": "api_tokens", + "columns": { + "id": { + "name": "id", + "type": "integer", + "primaryKey": true, + "notNull": true, + "autoincrement": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "token": { + "name": "token", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "created_at": { + "name": "created_at", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "last_used": { + "name": "last_used", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "revoked_at": { + "name": "revoked_at", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + } + }, + "indexes": { + "api_tokens_token_unique": { + "name": "api_tokens_token_unique", + "columns": ["token"], + "isUnique": true + }, + "tokens_token_idx": { + "name": "tokens_token_idx", + "columns": ["token"], + "isUnique": false + } + }, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "audit_log": { + "name": "audit_log", + "columns": { + "id": { + "name": "id", + "type": "integer", + "primaryKey": true, + "notNull": true, + "autoincrement": true + }, + "admin_id": { + "name": "admin_id", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "action": { + "name": "action", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "player_id": { + "name": "player_id", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "metadata": { + "name": "metadata", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "created_at": { + "name": "created_at", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + } + }, + "indexes": { + "audit_admin_idx": { + "name": "audit_admin_idx", + "columns": ["admin_id"], + "isUnique": false + }, + "audit_created_idx": { + "name": "audit_created_idx", + "columns": ["created_at"], + "isUnique": false + } + }, + "foreignKeys": { + "audit_log_admin_id_admin_users_id_fk": { + "name": "audit_log_admin_id_admin_users_id_fk", + "tableFrom": "audit_log", + "tableTo": "admin_users", + "columnsFrom": ["admin_id"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "audit_log_player_id_players_id_fk": { + "name": "audit_log_player_id_players_id_fk", + "tableFrom": "audit_log", + "tableTo": "players", + "columnsFrom": ["player_id"], + "columnsTo": ["id"], + "onDelete": "set null", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "bans": { + "name": "bans", + "columns": { + "id": { + "name": "id", + "type": "integer", + "primaryKey": true, + "notNull": true, + "autoincrement": true + }, + "player_id": { + "name": "player_id", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "reason": { + "name": "reason", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "issuer": { + "name": "issuer", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "expires_at": { + "name": "expires_at", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "created_at": { + "name": "created_at", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "revoked_at": { + "name": "revoked_at", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + } + }, + "indexes": { + "bans_player_idx": { + "name": "bans_player_idx", + "columns": ["player_id"], + "isUnique": false + } + }, + "foreignKeys": { + "bans_player_id_players_id_fk": { + "name": "bans_player_id_players_id_fk", + "tableFrom": "bans", + "tableTo": "players", + "columnsFrom": ["player_id"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "bans_issuer_admin_users_id_fk": { + "name": "bans_issuer_admin_users_id_fk", + "tableFrom": "bans", + "tableTo": "admin_users", + "columnsFrom": ["issuer"], + "columnsTo": ["id"], + "onDelete": "set null", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "disconnect_events": { + "name": "disconnect_events", + "columns": { + "id": { + "name": "id", + "type": "integer", + "primaryKey": true, + "notNull": true, + "autoincrement": true + }, + "session_id": { + "name": "session_id", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "ts": { + "name": "ts", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "category": { + "name": "category", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + } + }, + "indexes": { + "disconnect_event_session_ts_idx": { + "name": "disconnect_event_session_ts_idx", + "columns": ["session_id", "ts"], + "isUnique": false + } + }, + "foreignKeys": { + "disconnect_events_session_id_server_sessions_id_fk": { + "name": "disconnect_events_session_id_server_sessions_id_fk", + "tableFrom": "disconnect_events", + "tableTo": "server_sessions", + "columnsFrom": ["session_id"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "kicks": { + "name": "kicks", + "columns": { + "id": { + "name": "id", + "type": "integer", + "primaryKey": true, + "notNull": true, + "autoincrement": true + }, + "player_id": { + "name": "player_id", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "reason": { + "name": "reason", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "revoked": { + "name": "revoked", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": 0 + }, + "issuer": { + "name": "issuer", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "issued_at": { + "name": "issued_at", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "CURRENT_TIMESTAMP" + } + }, + "indexes": {}, + "foreignKeys": { + "kicks_player_id_players_id_fk": { + "name": "kicks_player_id_players_id_fk", + "tableFrom": "kicks", + "tableTo": "players", + "columnsFrom": ["player_id"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "kicks_issuer_admin_users_id_fk": { + "name": "kicks_issuer_admin_users_id_fk", + "tableFrom": "kicks", + "tableTo": "admin_users", + "columnsFrom": ["issuer"], + "columnsTo": ["id"], + "onDelete": "set null", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "perf_snapshots": { + "name": "perf_snapshots", + "columns": { + "id": { + "name": "id", + "type": "integer", + "primaryKey": true, + "notNull": true, + "autoincrement": true + }, + "session_id": { + "name": "session_id", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "ts": { + "name": "ts", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "players": { + "name": "players", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": 0 + }, + "fxs_memory": { + "name": "fxs_memory", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "node_memory": { + "name": "node_memory", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "perf": { + "name": "perf", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + } + }, + "indexes": { + "perf_snapshot_session_ts_idx": { + "name": "perf_snapshot_session_ts_idx", + "columns": ["session_id", "ts"], + "isUnique": false + } + }, + "foreignKeys": { + "perf_snapshots_session_id_server_sessions_id_fk": { + "name": "perf_snapshots_session_id_server_sessions_id_fk", + "tableFrom": "perf_snapshots", + "tableTo": "server_sessions", + "columnsFrom": ["session_id"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "player_identifiers": { + "name": "player_identifiers", + "columns": { + "id": { + "name": "id", + "type": "integer", + "primaryKey": true, + "notNull": true, + "autoincrement": true + }, + "player_id": { + "name": "player_id", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "type": { + "name": "type", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "value": { + "name": "value", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + } + }, + "indexes": { + "idx_identifier_value": { + "name": "idx_identifier_value", + "columns": ["value"], + "isUnique": false + }, + "player_identifiers_type_value_unique": { + "name": "player_identifiers_type_value_unique", + "columns": ["type", "value"], + "isUnique": true + } + }, + "foreignKeys": { + "player_identifiers_player_id_players_id_fk": { + "name": "player_identifiers_player_id_players_id_fk", + "tableFrom": "player_identifiers", + "tableTo": "players", + "columnsFrom": ["player_id"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "player_notes": { + "name": "player_notes", + "columns": { + "id": { + "name": "id", + "type": "integer", + "primaryKey": true, + "notNull": true, + "autoincrement": true + }, + "player_id": { + "name": "player_id", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "content": { + "name": "content", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "issuer": { + "name": "issuer", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "issued_at": { + "name": "issued_at", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "CURRENT_TIMESTAMP" + } + }, + "indexes": {}, + "foreignKeys": { + "player_notes_player_id_players_id_fk": { + "name": "player_notes_player_id_players_id_fk", + "tableFrom": "player_notes", + "tableTo": "players", + "columnsFrom": ["player_id"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "player_notes_issuer_admin_users_id_fk": { + "name": "player_notes_issuer_admin_users_id_fk", + "tableFrom": "player_notes", + "tableTo": "admin_users", + "columnsFrom": ["issuer"], + "columnsTo": ["id"], + "onDelete": "set null", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "players": { + "name": "players", + "columns": { + "id": { + "name": "id", + "type": "integer", + "primaryKey": true, + "notNull": true, + "autoincrement": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "playtime": { + "name": "playtime", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": 0 + }, + "first_seen": { + "name": "first_seen", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "CURRENT_TIMESTAMP" + }, + "last_seen": { + "name": "last_seen", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "CURRENT_TIMESTAMP" + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "report_messages": { + "name": "report_messages", + "columns": { + "id": { + "name": "id", + "type": "integer", + "primaryKey": true, + "notNull": true, + "autoincrement": true + }, + "report_id": { + "name": "report_id", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "player_id": { + "name": "player_id", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "admin_id": { + "name": "admin_id", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "message": { + "name": "message", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "timestamp": { + "name": "timestamp", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "CURRENT_TIMESTAMP" + } + }, + "indexes": {}, + "foreignKeys": { + "report_messages_report_id_reports_id_fk": { + "name": "report_messages_report_id_reports_id_fk", + "tableFrom": "report_messages", + "tableTo": "reports", + "columnsFrom": ["report_id"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "report_messages_player_id_players_id_fk": { + "name": "report_messages_player_id_players_id_fk", + "tableFrom": "report_messages", + "tableTo": "players", + "columnsFrom": ["player_id"], + "columnsTo": ["id"], + "onDelete": "set null", + "onUpdate": "no action" + }, + "report_messages_admin_id_admin_users_id_fk": { + "name": "report_messages_admin_id_admin_users_id_fk", + "tableFrom": "report_messages", + "tableTo": "admin_users", + "columnsFrom": ["admin_id"], + "columnsTo": ["id"], + "onDelete": "set null", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "reports": { + "name": "reports", + "columns": { + "id": { + "name": "id", + "type": "integer", + "primaryKey": true, + "notNull": true, + "autoincrement": true + }, + "reporter_id": { + "name": "reporter_id", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "subject": { + "name": "subject", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "status": { + "name": "status", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "'open'" + }, + "opened_at": { + "name": "opened_at", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "CURRENT_TIMESTAMP" + }, + "last_action": { + "name": "last_action", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "CURRENT_TIMESTAMP" + } + }, + "indexes": {}, + "foreignKeys": { + "reports_reporter_id_players_id_fk": { + "name": "reports_reporter_id_players_id_fk", + "tableFrom": "reports", + "tableTo": "players", + "columnsFrom": ["reporter_id"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "server_sessions": { + "name": "server_sessions", + "columns": { + "id": { + "name": "id", + "type": "integer", + "primaryKey": true, + "notNull": true, + "autoincrement": true + }, + "started_at": { + "name": "started_at", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "ended_at": { + "name": "ended_at", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "close_reason": { + "name": "close_reason", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + } + }, + "indexes": { + "server_session_started_idx": { + "name": "server_session_started_idx", + "columns": ["started_at"], + "isUnique": false + } + }, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "sessions": { + "name": "sessions", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true, + "autoincrement": false + }, + "admin_id": { + "name": "admin_id", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "created_at": { + "name": "created_at", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "expires_at": { + "name": "expires_at", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + } + }, + "indexes": { + "sessions_admin_idx": { + "name": "sessions_admin_idx", + "columns": ["admin_id"], + "isUnique": false + } + }, + "foreignKeys": { + "sessions_admin_id_admin_users_id_fk": { + "name": "sessions_admin_id_admin_users_id_fk", + "tableFrom": "sessions", + "tableTo": "admin_users", + "columnsFrom": ["admin_id"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "settings": { + "name": "settings", + "columns": { + "key": { + "name": "key", + "type": "text", + "primaryKey": true, + "notNull": true, + "autoincrement": false + }, + "value": { + "name": "value", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "updated_at": { + "name": "updated_at", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "warns": { + "name": "warns", + "columns": { + "id": { + "name": "id", + "type": "integer", + "primaryKey": true, + "notNull": true, + "autoincrement": true + }, + "player_id": { + "name": "player_id", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "reason": { + "name": "reason", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "read": { + "name": "read", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": 0 + }, + "revoked": { + "name": "revoked", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": 0 + }, + "issuer": { + "name": "issuer", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "issued_at": { + "name": "issued_at", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "CURRENT_TIMESTAMP" + } + }, + "indexes": {}, + "foreignKeys": { + "warns_player_id_players_id_fk": { + "name": "warns_player_id_players_id_fk", + "tableFrom": "warns", + "tableTo": "players", + "columnsFrom": ["player_id"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "warns_issuer_admin_users_id_fk": { + "name": "warns_issuer_admin_users_id_fk", + "tableFrom": "warns", + "tableTo": "admin_users", + "columnsFrom": ["issuer"], + "columnsTo": ["id"], + "onDelete": "set null", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "whitelisted_identifiers": { + "name": "whitelisted_identifiers", + "columns": { + "id": { + "name": "id", + "type": "integer", + "primaryKey": true, + "notNull": true, + "autoincrement": true + }, + "type": { + "name": "type", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "value": { + "name": "value", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "admin_id": { + "name": "admin_id", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "system": { + "name": "system", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": 0 + }, + "added_at": { + "name": "added_at", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "CURRENT_TIMESTAMP" + } + }, + "indexes": { + "idx_whitelist_identifier_value": { + "name": "idx_whitelist_identifier_value", + "columns": ["value"], + "isUnique": false + }, + "whitelisted_identifiers_type_value_unique": { + "name": "whitelisted_identifiers_type_value_unique", + "columns": ["type", "value"], + "isUnique": true + } + }, + "foreignKeys": { + "whitelisted_identifiers_admin_id_admin_users_id_fk": { + "name": "whitelisted_identifiers_admin_id_admin_users_id_fk", + "tableFrom": "whitelisted_identifiers", + "tableTo": "admin_users", + "columnsFrom": ["admin_id"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + } + }, + "views": {}, + "enums": {}, + "_meta": { + "schemas": {}, + "tables": {}, + "columns": {} + }, + "internal": { + "indexes": {} + } +} diff --git a/packages/database/migrations/meta/0006_snapshot.json b/packages/database/migrations/meta/0006_snapshot.json new file mode 100644 index 00000000..01bc44a9 --- /dev/null +++ b/packages/database/migrations/meta/0006_snapshot.json @@ -0,0 +1,1211 @@ +{ + "version": "6", + "dialect": "sqlite", + "id": "deca3854-467f-4e2e-b8f1-6b539282e29b", + "prevId": "d9629986-225a-4cdf-8e6d-0f66da21e9fe", + "tables": { + "admin_groups": { + "name": "admin_groups", + "columns": { + "id": { + "name": "id", + "type": "integer", + "primaryKey": true, + "notNull": true, + "autoincrement": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "permissions": { + "name": "permissions", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": 0 + }, + "colour": { + "name": "colour", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "'#ffffff'" + }, + "icon": { + "name": "icon", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "created_at": { + "name": "created_at", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "CURRENT_TIMESTAMP" + } + }, + "indexes": { + "admin_groups_name_unique": { + "name": "admin_groups_name_unique", + "columns": ["name"], + "isUnique": true + } + }, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "admin_users": { + "name": "admin_users", + "columns": { + "id": { + "name": "id", + "type": "integer", + "primaryKey": true, + "notNull": true, + "autoincrement": true + }, + "username": { + "name": "username", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "password_hash": { + "name": "password_hash", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "player_id": { + "name": "player_id", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "permissions": { + "name": "permissions", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": 0 + }, + "group_id": { + "name": "group_id", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "created_at": { + "name": "created_at", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "last_login_at": { + "name": "last_login_at", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + } + }, + "indexes": { + "admin_users_username_unique": { + "name": "admin_users_username_unique", + "columns": ["username"], + "isUnique": true + }, + "admin_username_idx": { + "name": "admin_username_idx", + "columns": ["username"], + "isUnique": false + } + }, + "foreignKeys": { + "admin_users_player_id_players_id_fk": { + "name": "admin_users_player_id_players_id_fk", + "tableFrom": "admin_users", + "tableTo": "players", + "columnsFrom": ["player_id"], + "columnsTo": ["id"], + "onDelete": "set null", + "onUpdate": "no action" + }, + "admin_users_group_id_admin_groups_id_fk": { + "name": "admin_users_group_id_admin_groups_id_fk", + "tableFrom": "admin_users", + "tableTo": "admin_groups", + "columnsFrom": ["group_id"], + "columnsTo": ["id"], + "onDelete": "set null", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "api_tokens": { + "name": "api_tokens", + "columns": { + "id": { + "name": "id", + "type": "integer", + "primaryKey": true, + "notNull": true, + "autoincrement": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "token": { + "name": "token", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "created_at": { + "name": "created_at", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "last_used": { + "name": "last_used", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "revoked_at": { + "name": "revoked_at", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + } + }, + "indexes": { + "api_tokens_token_unique": { + "name": "api_tokens_token_unique", + "columns": ["token"], + "isUnique": true + }, + "tokens_token_idx": { + "name": "tokens_token_idx", + "columns": ["token"], + "isUnique": false + } + }, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "audit_log": { + "name": "audit_log", + "columns": { + "id": { + "name": "id", + "type": "integer", + "primaryKey": true, + "notNull": true, + "autoincrement": true + }, + "admin_id": { + "name": "admin_id", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "action": { + "name": "action", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "player_id": { + "name": "player_id", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "metadata": { + "name": "metadata", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "created_at": { + "name": "created_at", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + } + }, + "indexes": { + "audit_admin_idx": { + "name": "audit_admin_idx", + "columns": ["admin_id"], + "isUnique": false + }, + "audit_created_idx": { + "name": "audit_created_idx", + "columns": ["created_at"], + "isUnique": false + } + }, + "foreignKeys": { + "audit_log_admin_id_admin_users_id_fk": { + "name": "audit_log_admin_id_admin_users_id_fk", + "tableFrom": "audit_log", + "tableTo": "admin_users", + "columnsFrom": ["admin_id"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "audit_log_player_id_players_id_fk": { + "name": "audit_log_player_id_players_id_fk", + "tableFrom": "audit_log", + "tableTo": "players", + "columnsFrom": ["player_id"], + "columnsTo": ["id"], + "onDelete": "set null", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "bans": { + "name": "bans", + "columns": { + "id": { + "name": "id", + "type": "integer", + "primaryKey": true, + "notNull": true, + "autoincrement": true + }, + "player_id": { + "name": "player_id", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "reason": { + "name": "reason", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "issuer": { + "name": "issuer", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "expires_at": { + "name": "expires_at", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "created_at": { + "name": "created_at", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "revoked_at": { + "name": "revoked_at", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + } + }, + "indexes": { + "bans_player_idx": { + "name": "bans_player_idx", + "columns": ["player_id"], + "isUnique": false + } + }, + "foreignKeys": { + "bans_player_id_players_id_fk": { + "name": "bans_player_id_players_id_fk", + "tableFrom": "bans", + "tableTo": "players", + "columnsFrom": ["player_id"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "bans_issuer_admin_users_id_fk": { + "name": "bans_issuer_admin_users_id_fk", + "tableFrom": "bans", + "tableTo": "admin_users", + "columnsFrom": ["issuer"], + "columnsTo": ["id"], + "onDelete": "set null", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "disconnect_events": { + "name": "disconnect_events", + "columns": { + "id": { + "name": "id", + "type": "integer", + "primaryKey": true, + "notNull": true, + "autoincrement": true + }, + "session_id": { + "name": "session_id", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "ts": { + "name": "ts", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "category": { + "name": "category", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + } + }, + "indexes": { + "disconnect_event_session_ts_idx": { + "name": "disconnect_event_session_ts_idx", + "columns": ["session_id", "ts"], + "isUnique": false + } + }, + "foreignKeys": { + "disconnect_events_session_id_server_sessions_id_fk": { + "name": "disconnect_events_session_id_server_sessions_id_fk", + "tableFrom": "disconnect_events", + "tableTo": "server_sessions", + "columnsFrom": ["session_id"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "kicks": { + "name": "kicks", + "columns": { + "id": { + "name": "id", + "type": "integer", + "primaryKey": true, + "notNull": true, + "autoincrement": true + }, + "player_id": { + "name": "player_id", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "reason": { + "name": "reason", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "revoked": { + "name": "revoked", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": 0 + }, + "issuer": { + "name": "issuer", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "issued_at": { + "name": "issued_at", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "CURRENT_TIMESTAMP" + } + }, + "indexes": {}, + "foreignKeys": { + "kicks_player_id_players_id_fk": { + "name": "kicks_player_id_players_id_fk", + "tableFrom": "kicks", + "tableTo": "players", + "columnsFrom": ["player_id"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "kicks_issuer_admin_users_id_fk": { + "name": "kicks_issuer_admin_users_id_fk", + "tableFrom": "kicks", + "tableTo": "admin_users", + "columnsFrom": ["issuer"], + "columnsTo": ["id"], + "onDelete": "set null", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "perf_snapshots": { + "name": "perf_snapshots", + "columns": { + "id": { + "name": "id", + "type": "integer", + "primaryKey": true, + "notNull": true, + "autoincrement": true + }, + "session_id": { + "name": "session_id", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "ts": { + "name": "ts", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "players": { + "name": "players", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": 0 + }, + "fxs_memory": { + "name": "fxs_memory", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "node_memory": { + "name": "node_memory", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "perf": { + "name": "perf", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + } + }, + "indexes": { + "perf_snapshot_session_ts_idx": { + "name": "perf_snapshot_session_ts_idx", + "columns": ["session_id", "ts"], + "isUnique": false + } + }, + "foreignKeys": { + "perf_snapshots_session_id_server_sessions_id_fk": { + "name": "perf_snapshots_session_id_server_sessions_id_fk", + "tableFrom": "perf_snapshots", + "tableTo": "server_sessions", + "columnsFrom": ["session_id"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "player_identifiers": { + "name": "player_identifiers", + "columns": { + "id": { + "name": "id", + "type": "integer", + "primaryKey": true, + "notNull": true, + "autoincrement": true + }, + "player_id": { + "name": "player_id", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "type": { + "name": "type", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "value": { + "name": "value", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + } + }, + "indexes": { + "idx_identifier_value": { + "name": "idx_identifier_value", + "columns": ["value"], + "isUnique": false + }, + "player_identifiers_type_value_unique": { + "name": "player_identifiers_type_value_unique", + "columns": ["type", "value"], + "isUnique": true + } + }, + "foreignKeys": { + "player_identifiers_player_id_players_id_fk": { + "name": "player_identifiers_player_id_players_id_fk", + "tableFrom": "player_identifiers", + "tableTo": "players", + "columnsFrom": ["player_id"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "player_notes": { + "name": "player_notes", + "columns": { + "id": { + "name": "id", + "type": "integer", + "primaryKey": true, + "notNull": true, + "autoincrement": true + }, + "player_id": { + "name": "player_id", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "content": { + "name": "content", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "issuer": { + "name": "issuer", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "issued_at": { + "name": "issued_at", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "CURRENT_TIMESTAMP" + } + }, + "indexes": {}, + "foreignKeys": { + "player_notes_player_id_players_id_fk": { + "name": "player_notes_player_id_players_id_fk", + "tableFrom": "player_notes", + "tableTo": "players", + "columnsFrom": ["player_id"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "player_notes_issuer_admin_users_id_fk": { + "name": "player_notes_issuer_admin_users_id_fk", + "tableFrom": "player_notes", + "tableTo": "admin_users", + "columnsFrom": ["issuer"], + "columnsTo": ["id"], + "onDelete": "set null", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "players": { + "name": "players", + "columns": { + "id": { + "name": "id", + "type": "integer", + "primaryKey": true, + "notNull": true, + "autoincrement": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "playtime": { + "name": "playtime", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": 0 + }, + "first_seen": { + "name": "first_seen", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "CURRENT_TIMESTAMP" + }, + "last_seen": { + "name": "last_seen", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "CURRENT_TIMESTAMP" + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "report_messages": { + "name": "report_messages", + "columns": { + "id": { + "name": "id", + "type": "integer", + "primaryKey": true, + "notNull": true, + "autoincrement": true + }, + "report_id": { + "name": "report_id", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "player_id": { + "name": "player_id", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "admin_id": { + "name": "admin_id", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "message": { + "name": "message", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "timestamp": { + "name": "timestamp", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "CURRENT_TIMESTAMP" + } + }, + "indexes": {}, + "foreignKeys": { + "report_messages_report_id_reports_id_fk": { + "name": "report_messages_report_id_reports_id_fk", + "tableFrom": "report_messages", + "tableTo": "reports", + "columnsFrom": ["report_id"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "report_messages_player_id_players_id_fk": { + "name": "report_messages_player_id_players_id_fk", + "tableFrom": "report_messages", + "tableTo": "players", + "columnsFrom": ["player_id"], + "columnsTo": ["id"], + "onDelete": "set null", + "onUpdate": "no action" + }, + "report_messages_admin_id_admin_users_id_fk": { + "name": "report_messages_admin_id_admin_users_id_fk", + "tableFrom": "report_messages", + "tableTo": "admin_users", + "columnsFrom": ["admin_id"], + "columnsTo": ["id"], + "onDelete": "set null", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "reports": { + "name": "reports", + "columns": { + "id": { + "name": "id", + "type": "integer", + "primaryKey": true, + "notNull": true, + "autoincrement": true + }, + "reporter_id": { + "name": "reporter_id", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "subject": { + "name": "subject", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "status": { + "name": "status", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "'open'" + }, + "opened_at": { + "name": "opened_at", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "CURRENT_TIMESTAMP" + }, + "last_action": { + "name": "last_action", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "CURRENT_TIMESTAMP" + } + }, + "indexes": {}, + "foreignKeys": { + "reports_reporter_id_players_id_fk": { + "name": "reports_reporter_id_players_id_fk", + "tableFrom": "reports", + "tableTo": "players", + "columnsFrom": ["reporter_id"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "server_sessions": { + "name": "server_sessions", + "columns": { + "id": { + "name": "id", + "type": "integer", + "primaryKey": true, + "notNull": true, + "autoincrement": true + }, + "started_at": { + "name": "started_at", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "ended_at": { + "name": "ended_at", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "close_reason": { + "name": "close_reason", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + } + }, + "indexes": { + "server_session_started_idx": { + "name": "server_session_started_idx", + "columns": ["started_at"], + "isUnique": false + } + }, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "sessions": { + "name": "sessions", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true, + "autoincrement": false + }, + "admin_id": { + "name": "admin_id", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "created_at": { + "name": "created_at", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "expires_at": { + "name": "expires_at", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + } + }, + "indexes": { + "sessions_admin_idx": { + "name": "sessions_admin_idx", + "columns": ["admin_id"], + "isUnique": false + } + }, + "foreignKeys": { + "sessions_admin_id_admin_users_id_fk": { + "name": "sessions_admin_id_admin_users_id_fk", + "tableFrom": "sessions", + "tableTo": "admin_users", + "columnsFrom": ["admin_id"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "settings": { + "name": "settings", + "columns": { + "key": { + "name": "key", + "type": "text", + "primaryKey": true, + "notNull": true, + "autoincrement": false + }, + "value": { + "name": "value", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "updated_at": { + "name": "updated_at", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "warns": { + "name": "warns", + "columns": { + "id": { + "name": "id", + "type": "integer", + "primaryKey": true, + "notNull": true, + "autoincrement": true + }, + "player_id": { + "name": "player_id", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "reason": { + "name": "reason", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "read": { + "name": "read", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": 0 + }, + "revoked": { + "name": "revoked", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": 0 + }, + "issuer": { + "name": "issuer", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "issued_at": { + "name": "issued_at", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "CURRENT_TIMESTAMP" + } + }, + "indexes": {}, + "foreignKeys": { + "warns_player_id_players_id_fk": { + "name": "warns_player_id_players_id_fk", + "tableFrom": "warns", + "tableTo": "players", + "columnsFrom": ["player_id"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "warns_issuer_admin_users_id_fk": { + "name": "warns_issuer_admin_users_id_fk", + "tableFrom": "warns", + "tableTo": "admin_users", + "columnsFrom": ["issuer"], + "columnsTo": ["id"], + "onDelete": "set null", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "whitelisted_identifiers": { + "name": "whitelisted_identifiers", + "columns": { + "id": { + "name": "id", + "type": "integer", + "primaryKey": true, + "notNull": true, + "autoincrement": true + }, + "type": { + "name": "type", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "value": { + "name": "value", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "admin_id": { + "name": "admin_id", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "system": { + "name": "system", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": 0 + }, + "added_at": { + "name": "added_at", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "CURRENT_TIMESTAMP" + } + }, + "indexes": { + "idx_whitelist_identifier_value": { + "name": "idx_whitelist_identifier_value", + "columns": ["value"], + "isUnique": false + }, + "whitelisted_identifiers_type_value_unique": { + "name": "whitelisted_identifiers_type_value_unique", + "columns": ["type", "value"], + "isUnique": true + } + }, + "foreignKeys": { + "whitelisted_identifiers_admin_id_admin_users_id_fk": { + "name": "whitelisted_identifiers_admin_id_admin_users_id_fk", + "tableFrom": "whitelisted_identifiers", + "tableTo": "admin_users", + "columnsFrom": ["admin_id"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + } + }, + "views": {}, + "enums": {}, + "_meta": { + "schemas": {}, + "tables": {}, + "columns": {} + }, + "internal": { + "indexes": {} + } +} diff --git a/packages/database/migrations/meta/0007_snapshot.json b/packages/database/migrations/meta/0007_snapshot.json new file mode 100644 index 00000000..3aae73f4 --- /dev/null +++ b/packages/database/migrations/meta/0007_snapshot.json @@ -0,0 +1,1295 @@ +{ + "version": "6", + "dialect": "sqlite", + "id": "540f9400-9822-42ad-9948-96aa5d41473e", + "prevId": "deca3854-467f-4e2e-b8f1-6b539282e29b", + "tables": { + "admin_groups": { + "name": "admin_groups", + "columns": { + "id": { + "name": "id", + "type": "integer", + "primaryKey": true, + "notNull": true, + "autoincrement": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "permissions": { + "name": "permissions", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": 0 + }, + "colour": { + "name": "colour", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "'#ffffff'" + }, + "icon": { + "name": "icon", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "created_at": { + "name": "created_at", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "CURRENT_TIMESTAMP" + } + }, + "indexes": { + "admin_groups_name_unique": { + "name": "admin_groups_name_unique", + "columns": ["name"], + "isUnique": true + } + }, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "admin_users": { + "name": "admin_users", + "columns": { + "id": { + "name": "id", + "type": "integer", + "primaryKey": true, + "notNull": true, + "autoincrement": true + }, + "username": { + "name": "username", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "password_hash": { + "name": "password_hash", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "player_id": { + "name": "player_id", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "permissions": { + "name": "permissions", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": 0 + }, + "group_id": { + "name": "group_id", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "created_at": { + "name": "created_at", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "last_login_at": { + "name": "last_login_at", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + } + }, + "indexes": { + "admin_users_username_unique": { + "name": "admin_users_username_unique", + "columns": ["username"], + "isUnique": true + }, + "admin_username_idx": { + "name": "admin_username_idx", + "columns": ["username"], + "isUnique": false + } + }, + "foreignKeys": { + "admin_users_player_id_players_id_fk": { + "name": "admin_users_player_id_players_id_fk", + "tableFrom": "admin_users", + "tableTo": "players", + "columnsFrom": ["player_id"], + "columnsTo": ["id"], + "onDelete": "set null", + "onUpdate": "no action" + }, + "admin_users_group_id_admin_groups_id_fk": { + "name": "admin_users_group_id_admin_groups_id_fk", + "tableFrom": "admin_users", + "tableTo": "admin_groups", + "columnsFrom": ["group_id"], + "columnsTo": ["id"], + "onDelete": "set null", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "api_tokens": { + "name": "api_tokens", + "columns": { + "id": { + "name": "id", + "type": "integer", + "primaryKey": true, + "notNull": true, + "autoincrement": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "token": { + "name": "token", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "created_at": { + "name": "created_at", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "last_used": { + "name": "last_used", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "revoked_at": { + "name": "revoked_at", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + } + }, + "indexes": { + "api_tokens_token_unique": { + "name": "api_tokens_token_unique", + "columns": ["token"], + "isUnique": true + }, + "tokens_token_idx": { + "name": "tokens_token_idx", + "columns": ["token"], + "isUnique": false + } + }, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "audit_log": { + "name": "audit_log", + "columns": { + "id": { + "name": "id", + "type": "integer", + "primaryKey": true, + "notNull": true, + "autoincrement": true + }, + "admin_id": { + "name": "admin_id", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "action": { + "name": "action", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "player_id": { + "name": "player_id", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "metadata": { + "name": "metadata", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "created_at": { + "name": "created_at", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + } + }, + "indexes": { + "audit_admin_idx": { + "name": "audit_admin_idx", + "columns": ["admin_id"], + "isUnique": false + }, + "audit_created_idx": { + "name": "audit_created_idx", + "columns": ["created_at"], + "isUnique": false + } + }, + "foreignKeys": { + "audit_log_admin_id_admin_users_id_fk": { + "name": "audit_log_admin_id_admin_users_id_fk", + "tableFrom": "audit_log", + "tableTo": "admin_users", + "columnsFrom": ["admin_id"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "audit_log_player_id_players_id_fk": { + "name": "audit_log_player_id_players_id_fk", + "tableFrom": "audit_log", + "tableTo": "players", + "columnsFrom": ["player_id"], + "columnsTo": ["id"], + "onDelete": "set null", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "bans": { + "name": "bans", + "columns": { + "id": { + "name": "id", + "type": "integer", + "primaryKey": true, + "notNull": true, + "autoincrement": true + }, + "player_id": { + "name": "player_id", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "reason": { + "name": "reason", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "issuer": { + "name": "issuer", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "expires_at": { + "name": "expires_at", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "created_at": { + "name": "created_at", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "revoked_at": { + "name": "revoked_at", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + } + }, + "indexes": { + "bans_player_idx": { + "name": "bans_player_idx", + "columns": ["player_id"], + "isUnique": false + } + }, + "foreignKeys": { + "bans_player_id_players_id_fk": { + "name": "bans_player_id_players_id_fk", + "tableFrom": "bans", + "tableTo": "players", + "columnsFrom": ["player_id"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "bans_issuer_admin_users_id_fk": { + "name": "bans_issuer_admin_users_id_fk", + "tableFrom": "bans", + "tableTo": "admin_users", + "columnsFrom": ["issuer"], + "columnsTo": ["id"], + "onDelete": "set null", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "disconnect_events": { + "name": "disconnect_events", + "columns": { + "id": { + "name": "id", + "type": "integer", + "primaryKey": true, + "notNull": true, + "autoincrement": true + }, + "session_id": { + "name": "session_id", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "ts": { + "name": "ts", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "category": { + "name": "category", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + } + }, + "indexes": { + "disconnect_event_session_ts_idx": { + "name": "disconnect_event_session_ts_idx", + "columns": ["session_id", "ts"], + "isUnique": false + } + }, + "foreignKeys": { + "disconnect_events_session_id_server_sessions_id_fk": { + "name": "disconnect_events_session_id_server_sessions_id_fk", + "tableFrom": "disconnect_events", + "tableTo": "server_sessions", + "columnsFrom": ["session_id"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "kicks": { + "name": "kicks", + "columns": { + "id": { + "name": "id", + "type": "integer", + "primaryKey": true, + "notNull": true, + "autoincrement": true + }, + "player_id": { + "name": "player_id", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "reason": { + "name": "reason", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "revoked": { + "name": "revoked", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": 0 + }, + "issuer": { + "name": "issuer", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "issued_at": { + "name": "issued_at", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "CURRENT_TIMESTAMP" + } + }, + "indexes": {}, + "foreignKeys": { + "kicks_player_id_players_id_fk": { + "name": "kicks_player_id_players_id_fk", + "tableFrom": "kicks", + "tableTo": "players", + "columnsFrom": ["player_id"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "kicks_issuer_admin_users_id_fk": { + "name": "kicks_issuer_admin_users_id_fk", + "tableFrom": "kicks", + "tableTo": "admin_users", + "columnsFrom": ["issuer"], + "columnsTo": ["id"], + "onDelete": "set null", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "perf_snapshots": { + "name": "perf_snapshots", + "columns": { + "id": { + "name": "id", + "type": "integer", + "primaryKey": true, + "notNull": true, + "autoincrement": true + }, + "session_id": { + "name": "session_id", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "ts": { + "name": "ts", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "players": { + "name": "players", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": 0 + }, + "fxs_memory": { + "name": "fxs_memory", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "node_memory": { + "name": "node_memory", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "perf": { + "name": "perf", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + } + }, + "indexes": { + "perf_snapshot_session_ts_idx": { + "name": "perf_snapshot_session_ts_idx", + "columns": ["session_id", "ts"], + "isUnique": false + } + }, + "foreignKeys": { + "perf_snapshots_session_id_server_sessions_id_fk": { + "name": "perf_snapshots_session_id_server_sessions_id_fk", + "tableFrom": "perf_snapshots", + "tableTo": "server_sessions", + "columnsFrom": ["session_id"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "player_identifiers": { + "name": "player_identifiers", + "columns": { + "id": { + "name": "id", + "type": "integer", + "primaryKey": true, + "notNull": true, + "autoincrement": true + }, + "player_id": { + "name": "player_id", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "type": { + "name": "type", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "value": { + "name": "value", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + } + }, + "indexes": { + "idx_identifier_value": { + "name": "idx_identifier_value", + "columns": ["value"], + "isUnique": false + }, + "player_identifiers_type_value_unique": { + "name": "player_identifiers_type_value_unique", + "columns": ["type", "value"], + "isUnique": true + } + }, + "foreignKeys": { + "player_identifiers_player_id_players_id_fk": { + "name": "player_identifiers_player_id_players_id_fk", + "tableFrom": "player_identifiers", + "tableTo": "players", + "columnsFrom": ["player_id"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "player_notes": { + "name": "player_notes", + "columns": { + "id": { + "name": "id", + "type": "integer", + "primaryKey": true, + "notNull": true, + "autoincrement": true + }, + "player_id": { + "name": "player_id", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "content": { + "name": "content", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "issuer": { + "name": "issuer", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "issued_at": { + "name": "issued_at", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "CURRENT_TIMESTAMP" + } + }, + "indexes": {}, + "foreignKeys": { + "player_notes_player_id_players_id_fk": { + "name": "player_notes_player_id_players_id_fk", + "tableFrom": "player_notes", + "tableTo": "players", + "columnsFrom": ["player_id"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "player_notes_issuer_admin_users_id_fk": { + "name": "player_notes_issuer_admin_users_id_fk", + "tableFrom": "player_notes", + "tableTo": "admin_users", + "columnsFrom": ["issuer"], + "columnsTo": ["id"], + "onDelete": "set null", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "player_sessions": { + "name": "player_sessions", + "columns": { + "id": { + "name": "id", + "type": "integer", + "primaryKey": true, + "notNull": true, + "autoincrement": true + }, + "player_id": { + "name": "player_id", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "server_session_id": { + "name": "server_session_id", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "connected_at": { + "name": "connected_at", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "disconnected_at": { + "name": "disconnected_at", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "duration_ms": { + "name": "duration_ms", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "end_reason": { + "name": "end_reason", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + } + }, + "indexes": { + "player_session_player_connected_idx": { + "name": "player_session_player_connected_idx", + "columns": ["player_id", "connected_at"], + "isUnique": false + } + }, + "foreignKeys": { + "player_sessions_player_id_players_id_fk": { + "name": "player_sessions_player_id_players_id_fk", + "tableFrom": "player_sessions", + "tableTo": "players", + "columnsFrom": ["player_id"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "player_sessions_server_session_id_server_sessions_id_fk": { + "name": "player_sessions_server_session_id_server_sessions_id_fk", + "tableFrom": "player_sessions", + "tableTo": "server_sessions", + "columnsFrom": ["server_session_id"], + "columnsTo": ["id"], + "onDelete": "set null", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "players": { + "name": "players", + "columns": { + "id": { + "name": "id", + "type": "integer", + "primaryKey": true, + "notNull": true, + "autoincrement": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "playtime": { + "name": "playtime", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": 0 + }, + "first_seen": { + "name": "first_seen", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "CURRENT_TIMESTAMP" + }, + "last_seen": { + "name": "last_seen", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "CURRENT_TIMESTAMP" + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "report_messages": { + "name": "report_messages", + "columns": { + "id": { + "name": "id", + "type": "integer", + "primaryKey": true, + "notNull": true, + "autoincrement": true + }, + "report_id": { + "name": "report_id", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "player_id": { + "name": "player_id", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "admin_id": { + "name": "admin_id", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "message": { + "name": "message", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "timestamp": { + "name": "timestamp", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "CURRENT_TIMESTAMP" + } + }, + "indexes": {}, + "foreignKeys": { + "report_messages_report_id_reports_id_fk": { + "name": "report_messages_report_id_reports_id_fk", + "tableFrom": "report_messages", + "tableTo": "reports", + "columnsFrom": ["report_id"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "report_messages_player_id_players_id_fk": { + "name": "report_messages_player_id_players_id_fk", + "tableFrom": "report_messages", + "tableTo": "players", + "columnsFrom": ["player_id"], + "columnsTo": ["id"], + "onDelete": "set null", + "onUpdate": "no action" + }, + "report_messages_admin_id_admin_users_id_fk": { + "name": "report_messages_admin_id_admin_users_id_fk", + "tableFrom": "report_messages", + "tableTo": "admin_users", + "columnsFrom": ["admin_id"], + "columnsTo": ["id"], + "onDelete": "set null", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "reports": { + "name": "reports", + "columns": { + "id": { + "name": "id", + "type": "integer", + "primaryKey": true, + "notNull": true, + "autoincrement": true + }, + "reporter_id": { + "name": "reporter_id", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "subject": { + "name": "subject", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "status": { + "name": "status", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "'open'" + }, + "opened_at": { + "name": "opened_at", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "CURRENT_TIMESTAMP" + }, + "last_action": { + "name": "last_action", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "CURRENT_TIMESTAMP" + } + }, + "indexes": {}, + "foreignKeys": { + "reports_reporter_id_players_id_fk": { + "name": "reports_reporter_id_players_id_fk", + "tableFrom": "reports", + "tableTo": "players", + "columnsFrom": ["reporter_id"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "server_sessions": { + "name": "server_sessions", + "columns": { + "id": { + "name": "id", + "type": "integer", + "primaryKey": true, + "notNull": true, + "autoincrement": true + }, + "started_at": { + "name": "started_at", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "ended_at": { + "name": "ended_at", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "close_reason": { + "name": "close_reason", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + } + }, + "indexes": { + "server_session_started_idx": { + "name": "server_session_started_idx", + "columns": ["started_at"], + "isUnique": false + } + }, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "sessions": { + "name": "sessions", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true, + "autoincrement": false + }, + "admin_id": { + "name": "admin_id", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "created_at": { + "name": "created_at", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "expires_at": { + "name": "expires_at", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + } + }, + "indexes": { + "sessions_admin_idx": { + "name": "sessions_admin_idx", + "columns": ["admin_id"], + "isUnique": false + } + }, + "foreignKeys": { + "sessions_admin_id_admin_users_id_fk": { + "name": "sessions_admin_id_admin_users_id_fk", + "tableFrom": "sessions", + "tableTo": "admin_users", + "columnsFrom": ["admin_id"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "settings": { + "name": "settings", + "columns": { + "key": { + "name": "key", + "type": "text", + "primaryKey": true, + "notNull": true, + "autoincrement": false + }, + "value": { + "name": "value", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "updated_at": { + "name": "updated_at", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "warns": { + "name": "warns", + "columns": { + "id": { + "name": "id", + "type": "integer", + "primaryKey": true, + "notNull": true, + "autoincrement": true + }, + "player_id": { + "name": "player_id", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "reason": { + "name": "reason", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "read": { + "name": "read", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": 0 + }, + "revoked": { + "name": "revoked", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": 0 + }, + "issuer": { + "name": "issuer", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "issued_at": { + "name": "issued_at", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "CURRENT_TIMESTAMP" + } + }, + "indexes": {}, + "foreignKeys": { + "warns_player_id_players_id_fk": { + "name": "warns_player_id_players_id_fk", + "tableFrom": "warns", + "tableTo": "players", + "columnsFrom": ["player_id"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "warns_issuer_admin_users_id_fk": { + "name": "warns_issuer_admin_users_id_fk", + "tableFrom": "warns", + "tableTo": "admin_users", + "columnsFrom": ["issuer"], + "columnsTo": ["id"], + "onDelete": "set null", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "whitelisted_identifiers": { + "name": "whitelisted_identifiers", + "columns": { + "id": { + "name": "id", + "type": "integer", + "primaryKey": true, + "notNull": true, + "autoincrement": true + }, + "type": { + "name": "type", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "value": { + "name": "value", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "admin_id": { + "name": "admin_id", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "system": { + "name": "system", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": 0 + }, + "added_at": { + "name": "added_at", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "CURRENT_TIMESTAMP" + } + }, + "indexes": { + "idx_whitelist_identifier_value": { + "name": "idx_whitelist_identifier_value", + "columns": ["value"], + "isUnique": false + }, + "whitelisted_identifiers_type_value_unique": { + "name": "whitelisted_identifiers_type_value_unique", + "columns": ["type", "value"], + "isUnique": true + } + }, + "foreignKeys": { + "whitelisted_identifiers_admin_id_admin_users_id_fk": { + "name": "whitelisted_identifiers_admin_id_admin_users_id_fk", + "tableFrom": "whitelisted_identifiers", + "tableTo": "admin_users", + "columnsFrom": ["admin_id"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + } + }, + "views": {}, + "enums": {}, + "_meta": { + "schemas": {}, + "tables": {}, + "columns": {} + }, + "internal": { + "indexes": {} + } +} diff --git a/packages/database/migrations/meta/_journal.json b/packages/database/migrations/meta/_journal.json index c50ff192..0b5a3e67 100644 --- a/packages/database/migrations/meta/_journal.json +++ b/packages/database/migrations/meta/_journal.json @@ -29,6 +29,34 @@ "when": 1779984612063, "tag": "0003_jittery_mystique", "breakpoints": true + }, + { + "idx": 4, + "version": "6", + "when": 1784656552906, + "tag": "0004_uneven_silver_sable", + "breakpoints": true + }, + { + "idx": 5, + "version": "6", + "when": 1784656609840, + "tag": "0005_chubby_daredevil", + "breakpoints": true + }, + { + "idx": 6, + "version": "6", + "when": 1784656694361, + "tag": "0006_productive_thor", + "breakpoints": true + }, + { + "idx": 7, + "version": "6", + "when": 1784656776216, + "tag": "0007_petite_skrulls", + "breakpoints": true } ] } diff --git a/packages/database/src/migrations/migrations/0004_disconnect_sessions.ts b/packages/database/src/migrations/migrations/0004_disconnect_sessions.ts deleted file mode 100644 index 55f49edf..00000000 --- a/packages/database/src/migrations/migrations/0004_disconnect_sessions.ts +++ /dev/null @@ -1,26 +0,0 @@ -import type { Migration } from '../types'; - -export const m0004_disconnect_sessions: Migration = { - version: 4, - description: 'Add server_sessions + perf_snapshots', - up: [ - `CREATE TABLE \`server_sessions\` ( - \`id\` integer PRIMARY KEY AUTOINCREMENT NOT NULL, - \`started_at\` integer NOT NULL, - \`ended_at\` integer, - \`close_reason\` text -)`, - `CREATE INDEX \`server_session_started_idx\` ON \`server_sessions\` (\`started_at\`)`, - `CREATE TABLE \`perf_snapshots\` ( - \`id\` integer PRIMARY KEY AUTOINCREMENT NOT NULL, - \`session_id\` integer NOT NULL, - \`ts\` integer NOT NULL, - \`players\` integer DEFAULT 0 NOT NULL, - \`fxs_memory\` integer, - \`node_memory\` integer, - \`perf\` text NOT NULL, - FOREIGN KEY (\`session_id\`) REFERENCES \`server_sessions\`(\`id\`) ON UPDATE no action ON DELETE cascade -)`, - `CREATE INDEX \`perf_snapshot_session_ts_idx\` ON \`perf_snapshots\` (\`session_id\`,\`ts\`)`, - ], -}; diff --git a/packages/database/src/migrations/migrations/0004_uneven_silver_sable.ts b/packages/database/src/migrations/migrations/0004_uneven_silver_sable.ts new file mode 100644 index 00000000..f3053748 --- /dev/null +++ b/packages/database/src/migrations/migrations/0004_uneven_silver_sable.ts @@ -0,0 +1,26 @@ +import type { Migration } from '../types'; + +export const m0004_uneven_silver_sable: Migration = { + version: 4, + description: 'Add server_sessions + perf_snapshots', + up: [ + `CREATE TABLE \`perf_snapshots\` ( + \`id\` integer PRIMARY KEY AUTOINCREMENT NOT NULL, + \`session_id\` integer NOT NULL, + \`ts\` integer NOT NULL, + \`players\` integer DEFAULT 0 NOT NULL, + \`fxs_memory\` integer, + \`node_memory\` integer, + \`perf\` text NOT NULL, + FOREIGN KEY (\`session_id\`) REFERENCES \`server_sessions\`(\`id\`) ON UPDATE no action ON DELETE cascade + )`, + `CREATE INDEX \`perf_snapshot_session_ts_idx\` ON \`perf_snapshots\` (\`session_id\`,\`ts\`)`, + `CREATE TABLE \`server_sessions\` ( + \`id\` integer PRIMARY KEY AUTOINCREMENT NOT NULL, + \`started_at\` integer NOT NULL, + \`ended_at\` integer, + \`close_reason\` text + )`, + `CREATE INDEX \`server_session_started_idx\` ON \`server_sessions\` (\`started_at\`)`, + ], +}; diff --git a/packages/database/src/migrations/migrations/0005_chubby_daredevil.ts b/packages/database/src/migrations/migrations/0005_chubby_daredevil.ts new file mode 100644 index 00000000..c3df5510 --- /dev/null +++ b/packages/database/src/migrations/migrations/0005_chubby_daredevil.ts @@ -0,0 +1,17 @@ +import type { Migration } from '../types'; + +export const m0005_chubby_daredevil: Migration = { + version: 5, + description: + 'Add disconnect_events for per-drop timestamps (time-range stats)', + up: [ + `CREATE TABLE \`disconnect_events\` ( + \`id\` integer PRIMARY KEY AUTOINCREMENT NOT NULL, + \`session_id\` integer NOT NULL, + \`ts\` integer NOT NULL, + \`category\` text NOT NULL, + FOREIGN KEY (\`session_id\`) REFERENCES \`server_sessions\`(\`id\`) ON UPDATE no action ON DELETE cascade + )`, + `CREATE INDEX \`disconnect_event_session_ts_idx\` ON \`disconnect_events\` (\`session_id\`,\`ts\`)`, + ], +}; diff --git a/packages/database/src/migrations/migrations/0005_disconnect_events.ts b/packages/database/src/migrations/migrations/0005_disconnect_events.ts deleted file mode 100644 index 9e8212c9..00000000 --- a/packages/database/src/migrations/migrations/0005_disconnect_events.ts +++ /dev/null @@ -1,17 +0,0 @@ -import type { Migration } from '../types'; - -export const m0005_disconnect_events: Migration = { - version: 5, - description: - 'Add disconnect_events for per-drop timestamps (time-range stats)', - up: [ - `CREATE TABLE \`disconnect_events\` ( - \`id\` integer PRIMARY KEY AUTOINCREMENT NOT NULL, - \`session_id\` integer NOT NULL, - \`ts\` integer NOT NULL, - \`category\` text NOT NULL, - FOREIGN KEY (\`session_id\`) REFERENCES \`server_sessions\`(\`id\`) ON UPDATE no action ON DELETE cascade -)`, - `CREATE INDEX \`disconnect_event_session_ts_idx\` ON \`disconnect_events\` (\`session_id\`, \`ts\`)`, - ], -}; diff --git a/packages/database/src/migrations/migrations/0006_admin_groups.ts b/packages/database/src/migrations/migrations/0006_admin_groups.ts deleted file mode 100644 index 2b725b77..00000000 --- a/packages/database/src/migrations/migrations/0006_admin_groups.ts +++ /dev/null @@ -1,28 +0,0 @@ -import type { Migration } from '../types'; - -export const m0006_admin_groups: Migration = { - version: 6, - description: - 'Add admin_groups, assign matching admins and clear their personal bitmask', - up: [ - `CREATE TABLE \`admin_groups\` ( - \`id\` integer PRIMARY KEY AUTOINCREMENT NOT NULL, - \`name\` text NOT NULL, - \`permissions\` integer DEFAULT 0 NOT NULL, - \`colour\` text DEFAULT '#ffffff' NOT NULL, - \`icon\` text, - \`created_at\` integer DEFAULT CURRENT_TIMESTAMP NOT NULL -)`, - `CREATE UNIQUE INDEX \`admin_groups_name_unique\` ON \`admin_groups\` (\`name\`)`, - `ALTER TABLE \`admin_users\` ADD \`group_id\` integer REFERENCES admin_groups(id) ON DELETE SET NULL`, - `INSERT INTO \`admin_groups\` (\`name\`, \`permissions\`, \`colour\`, \`icon\`) VALUES - ('Development', 292864, '#00FF00', 'FileCode'), - ('Management', 167935, '#0000FF', 'UserRoundKey'), - ('Moderation', 1991, '#ff6600', 'Shield')`, - `UPDATE \`admin_users\` SET \`group_id\` = ( - SELECT g.\`id\` FROM \`admin_groups\` g - WHERE g.\`permissions\` = \`admin_users\`.\`permissions\` -) WHERE (\`permissions\` & 1073741824) = 0`, - `UPDATE \`admin_users\` SET \`permissions\` = 0 WHERE \`group_id\` IS NOT NULL`, - ], -}; diff --git a/packages/database/src/migrations/migrations/0006_productive_thor.ts b/packages/database/src/migrations/migrations/0006_productive_thor.ts new file mode 100644 index 00000000..ca0eca88 --- /dev/null +++ b/packages/database/src/migrations/migrations/0006_productive_thor.ts @@ -0,0 +1,28 @@ +import type { Migration } from '../types'; + +export const m0006_productive_thor: Migration = { + version: 6, + description: + 'Add admin_groups, assign matching admins and clear their personal bitmask', + up: [ + `CREATE TABLE \`admin_groups\` ( + \`id\` integer PRIMARY KEY AUTOINCREMENT NOT NULL, + \`name\` text NOT NULL, + \`permissions\` integer DEFAULT 0 NOT NULL, + \`colour\` text DEFAULT '#ffffff' NOT NULL, + \`icon\` text, + \`created_at\` integer DEFAULT CURRENT_TIMESTAMP NOT NULL + )`, + `CREATE UNIQUE INDEX \`admin_groups_name_unique\` ON \`admin_groups\` (\`name\`)`, + `ALTER TABLE \`admin_users\` ADD \`group_id\` integer REFERENCES admin_groups(id) ON DELETE SET NULL`, + `INSERT INTO \`admin_groups\` (\`name\`, \`permissions\`, \`colour\`, \`icon\`) VALUES + ('Development', 292864, '#00FF00', 'FileCode'), + ('Management', 167935, '#0000FF', 'UserRoundKey'), + ('Moderation', 1991, '#ff6600', 'Shield')`, + `UPDATE \`admin_users\` SET \`group_id\` = ( + SELECT g.\`id\` FROM \`admin_groups\` g + WHERE g.\`permissions\` = \`admin_users\`.\`permissions\` + ) WHERE (\`permissions\` & 1073741824) = 0`, + `UPDATE \`admin_users\` SET \`permissions\` = 0 WHERE \`group_id\` IS NOT NULL`, + ], +}; diff --git a/packages/database/src/migrations/migrations/0007_petite_skrulls.ts b/packages/database/src/migrations/migrations/0007_petite_skrulls.ts new file mode 100644 index 00000000..48e54101 --- /dev/null +++ b/packages/database/src/migrations/migrations/0007_petite_skrulls.ts @@ -0,0 +1,20 @@ +import type { Migration } from '../types'; + +export const m0007_petite_skrulls: Migration = { + version: 7, + description: 'Add player_sessions for per-session activity + heat map', + up: [ + `CREATE TABLE \`player_sessions\` ( + \`id\` integer PRIMARY KEY AUTOINCREMENT NOT NULL, + \`player_id\` integer NOT NULL, + \`server_session_id\` integer, + \`connected_at\` integer NOT NULL, + \`disconnected_at\` integer, + \`duration_ms\` integer, + \`end_reason\` text, + FOREIGN KEY (\`player_id\`) REFERENCES \`players\`(\`id\`) ON UPDATE no action ON DELETE cascade, + FOREIGN KEY (\`server_session_id\`) REFERENCES \`server_sessions\`(\`id\`) ON UPDATE no action ON DELETE set null + )`, + `CREATE INDEX \`player_session_player_connected_idx\` ON \`player_sessions\` (\`player_id\`,\`connected_at\`)`, + ], +}; diff --git a/packages/database/src/migrations/migrations/0007_player_sessions.ts b/packages/database/src/migrations/migrations/0007_player_sessions.ts deleted file mode 100644 index ff7e9525..00000000 --- a/packages/database/src/migrations/migrations/0007_player_sessions.ts +++ /dev/null @@ -1,20 +0,0 @@ -import type { Migration } from '../types'; - -export const m0007_player_sessions: Migration = { - version: 7, - description: 'Add player_sessions for per-session activity + heat map', - up: [ - `CREATE TABLE \`player_sessions\` ( - \`id\` integer PRIMARY KEY AUTOINCREMENT NOT NULL, - \`player_id\` integer NOT NULL, - \`server_session_id\` integer, - \`connected_at\` integer NOT NULL, - \`disconnected_at\` integer, - \`duration_ms\` integer, - \`end_reason\` text, - FOREIGN KEY (\`player_id\`) REFERENCES \`players\`(\`id\`) ON UPDATE no action ON DELETE cascade, - FOREIGN KEY (\`server_session_id\`) REFERENCES \`server_sessions\`(\`id\`) ON UPDATE no action ON DELETE set null -)`, - `CREATE INDEX \`player_session_player_connected_idx\` ON \`player_sessions\` (\`player_id\`, \`connected_at\`)`, - ], -}; diff --git a/packages/database/src/migrations/migrations/index.ts b/packages/database/src/migrations/migrations/index.ts index 1f0c45a0..8352e1fb 100644 --- a/packages/database/src/migrations/migrations/index.ts +++ b/packages/database/src/migrations/migrations/index.ts @@ -1,7 +1,7 @@ -import { m0007_player_sessions } from './0007_player_sessions'; -import { m0006_admin_groups } from './0006_admin_groups'; -import { m0005_disconnect_events } from './0005_disconnect_events'; -import { m0004_disconnect_sessions } from './0004_disconnect_sessions'; +import { m0007_petite_skrulls } from './0007_petite_skrulls'; +import { m0006_productive_thor } from './0006_productive_thor'; +import { m0005_chubby_daredevil } from './0005_chubby_daredevil'; +import { m0004_uneven_silver_sable } from './0004_uneven_silver_sable'; import { m0003_jittery_mystique } from './0003_jittery_mystique'; import { m0002_dry_molten_man } from './0002_dry_molten_man'; import { m0001_dapper_landau } from './0001_dapper_landau'; @@ -29,8 +29,8 @@ export const migrations: Migration[] = [ m0001_dapper_landau, m0002_dry_molten_man, m0003_jittery_mystique, - m0004_disconnect_sessions, - m0005_disconnect_events, - m0006_admin_groups, - m0007_player_sessions, + m0004_uneven_silver_sable, + m0005_chubby_daredevil, + m0006_productive_thor, + m0007_petite_skrulls, ]; diff --git a/packages/database/src/schema.ts b/packages/database/src/schema.ts index 8fb154fe..09833899 100644 --- a/packages/database/src/schema.ts +++ b/packages/database/src/schema.ts @@ -301,10 +301,7 @@ export const playerSessions = sqliteTable( endReason: text('end_reason'), }, (t) => [ - index('player_session_player_connected_idx').on( - t.playerId, - t.connectedAt, - ), + index('player_session_player_connected_idx').on(t.playerId, t.connectedAt), ], );