import { eq, ne, and } from "drizzle-orm"; import { inscriptions, apprenants, sequences, datesFormation } from "../drizzle/schema"; import { getDb } from "./db"; /** * Récupérer les inscriptions d'une séquence avec les dates de formation */ export async function getInscriptionsWithDates(sequenceId: number) { const db = await getDb(); if (!db) return []; // Récupérer les inscriptions const results = await db .select({ inscription: inscriptions, apprenant: apprenants, }) .from(inscriptions) .leftJoin(apprenants, eq(inscriptions.apprenantId, apprenants.id)) .where( and( eq(inscriptions.sequenceId, sequenceId), ne(inscriptions.statut, "annulee") ) ); // Récupérer les dates de formation pour cette séquence const dates = await db .select() .from(datesFormation) .where(eq(datesFormation.sequenceId, sequenceId)) .orderBy(datesFormation.ordre); // Combiner les données return results.map((r) => ({ ...r, dates, })); } /** * Récupérer les inscriptions d'un apprenant avec les détails des séquences et dates */ export async function getInscriptionsByApprenantWithDates(apprenantId: number) { const db = await getDb(); if (!db) return []; // Récupérer les inscriptions const results = await db .select({ inscription: inscriptions, sequence: sequences, }) .from(inscriptions) .leftJoin(sequences, eq(inscriptions.sequenceId, sequences.id)) .where( and( eq(inscriptions.apprenantId, apprenantId), ne(inscriptions.statut, "annulee") ) ); // Pour chaque inscription, récupérer les dates de formation const resultsWithDates = await Promise.all( results.map(async (r) => { if (!r.sequence) return { ...r, dates: [] }; const dates = await db .select() .from(datesFormation) .where(eq(datesFormation.sequenceId, r.sequence.id)) .orderBy(datesFormation.ordre); return { ...r, sequence: { ...r.sequence, dates, }, }; }) ); return resultsWithDates; }