Checkpoint: Correction de l'erreur "No procedure found on path formateurs.create" en ajoutant le routeur formateurs complet avec les procédures list, getById, create, update et delete, ainsi que les fonctions de base de données correspondantes

This commit is contained in:
Manus Sandbox
2025-11-20 03:57:35 -05:00
parent 89cc7db497
commit 7149458bb8
7 changed files with 938 additions and 1 deletions

View File

@@ -23,7 +23,10 @@ import {
Apprenant,
Formation,
EmailTemplate,
InsertEmailTemplate
InsertEmailTemplate,
formateurs,
InsertFormateur,
Formateur
} from "../drizzle/schema";
import { ENV } from './_core/env';
@@ -674,3 +677,43 @@ export async function updateEmailConfig(id: number, data: Partial<InsertEmailCon
})
.where(eq(emailConfig.id, id));
}
// ==================== FORMATEURS ====================
export async function createFormateur(data: InsertFormateur) {
const db = await getDb();
if (!db) throw new Error("Database not available");
const result = await db.insert(formateurs).values(data);
return result;
}
export async function getFormateurs() {
const db = await getDb();
if (!db) return [];
return await db.select().from(formateurs);
}
export async function getFormateurById(id: number): Promise<Formateur | undefined> {
const db = await getDb();
if (!db) return undefined;
const result = await db.select().from(formateurs).where(eq(formateurs.id, id)).limit(1);
return result.length > 0 ? result[0] : undefined;
}
export async function updateFormateur(id: number, data: Partial<InsertFormateur>) {
const db = await getDb();
if (!db) throw new Error("Database not available");
await db.update(formateurs).set(data).where(eq(formateurs.id, id));
}
export async function deleteFormateur(id: number) {
const db = await getDb();
if (!db) throw new Error("Database not available");
await db.delete(formateurs).where(eq(formateurs.id, id));
}

View File

@@ -116,6 +116,38 @@ export const appRouter = router({
}),
}),
// ===== FORMATEURS =====
formateurs: router({
list: adminProcedure.query(async () => {
return db.getFormateurs();
}),
getById: adminProcedure.input(z.object({ id: z.number() })).query(async ({ input }) => {
return db.getFormateurById(input.id);
}),
create: adminProcedure.input(z.object({
nom: z.string().min(1),
})).mutation(async ({ input }) => {
await db.createFormateur(input);
return { success: true };
}),
update: adminProcedure.input(z.object({
id: z.number(),
nom: z.string().min(1).optional(),
})).mutation(async ({ input }) => {
const { id, ...data } = input;
await db.updateFormateur(id, data);
return { success: true };
}),
delete: adminProcedure.input(z.object({ id: z.number() })).mutation(async ({ input }) => {
await db.deleteFormateur(input.id);
return { success: true };
}),
}),
// ===== SÉQUENCES =====
sequences: router({
list: adminProcedure.query(async () => {