+sub related_stories {
+ my ($self, $stoid) = @_;
+ my $stories = $self->app->model('stories');
+
+ return $stories->get_related_items(stoid => $stoid);
+}
+
+sub latest {
+ my ($self, $limit) = @_;
+ my $c = $self->c;
+
+ my $user = $c->stash('user');
+ $limit ||= $c->_get_config("item_per_page", 10);
+ my $show_future = $user->{is_admin} ? 1 : 0;
+ my $show_nonpublic = $user->{is_admin} ? 1 : 0;
+
+ my $stories;
+ if ($user->{is_login}) {
+ $stories = $c->model('stories');
+ }
+ else {
+ # TODO: check expire time
+ $stories = $c->ezcache->model('stories', { expire => 60 });
+ }
+ my $items = $stories->select(hide_future => !$user->{is_admin},
+ public_only => !$user->{is_admin},
+ limit => $limit + 1,
+ order_by => {create_time => 'desc'},
+ );
+
+ return $items;
+}
+