Commit 68e9824794fc1e3dfb42a9f32184eeffa3c3dcdc

Authored by Hugo Melo
1 parent 3d62563c

Add endpoints for points by type, profile and others

lib/ext/person.rb
... ... @@ -12,4 +12,19 @@ class Person
12 12 # FIXME: FIND OUT A WAY TO CHECK EVERY REGISTRY FIELD
13 13 false
14 14 end
  15 +
  16 + def points_by_type type
  17 + categorizations = GamificationPlugin::PointsCategorization.by_type(type)
  18 + categorizations.inject(0) {|sum, c| sum += self.points(category: c.id.to_s) }
  19 + end
  20 +
  21 + def points_by_profile profile
  22 + categorizations = GamificationPlugin::PointsCategorization.by_profile(profile)
  23 + categorizations.inject(0) {|sum, c| sum += self.points(category: c.id.to_s) }
  24 + end
  25 +
  26 + def points_out_of_profiles
  27 + categorizations = GamificationPlugin::PointsCategorization.where(profile_id: nil)
  28 + categorizations.inject(0) { |sum, c| sum += self.points(category: c.id.to_s) }
  29 + end
15 30 end
... ...
lib/gamification_plugin/api.rb
... ... @@ -11,6 +11,22 @@ class GamificationPlugin::API < Grape::API
11 11 authenticate!
12 12 present current_person.badges, :with => Noosfero::API::Entities::Badge
13 13 end
  14 + get 'points' do
  15 + authenticate!
  16 + {points: current_person.points}
  17 + end
  18 + get 'points_by_type' do
  19 + authenticate!
  20 + {points: current_person.points_by_type(params[:type]) }
  21 + end
  22 + get 'points_by_profile' do
  23 + authenticate!
  24 + {points: current_person.points_by_profile(params[:profile]) }
  25 + end
  26 + get 'points_out_of_profiles' do
  27 + authenticate!
  28 + {points: current_person.points_out_of_profiles }
  29 + end
14 30  
15 31 get 'level' do
16 32 authenticate!
... ... @@ -36,6 +52,24 @@ class GamificationPlugin::API < Grape::API
36 52 {:points => person.points}
37 53 end
38 54  
  55 + get ':id/points_by_type' do
  56 + person = environment.people.visible_for_person(current_person).find_by_id(params[:id])
  57 + return not_found! if person.blank?
  58 + {points: person.points_by_type(params[:type]) }
  59 + end
  60 +
  61 + get ':id/points_by_profile' do
  62 + person = environment.people.visible_for_person(current_person).find_by_id(params[:id])
  63 + return not_found! if person.blank?
  64 + {points: person.points_by_type(params[:profile]) }
  65 + end
  66 +
  67 + get ':id/points_out_of_profiles' do
  68 + person = environment.people.visible_for_person(current_person).find_by_id(params[:id])
  69 + return not_found! if person.blank?
  70 + {points: person.points_out_of_profiles }
  71 + end
  72 +
39 73 get ':id/level' do
40 74 person = environment.people.visible_for_person(current_person).find_by_id(params[:id])
41 75 return not_found! if person.blank?
... ...