Files
tam/client/src/routes/api/backuprestore/local/+server.js
T
2026-07-16 22:38:01 -04:00

59 lines
1.7 KiB
JavaScript

import { db } from '$lib/server/db';
import { baskets, prefixes, tickets } from '$lib/server/db/schema';
import { json } from '@sveltejs/kit';
import { sql } from 'drizzle-orm';
const chunk_size = 300;
export const GET = async () => {
const data = {};
data.prefixes = await db.select().from(prefixes);
data.baskets = await db.select().from(baskets);
data.tickets = await db.select().from(tickets);
return json(data);
};
export const POST = async ({ request }) => {
const reqData = await request.json();
for (let i = 0; i < reqData.prefixes.length; i += chunk_size) {
const chunk = reqData.prefixes.slice(i, i + chunk_size);
await db
.insert(prefixes)
.values(chunk)
.onConflictDoUpdate({
target: prefixes.prefix,
set: { color: sql`EXCLUDED.color`, weight: sql`EXCLUDED.weight` }
});
}
for (let i = 0; i < reqData.baskets.length; i += chunk_size) {
const chunk = reqData.baskets.slice(i, i + chunk_size);
await db
.insert(baskets)
.values(chunk)
.onConflictDoUpdate({
target: [baskets.prefix, baskets.b_id],
set: {
description: sql`EXCLUDED.description`,
donors: sql`EXCLUDED.donors`,
winning_ticket: sql`EXCLUDED.winning_ticket`
}
});
}
for (let i = 0; i < reqData.tickets.length; i += chunk_size) {
const chunk = reqData.tickets.slice(i, i + chunk_size);
await db
.insert(tickets)
.values(chunk)
.onConflictDoNothing({
target: [tickets.prefix, tickets.t_id],
set: {
first_name: sql`EXCLUDED.first_name`,
last_name: sql`EXCLUDED.last_name`,
phone_number: sql`EXCLUDED.phone_number`,
pref: sql`EXCLUDED.pref`
}
});
}
return json({ details: 'Data loaded successfully.' });
};