14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
|
# File 'lib/legion/extensions/synapse/runners/mutate.rb', line 14
def mutate(synapse_id:, mutation_type:, changes:, trigger:)
Data::Model.define_synapse_model
Data::Model.define_synapse_mutation_model
synapse = Data::Model::Synapse[synapse_id]
return { success: false, error: 'synapse not found' } unless synapse
return { success: false, error: "invalid mutation_type: #{mutation_type}" } unless VALID_MUTATION_TYPES.include?(mutation_type)
return { success: false, error: "invalid trigger: #{trigger}" } unless VALID_TRIGGERS.include?(trigger)
before_state = snapshot(synapse)
apply_changes(synapse, mutation_type, changes)
after_state = snapshot(synapse)
new_version = synapse.version + 1
synapse.update(version: new_version)
Data::Model::SynapseMutation.create(
synapse_id: synapse.id,
version: new_version,
mutation_type: mutation_type,
before_state: Legion::JSON.dump(before_state),
after_state: Legion::JSON.dump(after_state),
trigger: trigger
)
{ success: true, version: new_version, synapse_id: synapse.id }
end
|