Suivi - Comptes utilisateurs Garder une trace des bornes du karma

#912 Posté par (page perso) . État de l'entrée : corrigée
Tags : aucun
2
10
mai
2012

Bonjour,

Petite amélioration pas trop dure à implanter, et pas inintéressante à cette époque de l'année où l'on parle de karma qui monte et qui descend : et si, en plus du karma actuel, on sauvait aussi les karmas maximaux et minimaux jamais atteint par chaque utilisateur ?
Ça permettrait donc d'avoir encore plus de statistiques rigolotes, inutiles, mais donc indispensables.

  • # Patch

    Posté par (page perso) . Évalué à 2 (+0/-0).

    Un truc comme ça, ça devrait être correct, non?

    Ça rajoute deux entrées: min_karma et max_karma
    À chaque modif du karma, on regarde si on dépasse l'une des deux bornes, et on met à jour (ou non) en conséquence.
    Dans les infos utilisateur, on affiche le karma actuel, et aussi les deux bornes jamais atteintes depuis la mise en place du système.

    Cela dit,
    1. il faut rajouter deux entrées dans la table, et je ne sais pas si c'est transparent (et automatiquement mis à 20), n'il s'il faut mettre à jour tous les karmas,
    2. les bornes sont potentiellement fausses pour les comptes anciens, puisqu'on n'a jamais sauvegardé cette information.
    3. J'ai pas testé, mais j'ai cherché "karma" dans les sources.
    4. S'il est possible dans account.rb de choisir le type integer(3*4), alors on peut tout mettre dans le même entier, et accéder à chaque champ via des masques et des décalages de bits/octets (ce qui n'est pas forcément mieux d'un point de vue génie logiciel)

    diff --git a/app/models/account.rb b/app/models/account.rb
    index c02b11a..1d7b9b4 100644
    --- a/app/models/account.rb
    +++ b/app/models/account.rb
    @@ -9,6 +9,8 @@
     #  login                :string(40)      not null
     #  role                 :string(10)      default("visitor"), not null
     #  karma                :integer(4)      default(20), not null
    +#  min_karma            :integer(4)      default(20), not null
    +#  max_karma            :integer(4)      default(20), not null
     #  nb_votes             :integer(4)      default(0), not null
     #  stylesheet           :string(255)
     #  email                :string(255)     default(""), not null
    @@ -190,8 +192,17 @@ class Account < ActiveRecord::Base
    
     ### Karma ###
    
    +  def update_karma_bounds
    +    if self.karma > self.max_karma then
    +      self.max_karma = self.karma
    +    else if self.karma < self.min_karma then
    +      self.min_karma = self.karma
    +    end
    +  end
    +
       def daily_karma
         self.karma += $redis.get("users/#{self.user_id}/diff_karma").to_i
    +    update_karma_bounds
         $redis.del("users/#{self.user_id}/diff_karma")
         self.nb_votes = [3 + karma / 10, 100].min
         save
    @@ -199,6 +210,7 @@ class Account < ActiveRecord::Base
    
       def give_karma(points)
         self.karma += points
    +    update_karma_bounds
         save
       end
    
    diff --git a/app/views/users/_recent.html.haml b/app/views/users/_recent.html.haml
    index 67d3435..5c79743 100644
    --- a/app/views/users/_recent.html.haml
    +++ b/app/views/users/_recent.html.haml
    @@ -8,7 +8,7 @@
         %ul
           %li Courriel&nbsp;: #{a.email}
           %li Rôle&nbsp;: #{a.role}
    -      %li Karma&nbsp;: #{a.karma}
    +      %li Karma&nbsp;: #{a.karma} (minimum&nbsp;: #{a.min_karma}, maximum&nbsp;: #{a.max_karma})
           %li Dernière connexion&nbsp;: #{a.current_sign_in_at ? l(@user.account.current_sign_in_at) : "-"}
         - if current_account.can_plonk?
           %h2 Interdire de tribune
    diff --git a/db/migrate/20090505233940_create_accounts.rb b/db/migrate/20090505233940_create_accounts.rb
    index 4984a8f..68383f2 100644
    --- a/db/migrate/20090505233940_create_accounts.rb
    +++ b/db/migrate/20090505233940_create_accounts.rb
    @@ -6,6 +6,8 @@ class CreateAccounts < ActiveRecord::Migration
           t.string   :login, :limit => 40,  :null => false
           t.string   :role,  :limit => 10,  :null => false, :default => 'moule'
           t.integer  :karma,                :null => false, :default => 20
    +      t.integer  :min_karma,            :null => false, :default => 20
    +      t.integer  :max_karma,            :null => false, :default => 20
           t.integer  :nb_votes,             :null => false, :default => 0
           t.string   :stylesheet
           t.string   :old_password, :limit => 20
    diff --git a/db/schema.rb b/db/schema.rb
    index 525a360..f379062 100644
    --- a/db/schema.rb
    +++ b/db/schema.rb
    @@ -32,6 +32,8 @@ ActiveRecord::Schema.define(:version => 20120428174758) do
         t.string   "login",                  :limit => 40,                         :null => false
         t.string   "role",                   :limit => 10,  :default => "visitor", :null => false
         t.integer  "karma",                                 :default => 20,        :null => false
    +    t.integer  "min_karma",                             :default => 20,        :null => false
    +    t.integer  "max_karma",                             :default => 20,        :null => false
         t.integer  "nb_votes",                              :default => 0,         :null => false
         t.string   "stylesheet"
         t.string   "email",                                 :default => "",        :null => false
    diff --git a/spec/factories/accounts.rb b/spec/factories/accounts.rb
    index ada429e..60465e8 100644
    --- a/spec/factories/accounts.rb
    +++ b/spec/factories/accounts.rb
    @@ -8,6 +8,8 @@
     #  login                :string(40)      not null
     #  role                 :string(10)      default("visitor"), not null
     #  karma                :integer(4)      default(20), not null
    +#  min_karma            :integer(4)      default(20), not null
    +#  max_karma            :integer(4)      default(20), not null
     #  nb_votes             :integer(4)      default(0), not null
     #  stylesheet           :string(255)
     #  email                :string(255)     default(""), not null
    diff --git a/spec/models/account_spec.rb b/spec/models/account_spec.rb
    index bf9275f..84cc9a9 100644
    --- a/spec/models/account_spec.rb
    +++ b/spec/models/account_spec.rb
    @@ -8,6 +8,8 @@
     #  login                :string(40)      not null
     #  role                 :string(10)      default("visitor"), not null
     #  karma                :integer(4)      default(20), not null
    +#  min_karma            :integer(4)      default(20), not null
    +#  max_karma            :integer(4)      default(20), not null
     #  nb_votes             :integer(4)      default(0), not null
     #  stylesheet           :string(255)
     #  email                :string(255)     default(""), not null
    
    

Envoyer un commentaire

Suivre le flux des commentaires

Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.