Files
infra-map/src/routes/printer/filament/+server.ts
2025-08-19 00:00:00 +02:00

60 lines
1.8 KiB
TypeScript

import { addFilament, updateFilament } from '$lib/server/database';
import { json } from '@sveltejs/kit';
export const PUT: RequestHandler = async ({ params, request }) => {
try {
const id = Number(params.id);
if (isNaN(id)) {
return new Response(JSON.stringify({ error: 'Invalid id' }), { status: 400 });
}
const body = await request.json();
await updateFilament({ id, ...body });
return json({ success: true });
} catch (err: any) {
console.log(err);
console.error('Failed to update filament:', err.message);
return new Response(JSON.stringify({ error: 'Internal Server Error' }), {
status: 500
});
}
};
export const POST: RequestHandler = async ({ request }) => {
try {
const formData = await request.formData();
// Extract values by input `name` attributes
const hex = formData.get('Hex')?.toString().trim();
const color = formData.get('Color name')?.toString().trim();
const material = formData.get('Material')?.toString().trim();
const weightStr = formData.get('Weight')?.toString().trim();
const link = formData.get('Link')?.toString().trim();
if (!hex || !color || !material || !weightStr || !link) {
return new Response(JSON.stringify({ error: 'All fields are required' }), { status: 400 });
}
// convert "0.5 kg" → 0.5, "1 kg" → 1, etc
const weight = parseFloat(weightStr);
if (!hex || !color) {
return new Response(JSON.stringify({ error: 'hex and color are required' }), {
status: 400
});
}
await addFilament(hex, color, material, weight, link);
return Response.redirect(`${request.url}/${color}`, 303);
} catch (err: any) {
console.log(err);
console.error('Failed to add filament:', err.message);
return new Response(JSON.stringify({ error: 'Internal Server Error' }), {
status: 500
});
}
};