Regles de gestion & contraintes
Inscriptions JEMA
- Une inscription cree (ou reutilise) une arborescence de noeuds sous l'artisan JEMA :
registrationDayJema(jour) ->registrationTimeSlotJema(creneau) ->participantJema(inscrit). - Le nom des noeuds jour/creneau est contraint et valide a la sauvegarde par
JemaScheduleChangeNotificationHandler:- Jour :
Jour - JJ.MM.AAAA(ex.Mercredi - 01.12.2025) ; la date est derivee dans la proprietedate(ticks). - Creneau :
HH:mm - HH:mm(tiret ou demi-cadratin) ; derivetimestampStart/timestampEnd(ticks), et l'heure de fin doit etre apres l'heure de debut. - Un format invalide annule la sauvegarde (
CancelOperation).
- Jour :
- Capacite : chaque artisan JEMA a un nombre de places
nbPlaces. Le creneau gardenbRegistrations. Une inscription est refusee sinbRegistrations + participants > nbPlaces. - Le nombre de participants demande doit etre strictement positif.
- La langue d'inscription doit etre
fr,deouit(sinon erreur, message enen). - Mails de confirmation : un mail est envoye au visiteur ; un mail est aussi envoye a l'artisan uniquement si on est dans la periode de l'evenement JEMA (entre
jemaStartDateetjemaEndDatede l'edition courante). - A noter (etat du code) :
JemaRegistrationController.Submitest en[IgnoreAntiforgeryToken] // TEMPet porte des TODO (verification de la disponibilite reelle du creneau, anti-robot). A traiter comme provisoire.
Rappels JEMA (job Quartz)
- Job
JemaEmailReminderJob, cron0 0 9 * * ?(tous les jours a 09:00). - Le job ne s'execute qu'en production (court-circuit en Development/Staging).
- Envoie deux series de rappels via
JemaReminderService.SendRemindersAsync(visiteurs et artisans), avec un export CSV des inscrits en piece jointe (nom de fichier localise :inscrits.csv/registrations.csv/anmeldungen.csv/iscritti.csv). - En staging/dev, les mails artisan de test sont rediriges vers une adresse Spektrum (garde-fou code).
Formulaires & mail
- Anti-spam : honeypot
MiddleName. S'il est rempli, la soumission est ignoree (log + redirect) sans envoi. - Tout formulaire passe par
FormSurfaceController<TModel>(validationModelState,TempData["FormSuccess"], redirect). - Les destinataires/sujet/contenu proviennent de la composition
emailSettingsde la page courante (IEmailSettings). - Deux SMTP distincts : principal (formulaires de contact) et JEMA (inscriptions/rappels).
- Hors production, les sujets sont prefixes
[DEV]ou[STAGING].
Multilingue
- 4 langues : fr (defaut), de, it, en. Document types
Culture-variants. - Tout texte d'interface passe par le dictionnaire Umbraco, jamais en dur.
SEO
- Meta-titre construit en
Nom – Suffixe(SeoHelpers.BuildMetaTitle). - Meta-description de fallback : derivee du contenu (strip HTML, decode, normalise, troncature au mot, ~150 caracteres) quand aucune description explicite (
SeoHelpers.BuildMetaDescription). Travail lie aux branchesseo-fallback-artisan-metier.
Cookies / marketing
- GTM/GA4 et autres scripts marketing ne se chargent qu'apres consentement explicite (
cookiesConsent.js/vanilla-cookieconsent).
Securite
- Backoffice : TwoFactor TOTP (Google Authenticator), mot de passe >= 15 caracteres, pas de login concurrents.
- Dashboard JEMA accessible via un token chiffre + verification d'autorisation (voir
../modules/dashboard.md).
Contenu & fichiers generes - ne pas editer
src/Web/umbraco/Models(ModelsBuilderSourceCodeAuto).src/Web/wwwroot/css|js(Vite).ImportApiController/ImportCsvSrc: outillage interne[Obsolete], ne pas reutiliser en production.
Contributors
No contributors
Changelog
No recent changes

