import { DEFAULT_PERSONA_ID } from "../constants/personas.js"; import type { ChatSettingsRepository } from "../repositories/chat-settings-repository.js"; import type { PersonaRepository } from "../repositories/persona-repository.js"; import type { Persona } from "../types.js"; interface PersonaServiceDeps { personaRepository: PersonaRepository; chatSettingsRepository: ChatSettingsRepository; } export const createPersonaService = ({ personaRepository, chatSettingsRepository }: PersonaServiceDeps) => { const list = (): Persona[] => personaRepository.list(); /** Активная личность чата; если выбранную убрали из списка — личность по умолчанию. */ const getActive = (chatId: number): Persona => personaRepository.findById(chatSettingsRepository.findPersonaId(chatId) ?? DEFAULT_PERSONA_ID) ?? personaRepository.findById(DEFAULT_PERSONA_ID)!; /** Делает личность активной в чате; undefined — если такой личности нет. */ const select = (chatId: number, id: string): Persona | undefined => { const persona = personaRepository.findById(id.trim().toLowerCase()); if (persona) chatSettingsRepository.setPersonaId(chatId, persona.id); return persona; }; return { list, getActive, select }; }; export type PersonaService = ReturnType;