ChantyTaguan / zds-site

Dépot ZDS
Other
0 stars 0 forks source link

Zep 24 notif new model #16

Closed ChantyTaguan closed 9 years ago

ChantyTaguan commented 9 years ago

Issue #15

GerardPaligot commented 9 years ago

Il y a beaucoup de changements, les diffs git sont un peu pénible à comprendre. Tu saurais nous expliquer les grands changements ?

Je vois que tu as créé des sous classes et que tu les utilises à différents endroits pour faire les différentes souscriptions mais je vois aussi beaucoup de conditions qui n'existait pas avant et des méthodes statiques (d'ailleurs, qu'apporte en plus l'annotation ?).

ChantyTaguan commented 9 years ago

Alors, on a donc la classe Subscription, qui contient tous les attributs d'un abonnement, qui sont les même qu'avant, à l'exception de type, qui disaparait, et is_active qui est devenu active (au moment où j'ai renommé is_active, j'avais une bonne raison, mais au final, cette raison ne tient plus, peut-être qu'on devrait remettre is_active du coup...).

En plus des attributs, Subscription possèdent quelques méthodes qui permettent d'activer et désactiver l'abonnement (complètement, ou juste l'envoi d'email)

On a ensuite une série de classe qui hérite de Subscription, et qui représentent les différents types d'abonnement possibles :

Ces classes possèdent toutes deux méthodes statiques. L'annotation @staticmethod permettant de ne pas avoir "self" dans les paramètres.

Ces classes possèdent en plus toutes la méthode send_notification qui utilise différent paramètres selon la sous-classe et qui envoie la notification au souscripteur de l'abonnement. L'implémentation de l'envoi d'email n'est pas encore faite, j'ai juste un début de code à ce propos dans AnswerSubscription.

Pour finir, la plupart définissent la méthode mark_notification_read(), qui comme sont nom l'indique, fait passer la notification de non-lue à lue. Les classes d'abonnement qui ne définissent pas cette méthode (y en a qu'une : NewTopicSubscription), c'est parce qu'elles peuvent avoir plusieurs notifications non-lues au même moment. Ce cas est traité avec le signal "topic_read" qui récupère directement les notifications concernées pour les mettre à "lues".

Enfin, j'ai ajouté trois attributs à la classe Notification, qui sont initialisées dans send_notification et différent selon le type d'abonnement :

Voilà, je pense que j'ai fait le tour :)