1 package DBIx::Class::Journal;
3 use base qw/DBIx::Class/;
5 ## On create/insert, add new entry to AuditLog
9 # my ($class, $attrs, @rest) = @_;
11 # $class->result_source->schema->_journal_schema->current_user(delete $attrs->{user_id});
13 # $class->next::method($attrs, @rest);
20 return if($self->in_storage);
21 ## create new transaction here?
22 my $res = $self->next::method();
25 my $s_name = $self->result_source->source_name();
26 my $al = $self->result_source->schema->_journal_schema->resultset("${s_name}AuditLog");
27 my ($pri, $too_many) = map { $self->get_column($_)} $self->primary_columns;
28 if(defined $pri && defined $too_many)
30 $self->throw_exception( "More than one possible key found for auto-inc on ".ref $self );
36 # changeset => $self->result_source->schema->_journal_schema->current_changeset(),
44 ## On delete, update delete_id of AuditLog
48 my ($self, @rest) = @_;
49 $self->next::method(@rest);
51 if(!$self->in_storage)
53 my $s_name = $self->result_source->source_name();
54 my $al = $self->result_source->schema->_journal_schema->resultset("${s_name}AuditLog");
55 my ($pri, $too_many) = map { $self->get_column($_)} $self->primary_columns;
56 if(defined $pri && defined $too_many)
58 $self->throw_exception( "More than one possible key found for auto-inc on ".ref $self );
63 my $alentry = $al->find({ID => $pri});
64 $self->throw_exception( "No audit_log entry found for ".ref($self) . " item $pri" ) if(!$alentry);
66 ## bulk_update doesnt do "create new item on update of rel-accessor with hashref, yet
67 my $change = $self->result_source->schema->_journal_schema->resultset('Change')->create({ changeset_id => $self->result_source->schema->_journal_schema->current_changeset });
68 $alentry->delete_id($change->ID);
75 ## On update, copy previous row's contents to AuditHistory
79 my ($self, $upd, @rest) = @_;
83 my $s_name = $self->result_source->source_name();
84 my $ah = $self->result_source->schema->_journal_schema->resultset("${s_name}AuditHistory");
86 my $obj = $self->result_source->resultset->find( $self->ident_condition );
92 $self->next::method($upd, @rest);