Luc Didry 18499a
# vim:set sw=4 ts=4 sts=4 ft=perl expandtab:
Luc Didry 18499a
package Lufi::DB::Slice::Pg;
Luc Didry 18499a
use Mojo::Base 'Lufi::DB::Slice';
Luc Didry 18499a
use Mojo::Collection 'c';
Luc Didry 18499a
Luc Didry 18499a
has 'record' => 0;
Luc Didry 18499a
Luc Didry 18499a
sub new {
Luc Didry 18499a
    my $c = shift;
Luc Didry 18499a
Luc Didry 18499a
    $c = $c->SUPER::new(@_);
Luc Didry 18499a
Luc Didry 18499a
    return $c;
Luc Didry 18499a
}
Luc Didry 18499a
Luc Didry 18499a
sub write {
Luc Didry 18499a
    my $c = shift;
Luc Didry 18499a
Luc Didry 18499a
    if ($c->record) {
Luc Didry 18499a
        $c->app->pg->db->query('UPDATE slices SET short = ?, j = ?, path = ? WHERE short = ? AND j = ?', $c->short, $c->j, $c->path, $c->short, $c->j);
Luc Didry 18499a
    } else {
Luc Didry 18499a
        $c->app->pg->db->query('INSERT INTO slices (short, j, path) VALUES (?, ?, ?)', $c->short, $c->j, $c->path);
Luc Didry 18499a
        $c->record(1);
Luc Didry 18499a
    }
Luc Didry 18499a
Luc Didry 18499a
    return $c;
Luc Didry 18499a
}
Luc Didry 18499a
Luc Didry 18499a
sub get_slices_of_file {
Luc Didry 18499a
    my $c     = shift;
Luc Didry 18499a
    my $short = shift;
Luc Didry 18499a
Luc Didry 18499a
    my @slices;
Luc Didry 18499a
    my $records = $c->app->pg->db->query('SELECT * FROM slices WHERE short = ? ORDER BY j ASC', $short)->hashes;
Luc Didry 18499a
    $records->each(
Luc Didry 18499a
        sub {
Luc Didry 18499a
            my ($e, $num) = @_;
Luc Didry 18499a
            my $i = Lufi::DB::Slice->new(app => $c->app);
Luc Didry 18499a
Luc Didry 18499a
            push @slices, $i->_slurp($e);
Luc Didry 18499a
        }
Luc Didry 18499a
    );
Luc Didry 18499a
Luc Didry 18499a
    return c(@slices);
Luc Didry 18499a
}
Luc Didry 18499a
Luc Didry 18499a
sub _slurp {
Luc Didry 18499a
    my $c = shift;
Luc Didry 18499a
    my $r = shift;
Luc Didry 18499a
Luc Didry 18499a
    my $slice;
Luc Didry 18499a
    if (defined $r) {
Luc Didry 18499a
        $slice = $r;
Luc Didry 18499a
    } else {
Luc Didry 18499a
        my $slices = $c->app->pg->db->query('SELECT * FROM slices WHERE short = ? AND j = ?', $c->short, $c->j)->hashes;
Luc Didry 18499a
Luc Didry 18499a
        if ($slices->size) {
Luc Didry 18499a
            $slice = $slices->first;
Luc Didry 18499a
        }
Luc Didry 18499a
    }
Luc Didry 18499a
Luc Didry 18499a
    if ($slice) {
Luc Didry 18499a
        $c->short($slice->{short});
Luc Didry 18499a
        $c->j($slice->{j});
Luc Didry 18499a
        $c->path($slice->{path});
Luc Didry 18499a
Luc Didry 18499a
        $c->record(1);
Luc Didry 18499a
    }
Luc Didry 18499a
Luc Didry 18499a
    return $c;
Luc Didry 18499a
}
Luc Didry 18499a
Luc Didry 18499a
1;