BigDataPolyp/src/routes/api/rectangles/by-ref/[refIndex]/+server.ts
2025-10-11 15:07:48 +00:00

47 lines
1.8 KiB
TypeScript
Executable File

import { json } from '@sveltejs/kit';
import pool from '$lib/server/database';
import type { RequestHandler } from './$types';
// GET handler (existing)
export const GET: RequestHandler = async ({ params }) => {
const { refIndex } = params;
try {
const result = await pool.query<{ Index: number; TumerPosition: number[] }>(
'SELECT "Index", "TumerPosition" FROM public."TumerDataset" WHERE "IndexRef" = $1',
[refIndex]
);
const rectangles: Rectangle[] = result.rows.map(row => {
const [x1, y1, x2, y2] = row.TumerPosition;
const x = Math.min(x1, x2);
const y = Math.min(y1, y2);
const width = Math.abs(x2 - x1);
const height = Math.abs(y2 - y1);
return { id: row.Index, x, y, width, height };
});
return json(rectangles);
} catch (err) {
console.error(`API Error fetching rectangles for ${refIndex}:`, err);
return json({ error: 'Failed to fetch rectangles' }, { status: 500 });
}
};
// POST handler (new)
export const POST: RequestHandler = async ({ params, request }) => {
const { refIndex } = params;
const { x, y, width, height } = await request.json();
const tumerPosition = [x, y, x + width, y + height];
try {
const result = await pool.query(
`INSERT INTO public."TumerDataset" ("IndexRef", "DataNumber", "TumerPosition", "LocationFile")
SELECT $1, "DataNumber", $2, "LocationFile" FROM public."TumerDatasetRef" WHERE "Index" = $1
RETURNING "Index"`,
[refIndex, tumerPosition]
);
return json({ id: result.rows[0].Index }, { status: 201 });
} catch (err) {
console.error('API Error creating rectangle:', err);
return json({ error: 'Failed to create rectangle' }, { status: 500 });
}
};