Closes #3887 mais en fait c’est allé plus loin que prévu.
J’ai mis en place des validations autour des motifs et les contraintes liées à tel ou tel rôle, la présence de dataset…
Après ma PR initiale, J’ai finalement opté pour pas mal changer la logique de comment on obtient des listes de motifs, en m’appuyant sur un gros map de configuration, qui liste pour chaque motif la liste des règles auqxuelles il doit s’astreindre, et ensuite fait du code un peu idiot à partir de ça.
Pourquoi j’ai fait ça :
J’étais pas serein sur la version originale de mon code : sur les validations, je m’appuyais sur des listes préfaites, mais je devais vérifier pour chaque liste ce qu’il y avait dedans, et je m’y perdais.
J’ai finalement relu pas mal de code pour prendre des notes et comprendre ce qu’il y avait derrière chaque motif… Et en fait, ce map correspond à peu près à mes notes prises à la main, qui sont ainsi documentées.
On est notamment sûr d’être carrés carrés et explicites sur qui peut s’abonner ou avoir une notification pour chaque souscription, les «rôles possibles».
Ça met en avant une notion de subscribable : certaines raisons ne peuvent en réalité pas être souscrites en tant qu’abonnement, mais peuvent bien faire l’objet de notifications individuelles (sous condition des rôles ci-dessus).
La notion de «hidden» veut désormais vraiment dire «caché à l’utilisateur»
Du coup il y a des méthodes qui combinent tout (à coup de MapSet.intersection) : par exemple subscribable_platform_wide_reason(:producer) génère pour le backoffice la liste des raisons non liées à un dataset auxquelles un producteur peut effectivement s’abonner.
Closes #3887 mais en fait c’est allé plus loin que prévu.
J’ai mis en place des validations autour des motifs et les contraintes liées à tel ou tel rôle, la présence de dataset…
Après ma PR initiale, J’ai finalement opté pour pas mal changer la logique de comment on obtient des listes de motifs, en m’appuyant sur un gros map de configuration, qui liste pour chaque motif la liste des règles auqxuelles il doit s’astreindre, et ensuite fait du code un peu idiot à partir de ça.
Pourquoi j’ai fait ça :
MapSet.intersection
) : par exemplesubscribable_platform_wide_reason(:producer)
génère pour le backoffice la liste des raisons non liées à un dataset auxquelles un producteur peut effectivement s’abonner.