From b391e033cbf2124bb7b815bc289820b2b02e879f Mon Sep 17 00:00:00 2001 From: tmn21 <tmn21@inf.ufpr.br> Date: Wed, 24 May 2023 11:51:38 -0300 Subject: [PATCH] ISSUE #38: CREATE streak route --- app/controllers/v1/users_controller.rb | 11 +++++++++++ app/models/user.rb | 23 +++++++++++++++++++++++ app/models/view.rb | 1 + app/serializers/user_serializer.rb | 4 +++- app/services/learning_object_publisher.rb | 3 +++ config/routes.rb | 1 + 6 files changed, 42 insertions(+), 1 deletion(-) diff --git a/app/controllers/v1/users_controller.rb b/app/controllers/v1/users_controller.rb index de41f3513..55c574c05 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 ae740e609..4c360cd33 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 c18f1b5cb..3aedbb486 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 7c3ecdca8..16591fd05 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 5515fc954..45cfdda4d 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 229c06a65..5238f976d 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 -- GitLab