diff --git a/app/controllers/v1/users_controller.rb b/app/controllers/v1/users_controller.rb index de41f351399871c2eecf7d952df8d6859de3c7ac..55c574c05f1a046eb2ca0d63608293bf6ffa322b 100644 --- a/app/controllers/v1/users_controller.rb +++ b/app/controllers/v1/users_controller.rb @@ -179,6 +179,7 @@ class V1::UsersController < ApplicationController end # GET /v1/top_users + # GET /v1/top_users.json def show_top_users # select users who are not admin and order by level, limit to 5 users ids = User.joins(:roles_users).where(roles_users: {role_id: 3}).pluck(:user_id) @@ -187,6 +188,16 @@ class V1::UsersController < ApplicationController render json: users end + # GET /v1/most_active_users + # GET /v1/most_active_users.json + def most_active_users + # select users who are not admin and order by streak, limit to 5 users + ids = User.joins(:roles_users).where(roles_users: {role_id: 3}).pluck(:user_id) + users = User.where.not(id: ids).order("streak DESC").limit(5) + render json: users + end + + # GET /v1/users/teacher_requests # GET /v1/users/teacher_requests.json def teacher_requests diff --git a/app/models/user.rb b/app/models/user.rb index ae740e609dc155ce5924f85f14812c1103b1edd5..4c360cd33fd4e63bbf35954f926421151e5c6e5f 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -79,6 +79,8 @@ # level :integer default("1") # points :integer default("0") # last_sign_in_day :datetime +# last_action_at :date +# streak :integer default("0") class User < ApplicationRecord include Followable @@ -385,6 +387,27 @@ class User < ApplicationRecord end end + def update_streak() + if self.last_action_at==Date.today + return + end + + # increase streak count + if self.last_action_at==Date.yesterday + self.update(last_action_at: Date.today) + self.update(streak: streak+1) + return + end + + # restart streak count + if Date.today - self.last_action_at >= 2 + self.update(last_action_at: Date.today) + self.update(streak: 1) + end + + end + + def complete_action(action, quantity=1) return false, { "error": "action not found"} if action.blank? diff --git a/app/models/view.rb b/app/models/view.rb index c18f1b5cb9927e57e2def31abb15b779dc454d0b..3aedbb486e8e3f88415367e561475deee1d4b155 100644 --- a/app/models/view.rb +++ b/app/models/view.rb @@ -60,6 +60,7 @@ class View < ApplicationRecord def create_action if !user.nil? + user.update_streak() if viewable_type == "LearningObject" user.complete_action(Action.find_by_name("Visualizar um Recurso")) viewable.subjects.each do |subject| diff --git a/app/serializers/user_serializer.rb b/app/serializers/user_serializer.rb index 7c3ecdca8ec7b244d853dfa293dc30c3c9d04247..16591fd051c391cd198dbdf1479bc3f657b10709 100644 --- a/app/serializers/user_serializer.rb +++ b/app/serializers/user_serializer.rb @@ -109,7 +109,9 @@ class UserSerializer < ActiveModel::Serializer :level, :level_xp, :experience, - :points + :points, + :last_action_at, + :streak attribute \ :times_blocked, if: :is_current_user? diff --git a/app/services/learning_object_publisher.rb b/app/services/learning_object_publisher.rb index 5515fc9541ba0169a08080d77637c9df3ca5d095..45cfdda4d01356907b544e056d5a7721cbd532f3 100644 --- a/app/services/learning_object_publisher.rb +++ b/app/services/learning_object_publisher.rb @@ -31,6 +31,8 @@ class LearningObjectPublisher draft.id_dspace = item.id draft.publisher = publisher draft.save + + draf.publisher.update_streak() update_dspace(draft) @@ -53,6 +55,7 @@ class LearningObjectPublisher learning_object.save learning_object.new_activity(:publish) learning_object.publisher.complete_action(Action.find_by_name("Publicar")) + learning_object.publisher.update_streak() if learning_object.link? && learning_object.thumbnail.blank? att = learning_object.attachments.create(retrieve_link: learning_object.link, bundle_name: "LINK") ThumbnailGenerateWorker.perform_async(att.id) diff --git a/config/routes.rb b/config/routes.rb index 229c06a652b0d44ab83afd0e0442bbded16d0dbf..5238f976dde673e8cf11aadf773c0abb8f703bd1 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -249,6 +249,7 @@ Rails.application.routes.draw do get 'learning_objects_complaints/queue_user/:user_id', to: 'learning_objects_complaints#queue_user' get 'user_progresses/:user_id', to: 'user_progresses#index' get '/top_users', to: 'users#show_top_users' + get '/most_active_users', to: 'users#most_active_users' get '/email', to: 'email#index' end end