mirror of
https://github.com/scinote-eln/scinote-web.git
synced 2025-02-28 17:54:16 +08:00
Improve loading of the dashboard [SCI-6618] (#4001)
This commit is contained in:
parent
09d0bb4a32
commit
f8a598b408
2 changed files with 99 additions and 83 deletions
|
@ -44,10 +44,13 @@ module Dashboard
|
|||
end
|
||||
|
||||
page = (params[:page] || 1).to_i
|
||||
tasks = tasks.search_by_name(current_user, current_team, task_filters[:query])
|
||||
.joins(:my_module_status)
|
||||
.select('my_modules.*', 'my_module_statuses.name as status_name', 'my_module_statuses.color as status_color')
|
||||
.preload(experiment: :project).page(page).per(Constants::INFINITE_SCROLL_LIMIT)
|
||||
tasks = tasks.search_by_name(current_user, current_team, task_filters[:query]) if task_filters[:query].present?
|
||||
tasks = tasks.joins(:my_module_status)
|
||||
.select(
|
||||
'my_modules.*',
|
||||
'my_module_statuses.name AS status_name',
|
||||
'my_module_statuses.color AS status_color'
|
||||
).preload(experiment: :project).page(page).per(Constants::INFINITE_SCROLL_LIMIT)
|
||||
|
||||
tasks_list = tasks.map do |task|
|
||||
render_to_string(partial: 'dashboards/current_tasks/task', locals: { task: task })
|
||||
|
|
|
@ -23,29 +23,14 @@ module Dashboard
|
|||
all_activities = join_step_user_roles(all_activities)
|
||||
|
||||
team_activities = all_activities.where(subject_type: %w(Team RepositoryBase ProjectFolder))
|
||||
project_activities = all_activities.where(project_user_assignments: { user_id: @user.id })
|
||||
.where('project_user_roles.permissions @> ARRAY[?]::varchar[]',
|
||||
[ProjectPermissions::ACTIVITIES_READ])
|
||||
report_activities = all_activities.where(report_project_user_assignments: { user_id: @user.id })
|
||||
.where('report_project_user_roles.permissions @> ARRAY[?]::varchar[]',
|
||||
[ProjectPermissions::ACTIVITIES_READ])
|
||||
experiment_activities = all_activities.where(experiment_user_assignments: { user_id: @user.id })
|
||||
.where('experiment_user_roles.permissions @> ARRAY[?]::varchar[]',
|
||||
[ExperimentPermissions::ACTIVITIES_READ])
|
||||
my_module_activities = all_activities.where(my_module_user_assignments: { user_id: @user.id })
|
||||
.where('my_module_user_roles.permissions @> ARRAY[?]::varchar[]',
|
||||
[MyModulePermissions::ACTIVITIES_READ])
|
||||
result_activities = all_activities.where(result_my_module_user_assignments: { user_id: @user.id })
|
||||
.where('result_my_module_user_roles.permissions @> ARRAY[?]::varchar[]',
|
||||
[MyModulePermissions::ACTIVITIES_READ])
|
||||
protocol_activities = all_activities.where(protocol_my_module_user_assignments: { user_id: @user.id })
|
||||
.where('protocol_my_module_user_roles.permissions @> ARRAY[?]::varchar[]',
|
||||
[MyModulePermissions::ACTIVITIES_READ])
|
||||
project_activities = all_activities.where.not(project_user_roles: { id: nil })
|
||||
report_activities = all_activities.where.not(report_project_user_roles: { id: nil })
|
||||
experiment_activities = all_activities.where.not(experiment_user_roles: { id: nil })
|
||||
my_module_activities = all_activities.where.not(my_module_user_roles: { id: nil })
|
||||
result_activities = all_activities.where.not(result_my_module_user_roles: { id: nil })
|
||||
protocol_activities = all_activities.where.not(protocol_my_module_user_roles: { id: nil })
|
||||
protocol_repository_activities = all_activities.where(project_id: nil, subject_type: 'Protocol')
|
||||
|
||||
step_activities = all_activities.where(step_my_module_user_assignments: { user_id: @user.id })
|
||||
.where('step_my_module_user_roles.permissions @> ARRAY[?]::varchar[]',
|
||||
[MyModulePermissions::ACTIVITIES_READ])
|
||||
step_activities = all_activities.where.not(step_my_module_user_roles: { id: nil })
|
||||
|
||||
activities = team_activities.or(project_activities)
|
||||
.or(report_activities)
|
||||
|
@ -140,81 +125,109 @@ module Dashboard
|
|||
private
|
||||
|
||||
def join_project_user_roles(activities)
|
||||
activities.joins("LEFT OUTER JOIN projects project_subjects
|
||||
ON project_subjects.id = activities.subject_id AND activities.subject_type='Project'")
|
||||
.joins("LEFT OUTER JOIN user_assignments project_user_assignments
|
||||
ON project_user_assignments.assignable_type = 'Project'
|
||||
AND project_user_assignments.assignable_id = project_subjects.id
|
||||
LEFT OUTER JOIN user_roles project_user_roles
|
||||
ON project_user_roles.id = project_user_assignments.user_role_id")
|
||||
activities.joins(
|
||||
"LEFT OUTER JOIN projects project_subjects
|
||||
ON project_subjects.id = activities.subject_id AND activities.subject_type='Project'
|
||||
LEFT OUTER JOIN user_assignments project_user_assignments
|
||||
ON project_user_assignments.assignable_type = 'Project'
|
||||
AND project_user_assignments.assignable_id = project_subjects.id
|
||||
AND project_user_assignments.user_id = #{@user.id}
|
||||
LEFT OUTER JOIN user_roles project_user_roles
|
||||
ON project_user_roles.id = project_user_assignments.user_role_id
|
||||
AND project_user_roles.permissions @> ARRAY['#{ProjectPermissions::ACTIVITIES_READ}']::varchar[]"
|
||||
)
|
||||
end
|
||||
|
||||
def join_report_project_user_roles(activities)
|
||||
activities.joins("LEFT OUTER JOIN projects report_project_subjects
|
||||
ON report_project_subjects.id = activities.project_id AND activities.subject_type='Report'")
|
||||
.joins("LEFT OUTER JOIN user_assignments report_project_user_assignments
|
||||
ON report_project_user_assignments.assignable_type = 'Project'
|
||||
AND report_project_user_assignments.assignable_id = report_project_subjects.id
|
||||
LEFT OUTER JOIN user_roles report_project_user_roles
|
||||
ON report_project_user_roles.id = report_project_user_assignments.user_role_id")
|
||||
activities.joins(
|
||||
"LEFT OUTER JOIN projects report_project_subjects
|
||||
ON report_project_subjects.id = activities.project_id AND activities.subject_type='Report'
|
||||
LEFT OUTER JOIN user_assignments report_project_user_assignments
|
||||
ON report_project_user_assignments.assignable_type = 'Project'
|
||||
AND report_project_user_assignments.assignable_id = report_project_subjects.id
|
||||
AND report_project_user_assignments.user_id = #{@user.id}
|
||||
LEFT OUTER JOIN user_roles report_project_user_roles
|
||||
ON report_project_user_roles.id = report_project_user_assignments.user_role_id
|
||||
AND report_project_user_roles.permissions @> ARRAY['#{ProjectPermissions::ACTIVITIES_READ}']::varchar[]"
|
||||
)
|
||||
end
|
||||
|
||||
def join_experiment_user_roles(activities)
|
||||
activities.joins("LEFT OUTER JOIN experiments experiment_subjects
|
||||
ON experiment_subjects.id = activities.subject_id AND activities.subject_type='Experiment'")
|
||||
.joins("LEFT OUTER JOIN user_assignments experiment_user_assignments
|
||||
ON experiment_user_assignments.assignable_type = 'Experiment'
|
||||
AND experiment_user_assignments.assignable_id = experiment_subjects.id
|
||||
LEFT OUTER JOIN user_roles experiment_user_roles
|
||||
ON experiment_user_roles.id = experiment_user_assignments.user_role_id")
|
||||
activities.joins(
|
||||
"LEFT OUTER JOIN experiments experiment_subjects
|
||||
ON experiment_subjects.id = activities.subject_id AND activities.subject_type='Experiment'
|
||||
LEFT OUTER JOIN user_assignments experiment_user_assignments
|
||||
ON experiment_user_assignments.assignable_type = 'Experiment'
|
||||
AND experiment_user_assignments.assignable_id = experiment_subjects.id
|
||||
AND experiment_user_assignments.user_id = #{@user.id}
|
||||
LEFT OUTER JOIN user_roles experiment_user_roles
|
||||
ON experiment_user_roles.id = experiment_user_assignments.user_role_id
|
||||
AND experiment_user_roles.permissions @> ARRAY['#{ExperimentPermissions::ACTIVITIES_READ}']::varchar[]"
|
||||
)
|
||||
end
|
||||
|
||||
def join_my_module_user_roles(activities)
|
||||
activities.joins("LEFT OUTER JOIN my_modules my_module_subjects
|
||||
ON my_module_subjects.id = activities.subject_id AND activities.subject_type='MyModule'")
|
||||
.joins("LEFT OUTER JOIN user_assignments my_module_user_assignments
|
||||
ON my_module_user_assignments.assignable_type = 'MyModule'
|
||||
AND my_module_user_assignments.assignable_id = my_module_subjects.id
|
||||
LEFT OUTER JOIN user_roles my_module_user_roles
|
||||
ON my_module_user_roles.id = my_module_user_assignments.user_role_id")
|
||||
activities.joins(
|
||||
"LEFT OUTER JOIN my_modules my_module_subjects
|
||||
ON my_module_subjects.id = activities.subject_id AND activities.subject_type='MyModule'
|
||||
LEFT OUTER JOIN user_assignments my_module_user_assignments
|
||||
ON my_module_user_assignments.assignable_type = 'MyModule'
|
||||
AND my_module_user_assignments.assignable_id = my_module_subjects.id
|
||||
AND my_module_user_assignments.user_id = #{@user.id}
|
||||
LEFT OUTER JOIN user_roles my_module_user_roles
|
||||
ON my_module_user_roles.id = my_module_user_assignments.user_role_id
|
||||
AND my_module_user_roles.permissions @> ARRAY['#{MyModulePermissions::ACTIVITIES_READ}']::varchar[]"
|
||||
)
|
||||
end
|
||||
|
||||
def join_result_user_roles(activities)
|
||||
activities.joins("LEFT OUTER JOIN results result_subjects
|
||||
ON result_subjects.id = activities.subject_id AND activities.subject_type='Result'
|
||||
LEFT OUTER JOIN my_modules result_my_modules
|
||||
ON result_subjects.my_module_id = result_my_modules.id")
|
||||
.joins("LEFT OUTER JOIN user_assignments result_my_module_user_assignments
|
||||
ON result_my_module_user_assignments.assignable_type = 'MyModule'
|
||||
AND result_my_module_user_assignments.assignable_id = result_my_modules.id
|
||||
LEFT OUTER JOIN user_roles result_my_module_user_roles
|
||||
ON result_my_module_user_roles.id = result_my_module_user_assignments.user_role_id")
|
||||
activities.joins(
|
||||
"LEFT OUTER JOIN results result_subjects
|
||||
ON result_subjects.id = activities.subject_id AND activities.subject_type='Result'
|
||||
LEFT OUTER JOIN my_modules result_my_modules
|
||||
ON result_subjects.my_module_id = result_my_modules.id
|
||||
LEFT OUTER JOIN user_assignments result_my_module_user_assignments
|
||||
ON result_my_module_user_assignments.assignable_type = 'MyModule'
|
||||
AND result_my_module_user_assignments.assignable_id = result_my_modules.id
|
||||
AND result_my_module_user_assignments.user_id = #{@user.id}
|
||||
LEFT OUTER JOIN user_roles result_my_module_user_roles
|
||||
ON result_my_module_user_roles.id = result_my_module_user_assignments.user_role_id
|
||||
AND result_my_module_user_roles.permissions @> ARRAY['#{MyModulePermissions::ACTIVITIES_READ}']::varchar[]"
|
||||
)
|
||||
end
|
||||
|
||||
def join_protocol_user_roles(activities)
|
||||
activities.joins("LEFT OUTER JOIN protocols protocol_subjects
|
||||
ON protocol_subjects.id = activities.subject_id AND activities.subject_type='Protocol'
|
||||
LEFT OUTER JOIN my_modules protocol_my_modules
|
||||
ON protocol_subjects.my_module_id = protocol_my_modules.id")
|
||||
.joins("LEFT OUTER JOIN user_assignments protocol_my_module_user_assignments
|
||||
ON protocol_my_module_user_assignments.assignable_type = 'MyModule'
|
||||
AND protocol_my_module_user_assignments.assignable_id = protocol_my_modules.id
|
||||
LEFT OUTER JOIN user_roles protocol_my_module_user_roles
|
||||
ON protocol_my_module_user_roles.id = protocol_my_module_user_assignments.user_role_id")
|
||||
activities.joins(
|
||||
"LEFT OUTER JOIN protocols protocol_subjects
|
||||
ON protocol_subjects.id = activities.subject_id AND activities.subject_type='Protocol'
|
||||
LEFT OUTER JOIN my_modules protocol_my_modules
|
||||
ON protocol_subjects.my_module_id = protocol_my_modules.id
|
||||
LEFT OUTER JOIN user_assignments protocol_my_module_user_assignments
|
||||
ON protocol_my_module_user_assignments.assignable_type = 'MyModule'
|
||||
AND protocol_my_module_user_assignments.assignable_id = protocol_my_modules.id
|
||||
AND protocol_my_module_user_assignments.user_id = #{@user.id}
|
||||
LEFT OUTER JOIN user_roles protocol_my_module_user_roles
|
||||
ON protocol_my_module_user_roles.id = protocol_my_module_user_assignments.user_role_id
|
||||
AND protocol_my_module_user_roles.permissions @> ARRAY['#{MyModulePermissions::ACTIVITIES_READ}']::varchar[]"
|
||||
)
|
||||
end
|
||||
|
||||
def join_step_user_roles(activities)
|
||||
activities.joins("LEFT OUTER JOIN steps step_subjects
|
||||
ON step_subjects.id = activities.subject_id AND activities.subject_type='Step'
|
||||
LEFT OUTER JOIN protocols step_protocols
|
||||
ON step_subjects.protocol_id = step_protocols.id
|
||||
LEFT OUTER JOIN my_modules step_my_modules
|
||||
ON step_protocols.my_module_id = step_my_modules.id")
|
||||
.joins("LEFT OUTER JOIN user_assignments step_my_module_user_assignments
|
||||
ON step_my_module_user_assignments.assignable_type = 'MyModule'
|
||||
AND step_my_module_user_assignments.assignable_id = step_my_modules.id
|
||||
LEFT OUTER JOIN user_roles step_my_module_user_roles
|
||||
ON step_my_module_user_roles.id = step_my_module_user_assignments.user_role_id")
|
||||
activities.joins(
|
||||
"LEFT OUTER JOIN steps step_subjects
|
||||
ON step_subjects.id = activities.subject_id AND activities.subject_type='Step'
|
||||
LEFT OUTER JOIN protocols step_protocols
|
||||
ON step_subjects.protocol_id = step_protocols.id
|
||||
LEFT OUTER JOIN my_modules step_my_modules
|
||||
ON step_protocols.my_module_id = step_my_modules.id
|
||||
LEFT OUTER JOIN user_assignments step_my_module_user_assignments
|
||||
ON step_my_module_user_assignments.assignable_type = 'MyModule'
|
||||
AND step_my_module_user_assignments.assignable_id = step_my_modules.id
|
||||
AND step_my_module_user_assignments.user_id = #{@user.id}
|
||||
LEFT OUTER JOIN user_roles step_my_module_user_roles
|
||||
ON step_my_module_user_roles.id = step_my_module_user_assignments.user_role_id
|
||||
AND step_my_module_user_roles.permissions @> ARRAY['#{MyModulePermissions::ACTIVITIES_READ}']::varchar[]"
|
||||
)
|
||||
end
|
||||
|
||||
def generate_url(recent_object)
|
||||
|
|
Loading…
Reference in a new issue