Files
2026-06-24 09:48:54 +02:00

90 lines
2.7 KiB
TypeScript

import postgres from 'npm:postgres@3.4.4';
function getDb() {
return postgres({
host: Deno.env.get('PG_HOST'),
port: parseInt(Deno.env.get('PG_PORT') || '5432'),
user: Deno.env.get('PG_USER'),
password: Deno.env.get('PG_PASSWORD'),
database: Deno.env.get('PG_DBNAME'),
ssl: false,
max: 1,
});
}
Deno.serve(async (req) => {
if (req.method === 'OPTIONS') {
return new Response(null, {
status: 204,
headers: {
'Access-Control-Allow-Origin': '*',
'Access-Control-Allow-Methods': 'POST, OPTIONS',
'Access-Control-Allow-Headers': 'Content-Type, Authorization',
},
});
}
if (req.method !== 'POST') {
return Response.json({ error: 'Method not allowed' }, { status: 405 });
}
const sql = getDb();
try {
const body = await req.json();
const { datum, prevadzka, operacia } = body;
if (!datum || !prevadzka || !operacia) {
return Response.json(
{ error: 'Missing required fields: datum, prevadzka, operacia' },
{ status: 400, headers: { 'Access-Control-Allow-Origin': '*' } }
);
}
const validOperations = [
'prihlasenie', 'odhlasenie', 'synchronizacia', 'aktualizacia',
'zalohovanie', 'obnova', 'export', 'import', 'inventura', 'uzavierka'
];
if (!validOperations.includes(operacia)) {
return Response.json(
{ error: `Invalid operacia. Must be one of: ${validOperations.join(', ')}` },
{ status: 400, headers: { 'Access-Control-Allow-Origin': '*' } }
);
}
// Ensure table exists
await sql`
CREATE TABLE IF NOT EXISTS housekeeping_records (
id SERIAL PRIMARY KEY,
datum TIMESTAMP NOT NULL,
prevadzka VARCHAR(255) NOT NULL,
licencia VARCHAR(255),
operacia VARCHAR(50) NOT NULL,
verzia VARCHAR(50),
typ_os VARCHAR(10),
poznamka_prevadzky TEXT,
poznamka_operacie TEXT,
created_at TIMESTAMP DEFAULT NOW()
)
`;
const result = await sql`
INSERT INTO housekeeping_records (datum, prevadzka, licencia, operacia, verzia, typ_os, poznamka_prevadzky, poznamka_operacie)
VALUES (${body.datum}, ${body.prevadzka}, ${body.licencia || null}, ${body.operacia}, ${body.verzia || null}, ${body.typOS || null}, ${body.poznamka_prevadzky || null}, ${body.poznamka_operacie || null})
RETURNING id
`;
await sql.end();
return Response.json(
{ success: true, id: result[0].id },
{ status: 201, headers: { 'Access-Control-Allow-Origin': '*' } }
);
} catch (error) {
await sql.end();
return Response.json(
{ error: error.message },
{ status: 500, headers: { 'Access-Control-Allow-Origin': '*' } }
);
}
});