/usr/local/CPAN/Parley/Parley/ResultSet/ThreadView.pm


package Parley::ResultSet::ThreadView;
# vim: ts=8 sts=4 et sw=4 sr sta
use strict;
use warnings;

use Parley::Version;  our $VERSION = $Parley::VERSION;

use base 'DBIx::Class::ResultSet';

sub watching_thread {
    my ($self, $thread, $person) = @_;

    if (not defined $thread) {
        warn 'undefined value passed as $thread in watching_thread()';
        return;
    }
    if (not defined $person) {
        warn 'undefined value passed as $person in watching_thread()';
        return;
    }

    my $thread_view = $self->find(
        {
            person_id => $person->id(),
            thread_id => $thread->id(),
        }
    );

    return $thread_view->watched();
}

sub notification_list {
    my ($self, $post) = @_;
    my ($schema);

    if (not defined $post) {
        warn 'undefined value passed as $post in notification_list()';
        return;
    }

    # make sure we have full object details
    # [we don't seem to get all the default column data for a new create()]
    $schema = $self->result_source()->schema();
    $post = $schema->resultset('Post')->find(
        id => $post->id()
    );
    if (not defined $post) {
        warn 'failed to re-fetch post in notification_list()';
        return;
    }

    # find the list of people to notify about this update
    my $notification_list = $self->search(
        {
            # the thread the post belongs to
            thread_id       => $post->thread()->id(),
            # only interested in records where a person is watching
            watched         => 1,
            # and they last viewed the thread before the last post
            timestamp       => {
                '<',
                DateTime::Format::Pg->format_datetime(
                    $post->created()
                )
            },
            # and they've not been notified
            last_notified   => [
                {   '=',    undef   },
                   \'< timestamp'    ,
            ],
            # and they aren't the person that created the post itself
            person_id => {
                '!=',
                $post->creator()->id(),
            },
        }
    );

    return $notification_list;
}

1;