Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ZEP-24 : Centre de notifications #3301

Merged
merged 20 commits into from
Mar 5, 2016
Merged

ZEP-24 : Centre de notifications #3301

merged 20 commits into from
Mar 5, 2016

Conversation

GerardPaligot
Copy link
Member

Q R
Correction de bugs ? Non
Nouvelle Fonctionnalité ? Oui
Tickets (issues) concernés ZEP-24, #2515, #2657, #2905, #3306

Hello,

Voici venir la première PR pour la ZEP-24 ! Cette première PR vient poser le socle technique et baser l'existant dessus. Aujourd'hui, la ZEP gère les notifications pour les messages d'un sujet, les réactions d'un contenu et les conversations privées.

Pour la QA :

Important

  • Pensez à faire la migration : python manage.py migrate.
  • Pensez à faire la migration des anciennes données : python manage.py migrate_subscriptions.
  • Aucune commande makemigrations ne doit être nécessaire !

Pour les messages d'un sujet

  • Vérifiez que les notifications sont bien conservées avant la migration vers cette PR.
  • S'inscrire et se désinscrire à un sujet doit générer une souscription (regardez dans l'espace admin).
  • Recevoir des notifications dans un sujet souscrit.
  • Être notifié par mail ou non à un sujet.
  • Recevoir un mail et une notification dans un sujet souscrit.
  • Perdre la souscription lorsqu'un sujet est déplacé dans un forum non visible.
  • Souscription automatique au sujet bêta de tous les auteurs d'un contenu lors de sa mise en bêta.
  • Perdre les souscriptions et les notifications à la suppression d'un compte. Pour le vérifier, connectez-vous après avec un compte admin et rendez-vous dans l'espace admin.
  • Marqué comme lu une notification sur un message masqué.

Pour les réactions d'un contenu

  • Vérifiez que les notifications sont bien conservées avant la migration vers cette PR.
  • Poster dans un contenu doit créer une souscription (à vérifier dans l'espace admin).
  • Recevoir des notifications dans un contenu souscrit.
  • Perdre les souscriptions et les notifications à la suppression d'un compte. Pour le vérifier, connectez-vous après avec un compte admin et rendez-vous dans l'espace admin.

Pour les conversations privées

Note : Ne testez pas avec le MP généré grâce aux fixtures. Cette ressource là est toute pourrie. Limite, supprimez là dès que vous avez installé vos fixtures quand vous êtes sur la branche dev au tout début de votre QA.

  • Vérifiez que les notifications sont bien conservées avant la migration vers cette PR.
  • Les notifications sur les messages doivent s'afficher uniquement dans l'espace dédié dans l'en-tête du site.
  • La création d'un sujet avec des participants entrainent la création de notifications pour les participants.
  • Poster un message dans un message privé génère des notifications pour les autres (participants ou auteur).
  • Ajouter un nouveau membre dans une conversation doit générer une notification vers le dernier message d'une conversation privée.
  • Quitter une conversation privée doit supprimer la potentielle notification en cours (mais les autres doivent garder leurs notifications actives).
  • Si l'utilisateur a paramétré dans son profil qu'il voulait recevoir des mails à chaque réponse, le système doit envoyer des mails pour tous les cas précédemment cités.
  • Perdre les souscriptions et les notifications à la suppression d'un compte. Pour le vérifier, connectez-vous après avec un compte admin et rendez-vous dans l'espace admin.

@gustavi
Copy link
Contributor

gustavi commented Jan 15, 2016

Joli travail. Je vois que tu utilises quelques fonctionnalités sympas de Django et j'aime ça ! J'ai rapidement regardé le code (#notime) et ça me semble plutôt pas mal :)

Attention toutefois, un rebase s'impose (et t'en aura un joli poste django 1.9 aussi :p) !

@GerardPaligot
Copy link
Member Author

J'avais déjà rebase avant de faire ma PR mais je vais sans doute être amené à le refaire pas mal de fois. :)


class PrivateTopicAnswerSubscription(AnswerSubscription, SingleNotificationMixin):
"""
Subscription to new answer in a topic
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

in a private topic

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nooooon, j'ai pas fais du copié/collé durant le dev. :-°

@GerardPaligot
Copy link
Member Author

@firm1 Si tu pouvais faire une relecture avant d'être au merge, j'apprécierais. :-°

@@ -18,7 +18,7 @@ restera propre et lisible au cours du temps !

#!/bin/sh

flake8 --exclude=migrations,urls.py,settings.py --max-line-length=120 zds
flake8 --exclude=migrations,urls.py,urls_contents.py,settings.py --max-line-length=120 zds
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

pourquoi?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

C'est un peu complexe. En fait, nous avons un fichier qui se nomme receivers.py qui contient que des receivers. Ces receivers sont appelés nul part dans notre code source. C'est géré en interne par Django. Du coup, comme personne ne fait d'import sur ce fichier, l'usage (d'après nos observations à @ChantyTaguan et moi sur divers ressources) est un import inutilisé dans les fichiers urls.py pour charger le fichier.

@gustavi m'a proposé une autre solution mais ni lui, ni moi ne savons si ça va fonctionner. En gros, ça serait de placer les receivers dans un dossier avec un fichier __init__.py pour que Django le charge sans besoin d'importer quoi que ce soit dans un fichier. A tester pour savoir si ça fonctionne.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ok donc j'ai mon "pourquoi", je suis content.

Le 18 janvier 2016 à 10:25, Gérard Paligot notifications@github.com a
écrit :

In doc/source/utils/git-pre-hook.rst
#3301 (comment)
:

@@ -18,7 +18,7 @@ restera propre et lisible au cours du temps !

 #!/bin/sh
  • flake8 --exclude=migrations,urls.py,settings.py --max-line-length=120 zds
  • flake8 --exclude=migrations,urls.py,urls_contents.py,settings.py --max-line-length=120 zds

C'est un peu complexe. En fait, nous avons un fichier qui se nomme
receivers.py qui contient que des receivers. Ces receivers sont appelés
nul part dans notre code source. C'est géré en interne par Django. Du coup,
comme personne ne fait d'import sur ce fichier, l'usage (d'après nos
observations à @ChantyTaguan https://github.com/ChantyTaguan et moi sur
divers ressources) est un import inutilisé dans les fichiers urls.py pour
charger le fichier.

@gustavi https://github.com/gustavi m'a proposé une autre solution mais
ni lui, ni moi ne savons si ça va fonctionner. En gros, ça serait de placer
les receivers dans un dossier avec un fichier init.py pour que Django
le charge sans besoin d'importer quoi que ce soit dans un fichier. A tester
pour savoir si ça fonctionne.


Reply to this email directly or view it on GitHub
https://github.com/zestedesavoir/zds-site/pull/3301/files#r49975669.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@GerardPaligot tu as testé ma solution ?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pas encore eu le temps. Quand ça sera le cas, tu seras mis au courant. :)

@firm1
Copy link
Contributor

firm1 commented Jan 18, 2016

@firm1 Si tu pouvais faire une relecture avant d'être au merge, j'apprécierais. :-°

Dès que je trouve une bonne demie heure. Mais ça ne sera pas pour aujourd'hui. :(

@@ -364,9 +359,12 @@ def first_unread_post(self):
"""
# TODO: Why 2 nearly-identical functions? What is the functional need of these 2 things?
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

donné qu'on est dans une zep : la réponse à ce TODO est-elle trouvée?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

C'est quoi l'autre fonction ? Dans le cadre de cette ZEP, je ne fais appel à cette fonction que pour le script de migration des anciennes données vers les nouvelles.

@firm1
Copy link
Contributor

firm1 commented Jan 19, 2016

Autres remarques de manière générale sur la PR actuelle :

  • Elle ne builde pas coté travis (il semble manquer des migrations)
  • Les noms de templates sont un poil difficiles à lire je pense par exemple à templates/email/notification/topicanswersubscription.html qui (selon la snake_case à la python ) devrait être templates/email/notification/topic_answer_subscription.html

sender=private_topic.last_message.author.profile,
send_email=participant.profile.email_for_answer)

if action == 'post_remove' and not reverse:
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

c'est de la micro optimisation, mais dans ce genre de cas, le elif vaut toujours mieux qu'une suite de if

@GerardPaligot
Copy link
Member Author

PR rebased et j'ai corrigé la petite erreur de @DevHugo

@SpaceFox
Copy link
Contributor

SpaceFox commented Mar 4, 2016

Dans dev non ? À moins que @GerardPaligot ou @ChantyTaguan aient un avis contraire ?

@GerardPaligot
Copy link
Member Author

Pas du tout, dev c'est très bien.

@DevHugo
Copy link
Contributor

DevHugo commented Mar 5, 2016

@gustavi on compte sur toi pour la qa. J'aurais le temps de rien faire moi

@gustavi
Copy link
Contributor

gustavi commented Mar 5, 2016

Ça sera check auj.


def get_users_for_unread_notification_on(self, content_object):
"""
Gets all users which have an notification unread on the given content object.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

-which
+who

gustavi added a commit that referenced this pull request Mar 5, 2016
ZEP-24 : Centre de notifications
@gustavi gustavi merged commit 9326809 into zestedesavoir:dev Mar 5, 2016
@gustavi
Copy link
Contributor

gustavi commented Mar 5, 2016

Voilà voilà <3

@gustavi gustavi added this to the Version de développement milestone Mar 5, 2016
@GerardPaligot GerardPaligot deleted the new_zep_24 branch March 5, 2016 16:57
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
C-Back Concerne le back-end Django S-BUG Corrige un problème
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet