RSS Git Download  Clone
Raw Blame History
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;