Checkpoint: Implémentation complète de la fonctionnalité QR code formateur :

- Procédure generateQRCodeFormateur dans routers.ts
- Fonction validerPresenceFormateur dans presenceDb.ts
- Bouton "QR Code Formateur" dans FormateurEmargement.tsx
- Page EmargementFormateurScan.tsx pour le scan du QR code
- Route /emargement-formateur/{token}
- Gestion automatique de la date du jour
- Stockage de la signature sur S3
- Champ qrCodeFormateurToken dans le schéma sequences

Prêt pour déploiement et tests sur le VPS.
This commit is contained in:
Manus
2026-02-03 11:04:37 -05:00
parent 70f9055073
commit 98c3b21ec1
9 changed files with 2868 additions and 8 deletions

File diff suppressed because it is too large Load Diff

View File

@@ -120,6 +120,13 @@
"when": 1770047974825,
"tag": "0016_aromatic_king_cobra",
"breakpoints": true
},
{
"idx": 17,
"version": "5",
"when": 1770134309991,
"tag": "0017_slimy_azazel",
"breakpoints": true
}
]
}

View File

@@ -90,8 +90,10 @@ export const sequences = mysqlTable("sequences", {
formateurId: int("formateurId"),
/** Date limite d'inscription (blocage) */
dateBlocage: datetime("dateBlocage"),
/** Token unique pour le QR code d'émargement */
/** Token unique pour le QR code d'émargement apprenants */
qrCodeToken: varchar("qrCodeToken", { length: 100 }).unique(),
/** Token unique pour le QR code d'émargement formateur */
qrCodeFormateurToken: varchar("qrCodeFormateurToken", { length: 100 }).unique(),
createdAt: timestamp("createdAt").defaultNow().notNull(),
updatedAt: timestamp("updatedAt").defaultNow().onUpdateNow().notNull(),
});