Bonjour Maxime,
Le problème de créer tous les rdvs avec un insertMany est que la recurrence peut-être tous les jours jusqu’à l’année 2100. Ce qui donnerai: 2100-2022=78*365=28470 soit plus de 28 000 rdvs à créer et cela pour chaque récurrence. Pareil pour un utilisateur souhaitant modifier la récurrence il faudrait alors modifier les 28 000 rdvs.
C’est pour résoudre ce problème que j’ai créé une collection “rdvs”. Quand un rdv est récurrent je stocke l’intervalle de récurrence ainsi que la date de la prochaine récurrence.
2 semaines avant la prochaine récurrence je créer le rdv via le fichier PHP appelé à intervalle régulier par mes utilisateurs.
Je ne l’ai pas encore écrit mais le script PHP fonctionnerai je pense de cette façon :
-
Récupérer tous les rdvs dont le champ “recurrence_next” < (maintenant +2 semaines)
-
Pour chacun de ces rdvs le dupliquer en changer la date d’arrivée (arr_time), la date de création du rdv (time), en ajoutant la référence de la recurrence (recurrence_id) et en retirant l’ensemble des autres champs “recurrence_*”.
-
Mettre à jour le rdv initial avec la nouvelle “recurrence_next”
Cela permet en effet de créer les rdvs au fur et à mesure sans avoir à en créer et peut-être modifier 28 000. J’envois aussi des sms de confirmation de rendez-vous automatiquement et ça m’évite que mon script envois 28 000 sms lors de la création de la récurrence.
Mon problème actuel est que si le fichier PHP est exécuté entre les étapes 1 à 3 j’ai peur de me retrouver avec des rdvs doublons. L’idée de l’index unique est très bonne ! Mais je ne vois pas trop comment le mettre en place dans mon cas.
Le fichier PHP dans mon cas fonctionne un peu comme le ramasse-miettes (Garbage Collection) de PHP. Il ne vise pas spécifiquement l’utilisateur qui le déclenche (de façon transparente via ajax) mais l’ensemble des utilisateurs. De la même façon que le ramasse-miettes (Garbage Collection) de PHP qui est déclenché de façon transparente par les utilisateurs et supprime les sessions inactives de l’ensemble des utilisateurs.
Voici un exemple de rdv en BDD :

J’espère avoir réussi à être plus clair,
Merci de continuer à essayé de trouver une solution à mon problème.
Alexis,