fix: prevent conflicts when event moves lines
This commit is contained in:
parent
3d01ce2e72
commit
4604463a8e
2 changed files with 17 additions and 6 deletions
|
|
@ -19,11 +19,16 @@ export async function refetchAllData() {
|
|||
const lines = await getLines();
|
||||
await saveLines(lines);
|
||||
|
||||
const allEvents = [];
|
||||
for (const line of lines) {
|
||||
const lineId = line.id;
|
||||
const schedule = await getScheduleForLine(lineId);
|
||||
const allEvents = schedule.flatMap((day) => day.events);
|
||||
await updateLineEvents(lineId, allEvents);
|
||||
const dayEvents = schedule.flatMap((day) => day.events);
|
||||
allEvents.push(...dayEvents);
|
||||
}
|
||||
await updateLineEvents(allEvents);
|
||||
if (allEvents.length === 0) {
|
||||
redirect("/?message=No events found to refetch.");
|
||||
}
|
||||
revalidatePath("/", "layout");
|
||||
redirect("/?message=All data has been successfully refetched and saved.");
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
import type { Event, Line } from "@/common/parser";
|
||||
import "dotenv/config";
|
||||
import { and, eq, gte, inArray, like, lte, or } from "drizzle-orm";
|
||||
import { and, eq, gte, ilike, inArray, lte, or, sql } from "drizzle-orm";
|
||||
import { getDbInstance } from "./getInstance";
|
||||
import { eventsTable, linesTable } from "./schema";
|
||||
|
||||
|
|
@ -19,12 +19,18 @@ export async function saveLines(lines: Line[]) {
|
|||
description: line.description,
|
||||
})),
|
||||
)
|
||||
.onConflictDoNothing();
|
||||
.onConflictDoUpdate({
|
||||
target: linesTable.id,
|
||||
set: {
|
||||
name: sql.raw(`excluded.${linesTable.name.name}`),
|
||||
description: sql.raw(`excluded.${linesTable.description.name}`),
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
export async function updateLineEvents(lineId: number, events: Event[]) {
|
||||
export async function updateLineEvents(events: Event[]) {
|
||||
await db.transaction(async (tx) => {
|
||||
await tx.delete(eventsTable).where(eq(eventsTable.lineId, lineId));
|
||||
await tx.delete(eventsTable);
|
||||
await tx.insert(eventsTable).values(events);
|
||||
});
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue