Passes tests again!
[dbsrgits/DBIx-Class-Journal.git] / lib / DBIx / Class / Journal.pm
CommitLineData
f0f14c64 1package DBIx::Class::Journal;
2
3use base qw/DBIx::Class/;
f0f14c64 4
74f04ccc 5## On create/insert, add new entry to AuditLog
6
c5fba518 7# sub new
8# {
9# my ($class, $attrs, @rest) = @_;
74f04ccc 10
c5fba518 11# $class->result_source->schema->_journal_schema->current_user(delete $attrs->{user_id});
74f04ccc 12
c5fba518 13# $class->next::method($attrs, @rest);
14# }
74f04ccc 15
16sub insert
17{
18 my ($self) = @_;
19
d19af369 20 return if($self->in_storage);
74f04ccc 21 ## create new transaction here?
c5fba518 22 my $res = $self->next::method();
74f04ccc 23 if($self->in_storage)
24 {
c5fba518 25 my $s_name = $self->result_source->source_name();
74f04ccc 26 my $al = $self->result_source->schema->_journal_schema->resultset("${s_name}AuditLog");
8092c4ed 27 my ($pri, $too_many) = map { $self->get_column($_)} $self->primary_columns;
28 if(defined $pri && defined $too_many)
29 {
30 $self->throw_exception( "More than one possible key found for auto-inc on ".ref $self );
31 }
32 $pri ||= \'NULL'; #'
74f04ccc 33 $al->create({
8092c4ed 34 ID => $pri,
f3602465 35# created => {
36# changeset => $self->result_source->schema->_journal_schema->current_changeset(),
37# },
74f04ccc 38 });
b5851590 39 }
c5fba518 40
41 return $res;
74f04ccc 42}
43
44## On delete, update delete_id of AuditLog
45
1e996809 46sub delete
47{
48 my ($self, @rest) = @_;
49 $self->next::method(@rest);
50
51 if(!$self->in_storage)
52 {
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)
57 {
58 $self->throw_exception( "More than one possible key found for auto-inc on ".ref $self );
59 }
60
61 if($pri)
62 {
63 my $alentry = $al->find({ID => $pri});
64 $self->throw_exception( "No audit_log entry found for ".ref($self) . " item $pri" ) if(!$alentry);
65
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);
69 $alentry->update();
70 }
71 }
72
73}
74
74f04ccc 75## On update, copy previous row's contents to AuditHistory
76
1e996809 77sub update
78{
79 my ($self, $upd, @rest) = @_;
80
81 if($self->in_storage)
82 {
83 my $s_name = $self->result_source->source_name();
84 my $ah = $self->result_source->schema->_journal_schema->resultset("${s_name}AuditHistory");
85
86 my $obj = $self->result_source->resultset->find( $self->ident_condition );
87 $ah->create({
88 $obj->get_columns
89 });
90 }
91
92 $self->next::method($upd, @rest);
93}
94
f0f14c64 95
96
971;