import type { RequestHandler } from './$types'; import { getDb } from '$lib/server/db'; import { sha256Hex } from '$lib/server/crypto'; import { validateIcsToken, buildIcsFeed, icsDateRange } from '$lib/server/ics-helpers'; export const GET: RequestHandler = async ({ params, request }) => { const db = await getDb(); const res = await validateIcsToken(db, params.token || '', 'personal'); if (res instanceof Response) return res; const { row } = res; const tokenHash = await sha256Hex(params.token || ''); const { startYmd, endYmd } = icsDateRange(); const tasks = db .prepare( `SELECT t.id, t.description, t.due_date, g.name AS group_name FROM tasks t LEFT JOIN groups g ON g.id = t.group_id LEFT JOIN group_members gm ON gm.group_id = t.group_id AND gm.user_id = ? AND gm.is_active = 1 LEFT JOIN allowed_groups ag ON ag.group_id = t.group_id AND ag.status = 'allowed' WHERE COALESCE(t.completed, 0) = 0 AND t.due_date IS NOT NULL AND t.due_date >= ? AND t.due_date <= ? AND EXISTS (SELECT 1 FROM task_assignments a WHERE a.task_id = t.id AND a.user_id = ?) AND (t.group_id IS NULL OR (gm.user_id IS NOT NULL AND ag.group_id IS NOT NULL AND COALESCE(g.active,1)=1 AND COALESCE(g.is_community,0)=0 AND COALESCE(g.archived,0)=0)) ORDER BY t.due_date ASC, t.id ASC` ) .all(row.user_id, startYmd, endYmd, row.user_id) as any[]; return buildIcsFeed(db, tokenHash, row, request, 'Wtask.org Tareas – Personal', tasks); };