d680b3f67a
- pairing (admin code -> chat link), bundling of forwarded images via drafts+quiet-window sweeper - recipe pick via inline keyboard, job (origin=telegram) creation, one summary reply with result files + links - compressed-photo detection/flag; /start /help /rezepte /status - webhook route (secret token), admin pairing-code + links endpoints, AdminApp telegram section - worker notifies chat on completion; migration 002 adds jobs.telegram_chat_id; setupTelegram on init
20 lines
798 B
TypeScript
20 lines
798 B
TypeScript
import type { APIRoute } from 'astro';
|
|
import { query } from '../../../../lib/db';
|
|
|
|
export const prerender = false;
|
|
const json = (b: unknown, s = 200) =>
|
|
new Response(JSON.stringify(b), { status: s, headers: { 'Content-Type': 'application/json' } });
|
|
|
|
export const GET: APIRoute = async () => {
|
|
const links = await query(`SELECT l.chat_id, l.active, l.linked_at, u.display_name AS user_name
|
|
FROM telegram_links l LEFT JOIN users u ON u.id=l.user_id ORDER BY l.linked_at DESC`);
|
|
return json({ links });
|
|
};
|
|
|
|
export const DELETE: APIRoute = async ({ request }) => {
|
|
const b = await request.json().catch(() => ({}));
|
|
if (!b.chat_id) return json({ error: 'chat_id nötig.' }, 400);
|
|
await query('DELETE FROM telegram_links WHERE chat_id=$1', [b.chat_id]);
|
|
return json({ ok: true });
|
|
};
|