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