The Perl and Raku Conference 2025: Greenville, South Carolina - June 27-29 Learn more

BEGIN {
$BPM::Engine::Store::Result::ProcessInstance::VERSION = '0.01';
$BPM::Engine::Store::Result::ProcessInstance::AUTHORITY = 'cpan:SITETECH';
}
use Moose;
BPM::Engine::Store::ResultRole::WithAttributes/;
my $WORDGEN = Silly::Werder->new();
__PACKAGE__->load_components(qw/TimeStamp DynamicDefault/);
__PACKAGE__->table('wfe_process_instance');
__PACKAGE__->add_columns(
instance_id => {
data_type => 'INT',
is_auto_increment => 1,
is_nullable => 0,
extras => { unsigned => 1 }
},
process_id => {
data_type => 'CHAR',
size => 36,
is_nullable => 0,
is_foreign_key => 1,
},
parent_ai_id => { # parent blockactivity
data_type => 'INT',
is_nullable => 1,
},
instance_name => {
data_type => 'VARCHAR',
size => 64,
is_nullable => 1,
dynamic_default_on_create => sub { $WORDGEN->get_werd() },
},
workflow_instance_id => { # state machine
data_type => 'INT',
is_nullable => 1,
},
created => {
data_type => 'DATETIME',
is_nullable => 0,
set_on_create => 1,
timezone => 'UTC',
},
completed => {
data_type => 'DATETIME',
is_nullable => 1,
timezone => 'UTC',
},
);
__PACKAGE__->set_primary_key(qw/ instance_id /);
__PACKAGE__->belongs_to(
process => 'BPM::Engine::Store::Result::Process','process_id'
);
__PACKAGE__->has_many(
attributes => 'BPM::Engine::Store::Result::ProcessInstanceAttribute',
{ 'foreign.process_instance_id' => 'self.instance_id' }
);
__PACKAGE__->has_many(
activity_instances => 'BPM::Engine::Store::Result::ActivityInstance',
{ 'foreign.process_instance_id' => 'self.instance_id' }, { order_by => 'prev' }
);
__PACKAGE__->belongs_to(
parent_activity_instance => 'BPM::Engine::Store::Result::ActivityInstance',
{ 'foreign.token_id' => 'self.parent_ai_id' }
);
__PACKAGE__->has_many(
state_events => 'BPM::Engine::Store::Result::ProcessInstanceState',
{ 'foreign.process_instance_id' => 'self.instance_id' }
);
__PACKAGE__->has_many(
workitems => 'BPM::Engine::Store::Result::WorkItem',
{ 'foreign.process_instance_id' => 'self.instance_id' }
);
sub insert {
my ($self, @args) = @_;
my $guard = $self->result_source->schema->txn_scope_guard;
$self->next::method(@args);
$self->discard_changes;
my $rel = $self->create_related('state_events', {
state => $self->workflow->get_state($self->workflow->initial_state),
});
$self->update({ workflow_instance_id => $rel->id });
$guard->commit;
return $self;
}
sub TO_JSON {
my $self = shift;
my $fields = {
map { $_ => $self->$_() }
qw/instance_id process_id instance_name created completed/
};
# $fields->{attributes} = [ map { $_->TO_JSON } $self->attributes_rs->all ];
return $fields;
}
__PACKAGE__->meta->make_immutable( inline_constructor => 0 );
1;
__END__