From 1547da3279c8df66edf8a9eb7ee48ee44d0e10dc Mon Sep 17 00:00:00 2001 From: yushen Date: Tue, 10 Feb 2026 16:08:52 +0800 Subject: [PATCH] refactor(telegram): remove auto table creation, add SQL script for ops Move table DDL to scripts/telegram-users.sql for manual execution by ops. Remove OnModuleInit and ensureTable() from TelegramUserStore. Co-Authored-By: Claude Opus 4.6 --- scripts/telegram-users.sql | 17 ++++++++++ src/gateway/telegram/telegram-user.store.ts | 36 +-------------------- 2 files changed, 18 insertions(+), 35 deletions(-) create mode 100644 scripts/telegram-users.sql diff --git a/scripts/telegram-users.sql b/scripts/telegram-users.sql new file mode 100644 index 00000000..19f1a720 --- /dev/null +++ b/scripts/telegram-users.sql @@ -0,0 +1,17 @@ +-- Telegram users table for Gateway +-- Run this manually before starting the Gateway with Telegram enabled. + +DROP TABLE IF EXISTS telegram_users; + +CREATE TABLE telegram_users ( + telegram_user_id VARCHAR(64) PRIMARY KEY, + hub_id VARCHAR(64) NOT NULL, + agent_id VARCHAR(64) NOT NULL, + device_id VARCHAR(64) NOT NULL UNIQUE, + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + telegram_username VARCHAR(255), + telegram_first_name VARCHAR(255), + telegram_last_name VARCHAR(255), + INDEX idx_device_id (device_id) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; diff --git a/src/gateway/telegram/telegram-user.store.ts b/src/gateway/telegram/telegram-user.store.ts index d7f64cf9..ba2e807f 100644 --- a/src/gateway/telegram/telegram-user.store.ts +++ b/src/gateway/telegram/telegram-user.store.ts @@ -3,7 +3,6 @@ */ import { Inject, Injectable, Logger } from "@nestjs/common"; -import type { OnModuleInit } from "@nestjs/common"; import { v7 as uuidv7 } from "uuid"; import type { RowDataPacket } from "mysql2/promise"; import { DatabaseService } from "../database/database.service.js"; @@ -22,44 +21,11 @@ interface TelegramUserRow extends RowDataPacket { } @Injectable() -export class TelegramUserStore implements OnModuleInit { +export class TelegramUserStore { private readonly logger = new Logger(TelegramUserStore.name); constructor(@Inject(DatabaseService) private readonly db: DatabaseService) {} - async onModuleInit(): Promise { - console.log("[TelegramUserStore] onModuleInit starting..."); - if (!this.db.isAvailable()) { - console.log("[TelegramUserStore] Database not available"); - this.logger.warn("Database not available, TelegramUserStore disabled"); - return; - } - console.log("[TelegramUserStore] Ensuring table..."); - await this.ensureTable(); - console.log("[TelegramUserStore] Done"); - } - - /** Drop and recreate telegram_users table (schema changed: hub_url -> hub_id + agent_id) */ - private async ensureTable(): Promise { - await this.db.execute("DROP TABLE IF EXISTS telegram_users"); - const sql = ` - CREATE TABLE telegram_users ( - telegram_user_id VARCHAR(64) PRIMARY KEY, - hub_id VARCHAR(64) NOT NULL, - agent_id VARCHAR(64) NOT NULL, - device_id VARCHAR(64) NOT NULL UNIQUE, - created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, - updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, - telegram_username VARCHAR(255), - telegram_first_name VARCHAR(255), - telegram_last_name VARCHAR(255), - INDEX idx_device_id (device_id) - ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 - `; - await this.db.execute(sql); - this.logger.log("telegram_users table ensured"); - } - /** Find user by Telegram user ID */ async findByTelegramUserId(telegramUserId: string): Promise { if (!this.db.isAvailable()) return null;