summaryrefslogtreecommitdiff
path: root/src/pages
diff options
context:
space:
mode:
Diffstat (limited to 'src/pages')
-rw-r--r--src/pages/api/tasks.ts58
-rw-r--r--src/pages/api/tasks/[id].ts43
2 files changed, 21 insertions, 80 deletions
diff --git a/src/pages/api/tasks.ts b/src/pages/api/tasks.ts
index 8784e97..2b76ed3 100644
--- a/src/pages/api/tasks.ts
+++ b/src/pages/api/tasks.ts
@@ -1,68 +1,30 @@
import type { APIRoute } from 'astro';
+import { jsonResponse, getDB, handleAPIError } from '../../lib/api';
export const prerender = false;
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' }
- });
- }
-
+ return handleAPIError(async () => {
+ const db = getDB(locals);
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' }
- });
- }
+ return jsonResponse(results || []);
+ }, []);
};
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' }
- });
- }
-
+ return handleAPIError(async () => {
+ const db = getDB(locals);
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' }
- });
+ return jsonResponse({ error: 'Title is required' }, 400);
}
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' }
- });
- }
+ return jsonResponse(results?.[0] || { id: Date.now(), title, description, completed: false }, 201);
+ });
}; \ No newline at end of file
diff --git a/src/pages/api/tasks/[id].ts b/src/pages/api/tasks/[id].ts
index a078d7c..55cc603 100644
--- a/src/pages/api/tasks/[id].ts
+++ b/src/pages/api/tasks/[id].ts
@@ -1,10 +1,11 @@
import type { APIRoute } from 'astro';
+import { jsonResponse, getDB, handleAPIError } from '../../../lib/api';
export const prerender = false;
export const PUT: APIRoute = async ({ params, request, locals }) => {
- try {
- const db = locals.runtime.env.DB;
+ return handleAPIError(async () => {
+ const db = getDB(locals);
const id = params.id;
const body = await request.json();
const { title, description, completed } = body;
@@ -14,46 +15,24 @@ export const PUT: APIRoute = async ({ params, request, locals }) => {
).bind(title, description || '', completed || false, id).all();
if (results.length === 0) {
- return new Response(JSON.stringify({ error: 'Task not found' }), {
- status: 404,
- headers: { 'Content-Type': 'application/json' }
- });
+ return jsonResponse({ error: 'Task not found' }, 404);
}
- return new Response(JSON.stringify(results[0]), {
- status: 200,
- headers: { 'Content-Type': 'application/json' }
- });
- } catch (error) {
- return new Response(JSON.stringify({ error: 'Failed to update task' }), {
- status: 500,
- headers: { 'Content-Type': 'application/json' }
- });
- }
+ return jsonResponse(results[0]);
+ });
};
export const DELETE: APIRoute = async ({ params, locals }) => {
- try {
- const db = locals.runtime.env.DB;
+ return handleAPIError(async () => {
+ const db = getDB(locals);
const id = params.id;
const { success } = await db.prepare('DELETE FROM tasks WHERE id = ?').bind(id).run();
if (!success) {
- return new Response(JSON.stringify({ error: 'Task not found' }), {
- status: 404,
- headers: { 'Content-Type': 'application/json' }
- });
+ return jsonResponse({ error: 'Task not found' }, 404);
}
- return new Response(JSON.stringify({ message: 'Task deleted successfully' }), {
- status: 200,
- headers: { 'Content-Type': 'application/json' }
- });
- } catch (error) {
- return new Response(JSON.stringify({ error: 'Failed to delete task' }), {
- status: 500,
- headers: { 'Content-Type': 'application/json' }
- });
- }
+ return jsonResponse({ message: 'Task deleted successfully' });
+ });
}; \ No newline at end of file