blob: 84a36c4ebbb23fcab6b77369760a759205c67058 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
import type { APIContext } from 'astro';
export function jsonResponse(data: any, status: number = 200) {
return new Response(JSON.stringify(data), {
status,
headers: { 'Content-Type': 'application/json' }
});
}
export function getDB(locals: APIContext['locals']) {
const db = locals.runtime?.env?.DB;
if (!db) {
throw new Error('Database not available');
}
return db;
}
export async function handleAPIError(fn: () => Promise<Response>, fallback?: any): Promise<Response> {
try {
return await fn();
} catch (error) {
console.error('API Error:', error);
if (error instanceof Error && error.message === 'Database not available') {
return jsonResponse(fallback || { error: 'Database not available' }, 503);
}
return jsonResponse({ error: 'Internal server error' }, 500);
}
}
|