import { ArchiveChatCommand, RestoreChatCommand } from './ChatCommands'; import { IChatRepository } from '../../../Domain/IRepository/IChatRepository'; import { ChatType } from '../../../Domain/Chat/ChatAggregate'; import { logAuth, logError, logWarning } from '../../Services/Logger'; export class ArchiveChatCommandHandler { constructor(private chatRepository: IChatRepository) {} async execute(command: ArchiveChatCommand): Promise { try { const chat = await this.chatRepository.findById(command.chatId); if (!chat) { throw new Error('Chat not found'); } await this.chatRepository.archiveChat(chat); logAuth('Chat archived manually', undefined, { chatId: command.chatId, chatType: chat.type, messageCount: chat.messages.length }); return true; } catch (error) { logError('ArchiveChatCommandHandler error', error as Error); return false; } } } export class RestoreChatCommandHandler { constructor(private chatRepository: IChatRepository) {} async execute(command: RestoreChatCommand): Promise { try { const archive = await this.chatRepository.getArchivedChat(command.chatId); if (!archive) { throw new Error('Archived chat not found'); } // Game chats cannot be restored, only viewed if (archive.chatType === ChatType.GAME) { logWarning('Attempt to restore game chat blocked', { chatId: command.chatId, chatType: archive.chatType }); return false; } const restoredChat = await this.chatRepository.restoreFromArchive(command.chatId); if (!restoredChat) { throw new Error('Failed to restore chat from archive'); } logAuth('Chat restored from archive', undefined, { chatId: command.chatId, messageCount: archive.archivedMessages.length }); return true; } catch (error) { logError('RestoreChatCommandHandler error', error as Error); return false; } } }