mirror of
https://github.com/scinote-eln/scinote-web.git
synced 2024-12-29 19:51:01 +08:00
106 lines
3.3 KiB
Ruby
106 lines
3.3 KiB
Ruby
|
# frozen_string_literal: true
|
||
|
|
||
|
module BioEddieActions
|
||
|
extend ActiveSupport::Concern
|
||
|
|
||
|
private
|
||
|
|
||
|
def create_edit_bio_eddie_activity(asset, current_user, started_editing)
|
||
|
action = case started_editing
|
||
|
when :start_editing
|
||
|
t('activities.file_editing.started')
|
||
|
when :finish_editing
|
||
|
t('activities.file_editing.finished')
|
||
|
end
|
||
|
return unless bio_eddie_asset_validation(asset)
|
||
|
|
||
|
bio_eddie_find_target_object(asset, current_user, 'edit', action)
|
||
|
end
|
||
|
|
||
|
def create_create_bio_eddie_activity(asset, current_user)
|
||
|
return unless bio_eddie_asset_validation(asset)
|
||
|
|
||
|
bio_eddie_find_target_object(asset, current_user, 'create')
|
||
|
end
|
||
|
|
||
|
def create_delete_bio_eddie_activity(asset, current_user)
|
||
|
return unless bio_eddie_asset_validation(asset)
|
||
|
|
||
|
bio_eddie_find_target_object(asset, current_user, 'delete')
|
||
|
end
|
||
|
|
||
|
def bio_eddie_asset_validation(asset)
|
||
|
asset && asset.file.metadata[:asset_type] == 'bio_eddie'
|
||
|
end
|
||
|
|
||
|
def bio_eddie_asset_type(asset, klass)
|
||
|
return true if asset.step_asset&.step.instance_of?(klass)
|
||
|
return true if asset.result_asset&.result.instance_of?(klass)
|
||
|
|
||
|
false
|
||
|
end
|
||
|
|
||
|
def bio_eddie_find_target_object(asset, current_user, activity_type, action = nil)
|
||
|
if bio_eddie_asset_type(asset, Step)
|
||
|
bio_eddie_step_activity(asset, current_user, activity_type, action)
|
||
|
elsif bio_eddie_asset_type(asset, Result)
|
||
|
bio_eddie_result_activity(asset, current_user, activity_type, action)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
def bio_eddie_step_activity(asset, current_user, activity, action = nil)
|
||
|
step = asset.step_asset&.step
|
||
|
asset_type = 'asset_name'
|
||
|
protocol = step&.protocol
|
||
|
|
||
|
return unless step && protocol
|
||
|
|
||
|
default_step_items =
|
||
|
{ step: step.id,
|
||
|
step_position: { id: step.id, value_for: 'position_plus_one' },
|
||
|
asset_type => { id: asset.id, value_for: 'file_name' } }
|
||
|
|
||
|
default_step_items[:action] = action if action
|
||
|
if protocol.in_module?
|
||
|
project = protocol.my_module.experiment.project
|
||
|
team = project.team
|
||
|
type_of = "#{activity}_molecule_on_step".to_sym
|
||
|
message_items = { my_module: protocol.my_module.id }
|
||
|
else
|
||
|
type_of = "#{activity}_molecule_on_step_in_repository".to_sym
|
||
|
team = protocol.team
|
||
|
message_items = { protocol: protocol.id }
|
||
|
end
|
||
|
message_items = default_step_items.merge(message_items)
|
||
|
Activities::CreateActivityService
|
||
|
.call(activity_type: type_of,
|
||
|
owner: current_user,
|
||
|
subject: protocol,
|
||
|
team: team,
|
||
|
project: project,
|
||
|
message_items: message_items)
|
||
|
end
|
||
|
|
||
|
def bio_eddie_result_activity(asset, current_user, activity, action = nil)
|
||
|
result = asset.result_asset&.result
|
||
|
asset_type = 'asset_name'
|
||
|
my_module = result&.my_module
|
||
|
|
||
|
return unless result && my_module
|
||
|
|
||
|
message_items = {
|
||
|
result: result.id,
|
||
|
asset_type => { id: asset.id, value_for: 'file_name' }
|
||
|
}
|
||
|
|
||
|
message_items[:action] = action if action
|
||
|
Activities::CreateActivityService
|
||
|
.call(activity_type: "#{activity}_molecule_on_step_on_result".to_sym,
|
||
|
owner: current_user,
|
||
|
subject: result,
|
||
|
team: my_module.experiment.project.team,
|
||
|
project: my_module.experiment.project,
|
||
|
message_items: message_items)
|
||
|
end
|
||
|
end
|