import { and, isNotNull, eq, ne, sql } from 'drizzle-orm' import { db } from '~/drizzle/db' import { users, gradeClasses } from '~/drizzle/schema' import { resolveGradeClassOptions, type GradeClassOption } from './grade-class-core' export async function fetchGradeClassOptions(): Promise { const [configRows, userRows] = await Promise.all([ db.select({ grade: gradeClasses.grade, class: gradeClasses.class }).from(gradeClasses), db .selectDistinct({ grade: users.grade, class: users.class }) .from(users) .where(and(eq(users.status, 'active'), isNotNull(users.grade), isNotNull(users.class))) ]) return resolveGradeClassOptions(configRows, userRows) } export async function isGradeClassValid(grade: string, studentClass: string): Promise { const configHit = await db.query.gradeClasses.findFirst({ where: (t, { eq: eq_, and: and_ }) => and_(eq_(t.grade, grade), eq_(t.class, studentClass)), columns: { id: true } }) if (configHit) return true const configCount = await db .select({ count: () => sql`count(*)::int` }) .from(gradeClasses) .where(and(ne(gradeClasses.grade, ''), ne(gradeClasses.class, ''))) if ((configCount[0]?.count || 0) > 0) return false const userHit = await db.query.users.findFirst({ where: (t, { eq: eq_, and: and_ }) => and_(eq_(t.status, 'active'), eq_(t.grade, grade), eq_(t.class, studentClass)), columns: { id: true } }) return Boolean(userHit) }