# 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