fix: corriger le flux de réinitialisation par e-mail
Some checks failed
Validation applicative / TypeScript, tests et build (push) Failing after 2m22s
Some checks failed
Validation applicative / TypeScript, tests et build (push) Failing after 2m22s
This commit is contained in:
@@ -38,8 +38,8 @@ export type InsertUser = typeof users.$inferInsert;
|
||||
*/
|
||||
export const passwordResetTokens = mysqlTable("passwordResetTokens", {
|
||||
id: int("id").autoincrement().primaryKey(),
|
||||
/** Email de l'utilisateur qui demande la réinitialisation */
|
||||
email: varchar("email", { length: 320 }).notNull(),
|
||||
/** Utilisateur propriétaire du token. Ce contrat correspond à la table déployée. */
|
||||
userId: int("userId").notNull(),
|
||||
/** Token unique généré pour la réinitialisation */
|
||||
token: varchar("token", { length: 255 }).notNull().unique(),
|
||||
/** Date d'expiration du token (24h après création) */
|
||||
@@ -143,7 +143,8 @@ export const inscriptions = mysqlTable("inscriptions", {
|
||||
id: int("id").autoincrement().primaryKey(),
|
||||
sequenceId: int("sequenceId").notNull(),
|
||||
apprenantId: int("apprenantId").notNull(),
|
||||
statut: mysqlEnum("statut", ["confirmee", "en_attente", "annulee"]).default("confirmee").notNull(),
|
||||
/** `liste_attente` est la valeur historique et réellement déployée dans les trois environnements. */
|
||||
statut: mysqlEnum("statut", ["confirmee", "liste_attente", "annulee"]).default("confirmee").notNull(),
|
||||
dateInscription: timestamp("dateInscription").defaultNow().notNull(),
|
||||
updatedAt: timestamp("updatedAt").defaultNow().onUpdateNow().notNull(),
|
||||
});
|
||||
@@ -190,10 +191,31 @@ export type InsertEmailConfig = typeof emailConfig.$inferInsert;
|
||||
/**
|
||||
* Table des templates d'emails
|
||||
*/
|
||||
export const emailTemplateTypes = [
|
||||
"inscription",
|
||||
"teaser",
|
||||
"rappel",
|
||||
"rappelJ1",
|
||||
"rappel1",
|
||||
"rappel2",
|
||||
"rappel3",
|
||||
"rappel4",
|
||||
"rappel5",
|
||||
"rappel6",
|
||||
"reset_password",
|
||||
"attestation",
|
||||
] as const;
|
||||
|
||||
export type EmailTemplateType = (typeof emailTemplateTypes)[number];
|
||||
|
||||
export function isEmailTemplateType(value: string): value is EmailTemplateType {
|
||||
return (emailTemplateTypes as readonly string[]).includes(value);
|
||||
}
|
||||
|
||||
export const emailTemplates = mysqlTable("emailTemplates", {
|
||||
id: int("id").autoincrement().primaryKey(),
|
||||
/** Type de template (inscription, teaser, rappel1, rappel2, rappel3, rappel4, rappel5, rappel6, reset_password) */
|
||||
type: mysqlEnum("type", ["inscription", "teaser", "rappel", "rappelJ1", "rappel1", "rappel2", "rappel3", "rappel4", "rappel5", "rappel6", "reset_password", "attestation"]).notNull().unique(),
|
||||
type: mysqlEnum("type", emailTemplateTypes).notNull().unique(),
|
||||
titre: varchar("titre", { length: 255 }).notNull(),
|
||||
/** Corps du message avec variables dynamiques */
|
||||
bodyContent: text("bodyContent").notNull(),
|
||||
@@ -312,7 +334,13 @@ export const questionnaires = mysqlTable("questionnaires", {
|
||||
description: text("description"),
|
||||
/** Type de questionnaire (satisfaction, evaluation_pre, evaluation_post) */
|
||||
type: mysqlEnum("type", ["satisfaction", "evaluation_pre", "evaluation_post"]).notNull(),
|
||||
/** Formation ciblée ; null signifie que le questionnaire s'applique à toutes les formations. */
|
||||
formationId: int("formationId"),
|
||||
actif: boolean("actif").default(true).notNull(),
|
||||
/** Active l'envoi automatique après la fin d'une séquence. */
|
||||
envoiAutomatique: boolean("envoiAutomatique").default(false).notNull(),
|
||||
/** Délai, en jours, entre la fin de séquence et l'envoi automatique. */
|
||||
delaiEnvoiJours: int("delaiEnvoiJours").default(1).notNull(),
|
||||
createdAt: timestamp("createdAt").defaultNow().notNull(),
|
||||
updatedAt: timestamp("updatedAt").defaultNow().onUpdateNow().notNull(),
|
||||
});
|
||||
@@ -335,9 +363,14 @@ export const questions = mysqlTable("questions", {
|
||||
valeurMin: int("valeurMin"),
|
||||
/** Valeur maximale pour les échelles */
|
||||
valeurMax: int("valeurMax"),
|
||||
/** Libellé affiché pour l'extrémité minimale de l'échelle. */
|
||||
echelleLabelMin: varchar("echelleLabelMin", { length: 100 }),
|
||||
/** Libellé affiché pour l'extrémité maximale de l'échelle. */
|
||||
echelleLabelMax: varchar("echelleLabelMax", { length: 100 }),
|
||||
obligatoire: boolean("obligatoire").default(false).notNull(),
|
||||
ordre: int("ordre").notNull(),
|
||||
createdAt: timestamp("createdAt").defaultNow().notNull(),
|
||||
updatedAt: timestamp("updatedAt").defaultNow().onUpdateNow().notNull(),
|
||||
});
|
||||
|
||||
export type Question = typeof questions.$inferSelect;
|
||||
|
||||
Reference in New Issue
Block a user