{"action":"created","issue":{"url":"https://api.github.com/repos/ChantyTaguan/zds-site/issues/17","labels_url":"https://api.github.com/repos/ChantyTaguan/zds-site/issues/17/labels{/name}","comments_url":"https://api.github.com/repos/ChantyTaguan/zds-site/issues/17/comments","events_url":"https://api.github.com/repos/ChantyTaguan/zds-site/issues/17/events","html_url":"https://github.com/ChantyTaguan/zds-site/pull/17","id":75313746,"number":17,"title":"Zep 24 notif new model","user":{"login":"ChantyTaguan","id":5844732,"avatar_url":"https://avatars.githubusercontent.com/u/5844732?v=3","gravatar_id":"","url":"https://api.github.com/users/ChantyTaguan","html_url":"https://github.com/ChantyTaguan","followers_url":"https://api.github.com/users/ChantyTaguan/followers","following_url":"https://api.github.com/users/ChantyTaguan/following{/other_user}","gists_url":"https://api.github.com/users/ChantyTaguan/gists{/gist_id}","starred_url":"https://api.github.com/users/ChantyTaguan/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ChantyTaguan/subscriptions","organizations_url":"https://api.github.com/users/ChantyTaguan/orgs","repos_url":"https://api.github.com/users/ChantyTaguan/repos","events_url":"https://api.github.com/users/ChantyTaguan/events{/privacy}","received_events_url":"https://api.github.com/users/ChantyTaguan/received_events","type":"User","site_admin":false},"labels":[],"state":"open","locked":false,"assignee":null,"milestone":null,"comments":6,"created_at":"2015-05-11T18:25:34Z","updated_at":"2015-05-12T22:59:13Z","closed_at":null,"pull_request":{"url":"https://api.github.com/repos/ChantyTaguan/zds-site/pulls/17","html_url":"https://github.com/ChantyTaguan/zds-site/pull/17","diff_url":"https://github.com/ChantyTaguan/zds-site/pull/17.diff","patch_url":"https://github.com/ChantyTaguan/zds-site/pull/17.patch"},"body":"PR avec le nouveau modèle d'abonnement (issue #15 ). Deuxième essai après nettoyage par Andr0 + j'en ai profité pour pusher mes corrections de ce matin.\r\n\r\nJe remets donc l'explication, en adaptant avec ce que j'ai fait ce matin (en gras).\r\n\r\nAlors, 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 disparait, et ~~\u001Fis_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...).~~ **<- J'ai remis is_active !**\r\n\r\nEn 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)\r\n\r\nOn a ensuite une série de classe qui hérite de Subscription, et qui représentent les différents types d'abonnement possibles : \r\n\r\n- AnswerSubscription : abonnement aux réponses à un topic, article ou tuto. Je n'ai pas séparé ça en trois classes parce que ça ne semblait pas nécessaire, mais si à un moment dans le dev on se rend compte qu'il faut avoir un comportement différent selon qu'il s'agit des réponses à un sujet ou des commentaires sur un article/tuto, on peut bien sur ajouter 2/3 sous classes à AnswerSubscription\r\n- UpdateTutorialSubscription : abonnement aux mises à jour d'un tuto. Je parle ici des modifications hors-ligne, donc faites par un co-auteur ou le staff\r\n- UpdateArticleSubscription : idem pour les articles. J'ai séparé les articles et les tuto pour pouvoir récupéré l'url de la Notification correctement\r\n- PublicationSubscription : abonnement aux mises en ligne d'une publication (article ou tuto)\r\n- NewTopicSubscription : abonnement à un forum où un tag pour recevoir une notif en cas de nouveau topic.\r\n- PingSubscription, qui hérite de AnswerSubscription mais qui n'est pas vraiment implémentée, qui est là surtout pour mémoire\r\n\r\nCes classes possèdent toutes deux méthodes statiques. L'annotation @staticmethod permettant de ne pas avoir \"self\" dans les paramètres.\r\n\r\n- get_existing(profile, content) : récupère l'abonnement d'un membre à un contenu, renvoie None si le membre n'est pas abonné. Vu qu'on fait la requête sur la sous-classe, seul l'abonnement du type demandé est récupéré (puisqu'on peut être abonné à un même contenu de plusieurs manière différentes, chacune de ces manières correpsondant à une sous-classe)\r\n- get_subscribers(content) : récupère tous les users qui ont un abonnement de ce type au contenu passé en paramètre\r\n\r\nCes 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.\r\n\r\nPour finir, ~~la plupart~~ **elles** définissent la méthode mark_notification_read(), qui comme sont nom l'indique, fait passer la notification de non-lue à lue. **La plupart des classes ne prennent pas de paramètre pour cette méthode puisqu'en général, une seule notification non lue est possible par abonnement. NewTopicSubscription fait exception, et prend donc en paramètre le topic concerné.**\r\n\r\nEnfin, j'ai ajouté trois attributs à la classe Notification, qui sont initialisées dans send_notification et différent selon le type d'abonnement : \r\n\r\n- url : url vers laquelle mène la notification\r\n- sender : profil qui a déclenché la notification\r\n- title : titre, c'est ce qui sera typiquement affiché dans la liste déroulante (titre du topic pour une répo,se ou un nouveau topic, titre de l'article pour une mise à jour ou un commentaire, ...)\r\n\r\nVoilà, je pense que j'ai fait le tour :)"},"comment":{"url":"https://api.github.com/repos/ChantyTaguan/zds-site/issues/comments/101452041","html_url":"https://github.com/ChantyTaguan/zds-site/pull/17#issuecomment-101452041","issue_url":"https://api.github.com/repos/ChantyTaguan/zds-site/issues/17","id":101452041,"user":{"login":"GerardPaligot","id":1913901,"avatar_url":"https://avatars.githubusercontent.com/u/1913901?v=3","gravatar_id":"","url":"https://api.github.com/users/GerardPaligot","html_url":"https://github.com/GerardPaligot","followers_url":"https://api.github.com/users/GerardPaligot/followers","following_url":"https://api.github.com/users/GerardPaligot/following{/other_user}","gists_url":"https://api.github.com/users/GerardPaligot/gists{/gist_id}","starred_url":"https://api.github.com/users/GerardPaligot/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/GerardPaligot/subscriptions","organizations_url":"https://api.github.com/users/GerardPaligot/orgs","repos_url":"https://api.github.com/users/GerardPaligot/repos","events_url":"https://api.github.com/users/GerardPaligot/events{/privacy}","received_events_url":"https://api.github.com/users/GerardPaligot/received_events","type":"User","site_admin":false},"created_at":"2015-05-12T22:59:13Z","updated_at":"2015-05-12T22:59:13Z","body":"J'ai fais une rapide relecture avant d'aller me coucher et de ce que j'en vois, c'est nettement mieux. Bon boulot !"}}