master
1module Admin
2 class SessionsController < AdminController
3 def index
4 @user_sessions = sessions.filter_by(search_filters)
5 @direction = params[:direction].present? ? directions[params[:direction].to_sym] : :asc
6 end
7
8 def destroy
9 UserSession.find(params[:id]).revoke!
10 redirect_to admin_sessions_path
11 end
12
13 private
14
15 def sessions
16 UserSession.includes(:user, :location)
17 end
18
19 def search_filters
20 [sort_filter]
21 end
22
23 def sort_filter
24 direction = params[:direction].present? ? params[:direction].to_sym : :asc
25 case params[:sort].try(:downcase)
26 when "ip"
27 ->(sessions) { sessions.order(ip: direction) }
28 when 'city'
29 ->(sessions) { sessions.joins(:location).order("locations.city #{direction}") }
30 when 'ua'
31 ->(sessions) { sessions.order(user_agent: direction) }
32 else
33 ->(sessions) { sessions.order(created_at: :desc) }
34 end
35 end
36
37 def directions
38 {
39 asc: :desc,
40 desc: :asc,
41 }
42 end
43 end
44end