Refactorisation du système de votes

L'auteur de ce sujet a trouvé une solution à son problème.
Staff
Auteur du sujet

Je suis actuellement en train de développer la ZEP-13 (qui avance assez bien et est prévue pour la version 20) et je dois ajouter le support des votes sur les billets (les billets d'un membre constituent sa tribune libre). Sauf que je me suis rendu compte que c'était un peu la merde compliqué au niveau des votes : les votes sont nécessairement liés aux commentaires (zds.utils.models.Comment : messages sur le forum ou commentaires sur un contenu).

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
class CommentVote(models.Model):

    """Set of comment votes."""
    class Meta:
        verbose_name = 'Vote'
        verbose_name_plural = 'Votes'
        unique_together = ('user', 'comment')

    comment = models.ForeignKey(Comment, db_index=True)
    user = models.ForeignKey(User, db_index=True)
    positive = models.BooleanField("Est un vote positif", default=True)

En l'état je ne peux pas simplement ajouter des votes aux TL. Je vois 3 solutions.

Solution 1 : faire avec l'existant

C'est la solution qui me semble la plus sale. Ça voudrait dire faire pas mal de bidouille pour que tout fonctionne et le jour ou on veut ajouter un vote sur un autre type de données on sera face au même problème.

Solution 2 : recoder ce qui existe en plus propre

Ça serait déjà beaucoup mieux. On réutiliserai le code actuel et on le ferai évoluer pour avoir un résultat modulable (à la manière de la ZEP-24 avec les notifications).

Solution 3 : utiliser une solution de vote externe

J'ai trouvé ça https://github.com/Beeblio/django-vote qu'on pourrait utiliser (via l'app ou en s'inspirant grandement du code) qui nous permettrai de faire très simplement ce qu'on veut. Le projet est maintenu et semble assez propre.

Pour d'autres applications dans le même genre : https://www.djangopackages.com/grids/g/voting/

Les solutions 2 et 3 sont clairement celles que je préfère.

J'attends vos avis.

Édité par gustavi

"I think that it’s extraordinarily important that we in computer science keep fun in computing." – Alan J. Perlis

+0 -0

Je n'ai rien contre un projet externe à quelques exceptions près :

  • L'intégration de cette bibliothèque doit se faire dans une PR dédiée pour ne pas surcharger la ZEP-13.
  • Le comportement de la bibliothèque doit être identique à notre système.
  • Les performances de la bibliothèque choisit doivent être correctes.

Si ces 3 règles sont respectés, aucun problème pour moi.

+0 -0
Staff
Auteur du sujet

Le problème c'est qu'on se retrouverait avec une ZEP incomplète.

EDIT : comme l'ont dit sandhose et Andr0 sur IRC, la migration si migration il y a doit se faire en parallèle de la ZEP-13.

Édité par gustavi

"I think that it’s extraordinarily important that we in computer science keep fun in computing." – Alan J. Perlis

+0 -0
Staff
Auteur du sujet

J'ai pas testé mais d'après la documentation de la lib que j'ai mis en lien oui.

"I think that it’s extraordinarily important that we in computer science keep fun in computing." – Alan J. Perlis

+0 -0
Staff
Auteur du sujet

Bon je me permets d'UP ça même si c'est récent car ça devenir un problème pour la ZEP-13.

Suite à plusieurs discussions sur IRC je propose qu'on fasse ceci :

  • On travail en parallèle de la ZEP-13 pour que ça soit mergé avant et éviter d'avoir des choses qui n'ont rien à faire dans la ZEP.
  • On refacto les votes avec un nouveau module dans l'esprit des notifications (the good way) qui permettrai techniquement d'avoir des votes sur l'ensemble des modèles (même si en réalité, pour le moment, ça ne s'applique qu'à 2 modèles).
  • On s'inspire grandement (voire on reprendre une partie du code) de https://github.com/Beeblio/django-vote pour l'adapter parfaitement à ZdS.

Qu'en dites vous ? Est-ce que ça va à tout le monde ?

Édité par gustavi

"I think that it’s extraordinarily important that we in computer science keep fun in computing." – Alan J. Perlis

+0 -0
Staff
Auteur du sujet

C'est une solution possible mais qui implique d'être dépendant de la lib. En soit ça va demander moins de travail si la lib est maintenue (ce qui est le cas actuellement) mais si on se retrouver avec un CORS like ça va être chiant. Il y a des avantages/inconvénients aux deux.

Personnellement les deux me conviennent.

"I think that it’s extraordinarily important that we in computer science keep fun in computing." – Alan J. Perlis

+0 -0
Staff
Auteur du sujet

Je tente une rapide POC avec la lib externe.

EDIT : le seul problème c'est qu'elle gère uniquement les votes « +1 ». Je vais voir si je peux doubler le champs pour avoir « upvotes » et « downvotes ».

Édité par gustavi

"I think that it’s extraordinarily important that we in computer science keep fun in computing." – Alan J. Perlis

+0 -0
Vous devez être connecté pour pouvoir poster un message.
Connexion

Pas encore inscrit ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte