package Dancer2::Session::DB;
use Moo;
with 'Dancer2::Core::Role::SessionFactory';
use Data::Printer;
use Storable qw(freeze thaw);
use lib '/home/raj/perl-lib';
use Local::DB;
has dsn => ( # passed in from config as engines/Session/DB/dsn
is => 'ro',
);
has dbname => ( # passed in from config as engines/Session/DB/dbname
is => 'ro',
);
has dbix => (
is => 'lazy',
builder => sub { Local::DB->dbix(shift->dbname); },
# builder => sub { DBIx::Simple->connect(shift->dsn); }, # to create new handle for sessions
);
sub _retrieve {
my ( $self, $id ) = @_;
my $session = $self->dbix->select('sessions', '*', { id => $id } )->hash;
my $data = $self->_deserialize($session->{a_session}); # ddp $data;
return $data;
}
sub _flush {
my ( $self, $id, $data ) = @_; # ddp $data;
# local $ENV{SQL_TRACE} = 0; # to prevent query output for storable data
if ( $self->dbix->select('sessions', 1, { id => $id } )->list ) {
my $store = $self->_serialize($data);
$self->dbix->update('sessions', { a_session => $store }, { id => $id });
#my $user = $data->{user_profile}; # to update userid col
#my $userid = join '.', $user->{first_name}, $user->{last_name};
}
else {
my %h = ( id => $id, a_session => freeze $data );
$self->dbix->insert('sessions', \%h);
}
}
sub _destroy {
my ( $self, $id ) = @_;
$self->dbix->delete('sessions', { id => $id });
}
sub _sessions {
my ($self) = @_;
my $all = $self->dbix->select('sessions', 'id')->list;
return $all;
}
sub _serialize {
my ($self, $session) = @_;
return freeze $session;
}
sub _deserialize {
my ($self, $serialised) = @_;
return thaw $serialised;
}
1;