scinote-web/app/services/repository_actions/duplicate_rows.rb

56 lines
1.5 KiB
Ruby

# frozen_string_literal: true
module RepositoryActions
class DuplicateRows
attr_reader :number_of_duplicated_items
def initialize(user, repository, rows_ids = [])
@user = user
@repository = repository
@rows_to_duplicate = rows_ids
@number_of_duplicated_items = 0
end
def call
@rows_to_duplicate.each do |row_id|
duplicate_row(row_id)
end
end
private
def duplicate_row(id)
RepositoryRow.transaction do
row = @repository.repository_rows.find_by(id: id)
return unless row
new_row = RepositoryRow.create!(
row.attributes.merge(new_row_attributes(row.name, @user.id))
)
row.repository_cells.each do |cell|
RepositoryActions::DuplicateCell.new(cell, new_row, @user).call
end
@number_of_duplicated_items += 1
Activities::CreateActivityService
.call(activity_type: :copy_inventory_item,
owner: @user,
subject: @repository,
team: @repository.team,
message_items: { repository_row_new: new_row.id, repository_row_original: row.id })
end
end
def new_row_attributes(name, user_id)
timestamp = DateTime.now
{ id: nil,
name: "#{name} (1)",
created_by_id: user_id,
created_at: timestamp,
updated_at: timestamp,
parent_connections_count: 0,
child_connections_count: 0 }
end
end
end