mirror of
https://github.com/scinote-eln/scinote-web.git
synced 2024-11-12 12:16:06 +08:00
33 lines
1.4 KiB
Ruby
33 lines
1.4 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
class Step < ApplicationRecord
|
|
# Making sure we don't get undesired callbacks in the future
|
|
# But still enjoy the handyness of using the model
|
|
end
|
|
|
|
class FixLastChangedByOnSteps < ActiveRecord::Migration[6.1]
|
|
# There was an issue with API steps endpoint not settings last_modified_by_id
|
|
# this migration fix the affected records
|
|
# At the moment it seems only the complete and uncomplete actions were problematic
|
|
#
|
|
# The enterprise build of SciNote also uses the Audit Trails
|
|
# In this instance we don't neet to worry about these changes
|
|
# because we're not recording the changes to last_modified_by_id
|
|
|
|
def up
|
|
Step.where(last_modified_by_id: nil).find_each do |step|
|
|
# Try to find corresponding activity, if step was changed activity should exist
|
|
# we cannot completely rely on that, so for the fallback we use the step user
|
|
activity = Activity
|
|
.where(type_of: %i(complete_step uncomplete_step))
|
|
.where("values -> 'message_items' -> 'step' ->> 'id' = ?", step.id.to_s)
|
|
.order(created_at: :desc)
|
|
.first
|
|
if activity && user_id = activity.values.dig('message_items', 'user', 'id')
|
|
step.update_column(:last_modified_by_id, user_id)
|
|
else
|
|
step.update_column(:last_modified_by_id, step.user_id)
|
|
end
|
|
end
|
|
end
|
|
end
|