62 lines
1.7 KiB
TypeScript
62 lines
1.7 KiB
TypeScript
|
|
import { eq, and, asc } from "drizzle-orm";
|
||
|
|
import { database } from "~/database/context";
|
||
|
|
import * as schema from "~/database/schema";
|
||
|
|
|
||
|
|
export type TournamentResult = typeof schema.tournamentResults.$inferSelect;
|
||
|
|
export type NewTournamentResult = typeof schema.tournamentResults.$inferInsert;
|
||
|
|
|
||
|
|
export async function upsertTournamentResult(
|
||
|
|
data: NewTournamentResult
|
||
|
|
): Promise<TournamentResult> {
|
||
|
|
if (!data.tournamentId || !data.participantId) {
|
||
|
|
throw new Error("tournamentId and participantId are required");
|
||
|
|
}
|
||
|
|
|
||
|
|
const db = database();
|
||
|
|
const [result] = await db
|
||
|
|
.insert(schema.tournamentResults)
|
||
|
|
.values(data)
|
||
|
|
.onConflictDoUpdate({
|
||
|
|
target: [
|
||
|
|
schema.tournamentResults.tournamentId,
|
||
|
|
schema.tournamentResults.participantId,
|
||
|
|
],
|
||
|
|
set: {
|
||
|
|
placement: data.placement,
|
||
|
|
rawScore: data.rawScore,
|
||
|
|
updatedAt: new Date(),
|
||
|
|
},
|
||
|
|
})
|
||
|
|
.returning();
|
||
|
|
return result;
|
||
|
|
}
|
||
|
|
|
||
|
|
export async function getTournamentResults(
|
||
|
|
tournamentId: string
|
||
|
|
): Promise<TournamentResult[]> {
|
||
|
|
const db = database();
|
||
|
|
return await db
|
||
|
|
.select()
|
||
|
|
.from(schema.tournamentResults)
|
||
|
|
.where(eq(schema.tournamentResults.tournamentId, tournamentId))
|
||
|
|
.orderBy(asc(schema.tournamentResults.placement));
|
||
|
|
}
|
||
|
|
|
||
|
|
export async function getTournamentResultByParticipant(
|
||
|
|
tournamentId: string,
|
||
|
|
participantId: string
|
||
|
|
): Promise<TournamentResult | null> {
|
||
|
|
const db = database();
|
||
|
|
const results = await db
|
||
|
|
.select()
|
||
|
|
.from(schema.tournamentResults)
|
||
|
|
.where(
|
||
|
|
and(
|
||
|
|
eq(schema.tournamentResults.tournamentId, tournamentId),
|
||
|
|
eq(schema.tournamentResults.participantId, participantId)
|
||
|
|
)
|
||
|
|
)
|
||
|
|
.limit(1);
|
||
|
|
return results[0] ?? null;
|
||
|
|
}
|