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;