Checkpoint: Implémentation de la signature manuscrite tactile pour l'émargement via QR code :

- Intégration du composant SignaturePad dans EmargementScan.tsx
- Ajout des champs de signature dans la table presences (signatureUrl, signatureS3Key, dateSigned)
- Modification de la procédure presences.valider pour accepter et uploader la signature en S3
- Stockage automatique de l'URL et de la clé S3 dans la base de données
- Correction des types nullables dans exportService.ts (codeEtablissement, fonction)
- Les apprenants doivent maintenant signer avec le doigt sur l'écran avant de valider leur présence
This commit is contained in:
Manus
2026-01-27 04:29:01 -05:00
parent b3b808145c
commit 1e915acd5b
16 changed files with 4936 additions and 11 deletions

View File

@@ -414,6 +414,10 @@ export const presences = mysqlTable("presences", {
/** ID de l'utilisateur qui a validé (formateur ou admin) */
validateurId: int("validateurId"),
commentaire: text("commentaire"),
/** URL de la signature manuscrite de l'apprenant */
signatureUrl: varchar("signatureUrl", { length: 500 }),
/** Clé S3 de la signature manuscrite */
signatureS3Key: varchar("signatureS3Key", { length: 500 }),
createdAt: timestamp("createdAt").defaultNow().notNull(),
});
@@ -442,6 +446,12 @@ export const attestations = mysqlTable("attestations", {
emailEnvoye: boolean("emailEnvoye").default(false).notNull(),
/** Date d'envoi de l'email */
dateEnvoiEmail: timestamp("dateEnvoiEmail"),
/** URL de la signature manuscrite */
signatureUrl: varchar("signatureUrl", { length: 500 }),
/** Clé S3 de la signature manuscrite */
signatureS3Key: varchar("signatureS3Key", { length: 500 }),
/** Date de signature */
dateSigned: timestamp("dateSigned"),
dateGeneration: timestamp("dateGeneration").defaultNow().notNull(),
});