use App::Class; # Import::Into
class App::DB {
use Data::Printer;
# our $DBNAME; # in case we need direct access to db name (eg DBIx::Simple)
field $dbh :reader :param; # mandatory
field $dsl :reader :param; # mandatory
method find_user ($username) {
my $user = $dbh->quick_select( users => { username => $username } ); # p $user;
return $user;
}
method save_document ($data) { # p $data; # return;
my $result = do { # choice is to capture error, or just die with db error
try { # since user probably cannot do anything about it
$dbh->quick_insert( library => $data );
my $id = $dbh->do('select last_insert_rowid()'); # p $id;
return { id => $id };
}
catch ($e) { # dsl->warning $e; # can't do it
return { error => $e };
}
};
return $result;
}
method get_document ($id) {
my $entry = $dbh->quick_select( library => { id => $id } ); # p entry;
return $entry;
}
method find_documents ($str) {
my @bind = map { '%' . $str . '%' } (1..3); # p @bind;
my $sql = q!select * from library where title like ? or keywords like ?
or content like ?!;
my $res = $dbh->selectall_arrayref( $sql, { Slice => {} }, @bind ); # AoH
return $res;
# alternative using prepare & execute:
# my $sth = $dbh->prepare( $sql );
# $sth->execute(@bind);
# my $result = $sth->fetchall_arrayref({}); # p $result; # AoH
# return $result;
}
}