package IronMan::Schema::Result::Post;
use strict;
use warnings;
use base qw/DBIx::Class::Core/;
__PACKAGE__->load_components(qw/InflateColumn::DateTime/);
__PACKAGE__->table('posts');
__PACKAGE__->add_columns(
post_id => {
data_type => 'integer',
is_auto_increment => 1,
},
# FK to Feed
feed_id => {
data_type => 'varchar',
size => 255,
},
url => {
data_type => 'varchar',
size => 1024,
},
title => {
data_type => 'varchar',
size => 1024,
},
posted_on => {
data_type => 'datetime',
},
## arbitrary size!
## HTMLTruncate plugin to plagger truns to 300 at the moment
summary => {
data_type => 'text',
is_nullable => 1,
},
body => {
data_type => 'text',
},
summary_filtered => {
data_type => 'text',
is_nullable => 1,
},
body_filtered => {
data_type => 'text',
is_nullable => 1,
},
author => {
data_type => 'varchar',
size => 1024,
},
tags => {
data_type => 'varchar',
size => 1024,
},
);
__PACKAGE__->set_primary_key('post_id');
__PACKAGE__->add_unique_constraint('url' => ['url']);
__PACKAGE__->belongs_to('feed', 'IronMan::Schema::Result::Feed', 'feed_id');
__PACKAGE__->inflate_column('tags', {
'inflate' => sub { return [split(/,/,$_[0])] },
'deflate' => sub { return join(',', @{$_[0]}) },
});
sub next_post {
my $self = shift;
my $dt_parser = $self->result_source->storage->datetime_parser;
return $self->result_source->resultset->search({
'posted_on' => { '<' => $dt_parser->format_datetime($self->posted_on) },
},{
'order_by' => \'posted_on DESC',
'rows' => 1,
})->first;
}
sub prev_post {
my $self = shift;
my $dt_parser = $self->result_source->storage->datetime_parser;
return $self->result_source->resultset->search({
'posted_on' => { '>' => $dt_parser->format_datetime($self->posted_on) },
},{
'order_by' => \'posted_on ASC',
'rows' => 1,
})->first;
}
1;