diff options
| author | Yuval Adam <_@yuv.al> | 2025-06-27 10:10:56 +0200 |
|---|---|---|
| committer | Yuval Adam <_@yuv.al> | 2025-06-27 10:10:56 +0200 |
| commit | 2ad5ce929f6d69c9aaca71573744b30e02ab8bed (patch) | |
| tree | 078cd3b8a968ebfd99e86492abb9564f183ec21a /src/pages/api/tasks.ts | |
| parent | 0282fb367ecfd3864cf94c27a44961a61e2ff6f2 (diff) | |
Add cloudflare basic impl
Diffstat (limited to 'src/pages/api/tasks.ts')
| -rw-r--r-- | src/pages/api/tasks.ts | 66 |
1 files changed, 66 insertions, 0 deletions
diff --git a/src/pages/api/tasks.ts b/src/pages/api/tasks.ts new file mode 100644 index 0000000..00328e8 --- /dev/null +++ b/src/pages/api/tasks.ts @@ -0,0 +1,66 @@ +import type { APIRoute } from 'astro'; + +export const GET: APIRoute = async ({ locals }) => { + try { + const db = locals.runtime?.env?.DB; + + if (!db) { + console.error('Database not available'); + return new Response(JSON.stringify([]), { + status: 200, + headers: { 'Content-Type': 'application/json' } + }); + } + + const { results } = await db.prepare('SELECT * FROM tasks ORDER BY created_at DESC').all(); + + return new Response(JSON.stringify(results || []), { + status: 200, + headers: { 'Content-Type': 'application/json' } + }); + } catch (error) { + console.error('Database error:', error); + return new Response(JSON.stringify([]), { + status: 200, + headers: { 'Content-Type': 'application/json' } + }); + } +}; + +export const POST: APIRoute = async ({ request, locals }) => { + try { + const db = locals.runtime?.env?.DB; + + if (!db) { + return new Response(JSON.stringify({ error: 'Database not available' }), { + status: 503, + headers: { 'Content-Type': 'application/json' } + }); + } + + const body = await request.json(); + const { title, description } = body; + + if (!title) { + return new Response(JSON.stringify({ error: 'Title is required' }), { + status: 400, + headers: { 'Content-Type': 'application/json' } + }); + } + + const { results } = await db.prepare( + 'INSERT INTO tasks (title, description) VALUES (?, ?) RETURNING *' + ).bind(title, description || '').all(); + + return new Response(JSON.stringify(results?.[0] || { id: Date.now(), title, description, completed: false }), { + status: 201, + headers: { 'Content-Type': 'application/json' } + }); + } catch (error) { + console.error('Database error:', error); + return new Response(JSON.stringify({ error: 'Failed to create task' }), { + status: 500, + headers: { 'Content-Type': 'application/json' } + }); + } +};
\ No newline at end of file |
