From 98e98bbb02bf57755aab762778ab0abceb1ddb8f Mon Sep 17 00:00:00 2001 From: Shreyas Mayya Date: Sun, 8 Oct 2023 11:24:26 -0400 Subject: [PATCH] force jsonb objects for data see https://github.com/drizzle-team/drizzle-orm/issues/724 --- app/admin/upload/submit/route.ts | 14 ++++++-------- lib/events/async.ts | 2 +- lib/global/drizzle.ts | 2 ++ lib/histograms/async.ts | 2 +- lib/penalties/async.ts | 2 +- lib/placings/async.ts | 2 +- lib/results/async.ts | 5 ++++- lib/results/queue.ts | 6 +++++- lib/teams/async.ts | 2 +- lib/tournaments/async.ts | 2 +- lib/tracks/async.ts | 2 +- 11 files changed, 24 insertions(+), 17 deletions(-) diff --git a/app/admin/upload/submit/route.ts b/app/admin/upload/submit/route.ts index 5c26868..9be210b 100644 --- a/app/admin/upload/submit/route.ts +++ b/app/admin/upload/submit/route.ts @@ -1,17 +1,15 @@ import { isAdmin } from '@/lib/auth/admin'; -import { getCurrentUserID } from '@/lib/auth/helpers'; import { getRouteHandlerClient } from '@/lib/global/supabase'; -import { addResultFromYAMLFile } from '@/lib/results/async'; +// import { addResultFromYAMLFile } from '@/lib/results/async'; import { ResultsAddQueue } from '@/lib/results/queue'; -import { createRouteHandlerClient } from '@supabase/auth-helpers-nextjs'; -import { cookies, headers } from 'next/headers'; +import { cookies } from 'next/headers'; import { NextRequest, NextResponse } from 'next/server'; export async function POST(request: NextRequest) { - // const supabase = getRouteHandlerClient(cookies); - // if (!(await isAdmin(supabase))) { - // return new Response(null, { status: 403 }); - // } + const supabase = getRouteHandlerClient(cookies); + if (!(await isAdmin(supabase))) { + return new NextResponse(null, { status: 403 }); + } const data = await request.formData(); const allFiles = data.getAll('yaml'); const q = ResultsAddQueue.getInstance(); diff --git a/lib/events/async.ts b/lib/events/async.ts index df20b67..abc6653 100644 --- a/lib/events/async.ts +++ b/lib/events/async.ts @@ -68,6 +68,6 @@ export async function createEventDataInput(event: Event, duosmiumID: string) { return { resultDuosmiumId: duosmiumID, name: event.name, - data: event.rep + data: sql`${event.rep}::jsonb` }; } diff --git a/lib/global/drizzle.ts b/lib/global/drizzle.ts index 2d20a59..19c3231 100644 --- a/lib/global/drizzle.ts +++ b/lib/global/drizzle.ts @@ -14,6 +14,8 @@ export async function keepTryingUntilItWorks(fn, data) { } catch (e: PostgresError) { if (e.message === 'deadlock detected') { return await keepTryingUntilItWorks(fn, data); + } else { + throw e; } } } diff --git a/lib/histograms/async.ts b/lib/histograms/async.ts index 665a4a1..d34cd46 100644 --- a/lib/histograms/async.ts +++ b/lib/histograms/async.ts @@ -55,6 +55,6 @@ export async function addHistogram(histogramData: object, tx = db) { export async function createHistogramDataInput(histogram: Histogram, duosmiumID: string) { return { resultDuosmiumId: duosmiumID, - data: histogram.rep + data: sql`${histogram.rep}::jsonb` }; } diff --git a/lib/penalties/async.ts b/lib/penalties/async.ts index b831d81..4fd3334 100644 --- a/lib/penalties/async.ts +++ b/lib/penalties/async.ts @@ -71,6 +71,6 @@ export async function createPenaltyDataInput(penalty: Penalty, duosmiumID: strin return { resultDuosmiumId: duosmiumID, teamNumber: penalty.team.number, - data: penalty.rep + data: sql`${penalty.rep}::jsonb` }; } diff --git a/lib/placings/async.ts b/lib/placings/async.ts index 41c53b8..b4ca2ce 100644 --- a/lib/placings/async.ts +++ b/lib/placings/async.ts @@ -87,6 +87,6 @@ export async function createPlacingDataInput(placing: Placing, duosmiumID: strin eventName: placing.event.name, teamNumber: placing.team.number, resultDuosmiumId: duosmiumID, - data: placing.rep + data: sql`${placing.rep}::jsonb` }; } diff --git a/lib/results/async.ts b/lib/results/async.ts index ca1a428..90066ad 100644 --- a/lib/results/async.ts +++ b/lib/results/async.ts @@ -178,6 +178,9 @@ export async function addResultFromYAMLFile( // @ts-ignore const obj: object = load(yaml); const interpreter: Interpreter = getInterpreter(obj); + // if (await resultExists(generateFilename(interpreter))) { + // return; + // } try { await keepTryingUntilItWorks(addCompleteResult, interpreter); // await addCompleteResult(interpreter); @@ -237,7 +240,7 @@ export async function regenerateAllMetadata() { for (const id of ids) { // @ts-ignore const input = await createResultDataInput(getInterpreter(await getCompleteResult(id))); - await addResult(input); + await addResult(input, tx); } }); return await operation; diff --git a/lib/results/queue.ts b/lib/results/queue.ts index 090c229..da425db 100644 --- a/lib/results/queue.ts +++ b/lib/results/queue.ts @@ -2,7 +2,7 @@ import type { QueueObject } from 'async'; import { queue } from 'async'; import { addResultFromYAMLFile } from './async'; -const MAX_PROCESSES = 16; +const MAX_PROCESSES = 64; export class ResultsAddQueue { private static instance: ResultsAddQueue; @@ -31,6 +31,10 @@ export class ResultsAddQueue { this.q.drain(arg); } + public error(arg: (err: any, task: any) => void) { + this.q.error(arg); + } + public push(arg: File) { this.q.push(arg); console.log( diff --git a/lib/teams/async.ts b/lib/teams/async.ts index c45c9f5..0d71ccb 100644 --- a/lib/teams/async.ts +++ b/lib/teams/async.ts @@ -72,7 +72,7 @@ export async function createTeamDataInput(team: Team, duosmiumID: string) { return { resultDuosmiumId: duosmiumID, number: team.number, - data: team.rep, + data: sql`${team.rep}::jsonb`, name: locationName, city: locationCity, state: locationState, diff --git a/lib/tournaments/async.ts b/lib/tournaments/async.ts index 13618f1..4baef9d 100644 --- a/lib/tournaments/async.ts +++ b/lib/tournaments/async.ts @@ -55,7 +55,7 @@ export async function addTournament(tournamentData: object, tx = db) { export async function createTournamentDataInput(tournament: Tournament, duosmiumID: string) { return { resultDuosmiumId: duosmiumID, - data: tournament.rep + data: sql`${tournament.rep}::jsonb` }; } diff --git a/lib/tracks/async.ts b/lib/tracks/async.ts index b36a290..ac0c2ce 100644 --- a/lib/tracks/async.ts +++ b/lib/tracks/async.ts @@ -64,6 +64,6 @@ export async function createTrackDataInput(track: Track, duosmiumID: string) { return { resultDuosmiumId: duosmiumID, name: track.name.toString(), - data: track.rep + data: sql`${track.rep}::jsonb` }; }