* Extract page view updates into workers * Restructure code * Update specs * Fix and reactive 2 specs * Update according to PR feedback * Use create! over create
34 lines
986 B
Ruby
34 lines
986 B
Ruby
class PageViewsController < ApplicationMetalController
|
|
# ApplicationMetalController because we do not need all bells and whistles of ApplicationController.
|
|
# It should help performance.
|
|
include ActionController::Head
|
|
|
|
def create
|
|
page_view_create_params = params.slice(:article_id, :referrer, :user_agent)
|
|
if session_current_user_id
|
|
page_view_create_params[:user_id] = session_current_user_id
|
|
else
|
|
page_view_create_params[:counts_for_number_of_views] = 10
|
|
end
|
|
|
|
Articles::UpdatePageViewsWorker.perform_at(
|
|
2.minutes.from_now,
|
|
page_view_create_params,
|
|
)
|
|
|
|
head :ok
|
|
end
|
|
|
|
def update
|
|
if session_current_user_id
|
|
page_view = PageView.order(created_at: :desc)
|
|
.find_or_create_by(article_id: params[:id], user_id: session_current_user_id)
|
|
|
|
unless page_view.new_record?
|
|
page_view.update_column(:time_tracked_in_seconds, page_view.time_tracked_in_seconds + 15)
|
|
end
|
|
end
|
|
|
|
head :ok
|
|
end
|
|
end
|