Files
MikrotikManager/backend/src/services/alerts-telegram-settings.ts
T

21 lines
1.7 KiB
TypeScript

import {putTelegramSchema,telegramPublicSchema,type PutTelegramBody} from "@mmapp/contracts/alerts"
export type TelegramStoredRow={botToken:string;chatId:string;messageThreadId:number|null}
export type TelegramStoredPatch=Partial<TelegramStoredRow>
interface Dependencies {ensure:()=>Promise<unknown>;update:(patch:TelegramStoredPatch)=>Promise<TelegramStoredRow|undefined>}
export async function executeTelegramSettingsUpdate(input:PutTelegramBody,deps:Dependencies){
const parsed=putTelegramSchema.strict().safeParse(input)
if(!parsed.success||Object.keys(parsed.data).length===0)throw Error("Проверьте изменённые параметры Telegram")
const patch:TelegramStoredPatch={}
if(parsed.data.token!==undefined)patch.botToken=parsed.data.token?.trim()??""
if(parsed.data.chatId!==undefined)patch.chatId=parsed.data.chatId.trim()
if(parsed.data.messageThreadId!==undefined)patch.messageThreadId=parsed.data.messageThreadId
if(Object.keys(patch).length===0)throw Error("Нет изменённых параметров Telegram")
await deps.ensure()
const row=await deps.update(patch)
if(!row||Object.entries(patch).some(([key,value])=>row[key as keyof TelegramStoredRow]!==value))throw Error("Сохранение параметров Telegram не подтверждено")
const result=telegramPublicSchema.safeParse({chatId:row.chatId,tokenConfigured:Boolean(row.botToken.trim()),messageThreadId:row.messageThreadId,connected:Boolean(row.botToken.trim()&&row.chatId.trim())})
if(!result.success)throw Error("Сохранённые параметры Telegram не подтверждены")
const {connected:_connected,...publicFields}=result.data
return publicFields
}