21 lines
1.7 KiB
TypeScript
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
|
|
}
|