Checkpoint: Affichage unifié des formateurs dans la page Utilisateurs
## Modifications effectuées : ### Backend (server/routers.ts) - Ajout de la procédure `users.listWithFormateurs` qui retourne : * Tous les utilisateurs * Tous les formateurs avec leur statut de compte (hasAccount, user) - Cette procédure combine les données des tables `users` et `formateurs` ### Frontend (client/src/pages/AdminUsers.tsx) - Remplacement de `users.list` par `users.listWithFormateurs` - Ajout d'une section dédiée "Formateurs sans compte utilisateur" affichée en haut de la page - Cette section liste tous les formateurs qui n'ont pas encore de compte utilisateur - Bouton "Créer un compte" pour chaque formateur qui : * Pré-remplit le formulaire avec les données du formateur (nom, email) * Lie automatiquement le `formateurId` * Définit le rôle sur "formateur" ## Résultat Les formateurs existants dans la table `formateurs` sont maintenant visibles dans la page Utilisateurs. L'administrateur peut facilement créer un compte pour chaque formateur en un clic, ce qui lie automatiquement le compte au formateur existant.
This commit is contained in:
@@ -894,6 +894,38 @@ export const appRouter = router({
|
||||
return db.getAllUsers();
|
||||
}),
|
||||
|
||||
listWithFormateurs: adminProcedure.query(async () => {
|
||||
const dbInstance = await import("./db").then(m => m.getDb());
|
||||
if (!dbInstance) throw new Error("Base de données non disponible");
|
||||
|
||||
const { formateurs, users } = await import("../drizzle/schema");
|
||||
const { eq } = await import("drizzle-orm");
|
||||
|
||||
// Récupérer tous les formateurs
|
||||
const allFormateurs = await dbInstance.select().from(formateurs);
|
||||
|
||||
// Récupérer tous les utilisateurs
|
||||
const allUsers = await dbInstance.select().from(users);
|
||||
|
||||
// Créer une map des formateurs liés à des comptes
|
||||
const formateurIdToUser = new Map();
|
||||
allUsers.forEach(user => {
|
||||
if (user.formateurId) {
|
||||
formateurIdToUser.set(user.formateurId, user);
|
||||
}
|
||||
});
|
||||
|
||||
// Combiner les données
|
||||
return {
|
||||
users: allUsers,
|
||||
formateurs: allFormateurs.map(formateur => ({
|
||||
...formateur,
|
||||
hasAccount: formateurIdToUser.has(formateur.id),
|
||||
user: formateurIdToUser.get(formateur.id) || null,
|
||||
})),
|
||||
};
|
||||
}),
|
||||
|
||||
getById: adminProcedure.input(z.object({ id: z.number() })).query(async ({ input }) => {
|
||||
return db.getUserById(input.id);
|
||||
}),
|
||||
|
||||
Reference in New Issue
Block a user