import { eq } from "drizzle-orm"; import { database } from "~/database/context"; import * as schema from "~/database/schema"; export type Sport = typeof schema.sports.$inferSelect; export type NewSport = typeof schema.sports.$inferInsert; export type SportType = "team" | "individual"; export type SportWithActiveSeasons = Sport & { activeSeasons: Array<{ id: string; name: string; year: number }>; }; export async function createSport(data: NewSport): Promise { const db = database(); const [sport] = await db .insert(schema.sports) .values(data) .returning(); return sport; } export async function findSportById(id: string): Promise { const db = database(); return await db.query.sports.findFirst({ where: eq(schema.sports.id, id), }); } export async function findSportBySlug(slug: string): Promise { const db = database(); return await db.query.sports.findFirst({ where: eq(schema.sports.slug, slug), }); } export async function findAllSports(): Promise { const db = database(); return await db.query.sports.findMany({ orderBy: (sports, { asc }) => [asc(sports.name)], }); } export async function findAllSportsWithActiveSeasons(): Promise { const db = database(); const sports = await db.query.sports.findMany({ orderBy: (sports, { asc }) => [asc(sports.name)], with: { sportsSeasons: { where: (sportsSeasons, { eq, or }) => or( eq(sportsSeasons.status, "active"), eq(sportsSeasons.status, "upcoming") ), orderBy: (sportsSeasons, { desc }) => [desc(sportsSeasons.year)], }, }, }); return sports.map((sport) => ({ ...sport, activeSeasons: sport.sportsSeasons.map((season) => ({ id: season.id, name: season.name, year: season.year, })), })); } export async function findSportsByType(type: SportType): Promise { const db = database(); return await db.query.sports.findMany({ where: eq(schema.sports.type, type), orderBy: (sports, { asc }) => [asc(sports.name)], }); } export async function updateSport( id: string, data: Partial ): Promise { const db = database(); const [sport] = await db .update(schema.sports) .set({ ...data, updatedAt: new Date() }) .where(eq(schema.sports.id, id)) .returning(); return sport; } export async function deleteSport(id: string): Promise { const db = database(); await db.delete(schema.sports).where(eq(schema.sports.id, id)); }