Separate db for auditing in tests
[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
20 ## create new transaction here?
c5fba518 21 my $res = $self->next::method();
74f04ccc 22 if($self->in_storage)
23 {
c5fba518 24 my $s_name = $self->result_source->source_name();
74f04ccc 25 my $al = $self->result_source->schema->_journal_schema->resultset("${s_name}AuditLog");
8092c4ed 26 my ($pri, $too_many) = map { $self->get_column($_)} $self->primary_columns;
27 if(defined $pri && defined $too_many)
28 {
29 $self->throw_exception( "More than one possible key found for auto-inc on ".ref $self );
30 }
31 $pri ||= \'NULL'; #'
74f04ccc 32 $al->create({
8092c4ed 33 ID => $pri,
f3602465 34# created => {
35# changeset => $self->result_source->schema->_journal_schema->current_changeset(),
36# },
74f04ccc 37 });
b5851590 38 }
c5fba518 39
40 return $res;
74f04ccc 41}
42
43## On delete, update delete_id of AuditLog
44
1e996809 45sub delete
46{
47 my ($self, @rest) = @_;
48 $self->next::method(@rest);
49
50 if(!$self->in_storage)
51 {
52 my $s_name = $self->result_source->source_name();
53 my $al = $self->result_source->schema->_journal_schema->resultset("${s_name}AuditLog");
54 my ($pri, $too_many) = map { $self->get_column($_)} $self->primary_columns;
55 if(defined $pri && defined $too_many)
56 {
57 $self->throw_exception( "More than one possible key found for auto-inc on ".ref $self );
58 }
59
60 if($pri)
61 {
62 my $alentry = $al->find({ID => $pri});
63 $self->throw_exception( "No audit_log entry found for ".ref($self) . " item $pri" ) if(!$alentry);
64
65 ## bulk_update doesnt do "create new item on update of rel-accessor with hashref, yet
66 my $change = $self->result_source->schema->_journal_schema->resultset('Change')->create({ changeset_id => $self->result_source->schema->_journal_schema->current_changeset });
67 $alentry->delete_id($change->ID);
68 $alentry->update();
69 }
70 }
71
72}
73
74f04ccc 74## On update, copy previous row's contents to AuditHistory
75
1e996809 76sub update
77{
78 my ($self, $upd, @rest) = @_;
79
80 if($self->in_storage)
81 {
82 my $s_name = $self->result_source->source_name();
83 my $ah = $self->result_source->schema->_journal_schema->resultset("${s_name}AuditHistory");
84
85 my $obj = $self->result_source->resultset->find( $self->ident_condition );
86 $ah->create({
87 $obj->get_columns
88 });
89 }
90
91 $self->next::method($upd, @rest);
92}
93
f0f14c64 94
95
961;