import { eq, and, asc } from "drizzle-orm"; import { database } from "~/database/context"; import * as schema from "~/database/schema"; export type CanonicalParticipant = typeof schema.participants.$inferSelect; export type NewCanonicalParticipant = typeof schema.participants.$inferInsert; export async function createCanonicalParticipant( data: NewCanonicalParticipant ): Promise { const db = database(); const [participant] = await db .insert(schema.participants) .values(data) .returning(); return participant; } export async function getCanonicalParticipantById( id: string ): Promise { const db = database(); const results = await db .select() .from(schema.participants) .where(eq(schema.participants.id, id)) .limit(1); return results[0] ?? null; } export async function findCanonicalParticipantsBySport( sportId: string ): Promise { const db = database(); return await db .select() .from(schema.participants) .where(eq(schema.participants.sportId, sportId)) .orderBy(asc(schema.participants.name)); } export async function findCanonicalParticipantBySportName( sportId: string, name: string ): Promise { const db = database(); const results = await db .select() .from(schema.participants) .where( and( eq(schema.participants.sportId, sportId), eq(schema.participants.name, name) ) ) .limit(1); return results[0] ?? null; } export async function upsertCanonicalParticipantBySportName( sportId: string, name: string, extra?: Partial ): Promise { const existing = await findCanonicalParticipantBySportName(sportId, name); if (existing) { return existing; } return await createCanonicalParticipant({ sportId, name, ...extra, }); }