package Foorum::ResultSet::Message;
use strict;
use warnings;
our $VERSION = '1.001000';
use base 'DBIx::Class::ResultSet';
sub remove_from_db {
my ( $self, $message_id ) = @_;
my $schema = $self->result_source->schema;
$self->search( { message_id => $message_id } )->delete;
$schema->resultset('MessageUnread')
->search( { message_id => $message_id } )->delete;
}
sub are_messages_unread {
my ( $self, $user_id, $message_ids ) = @_;
return unless ($user_id);
my $schema = $self->result_source->schema;
my @rs = $schema->resultset('MessageUnread')->search(
{ user_id => $user_id,
message_id => $message_ids,
},
{ columns => ['message_id'], }
)->all;
my $unread;
$unread->{ $_->message_id } = 1 foreach (@rs);
return $unread;
}
sub get_unread_cnt {
my ( $self, $user_id ) = @_;
my $schema = $self->result_source->schema;
my $cache = $schema->cache();
my $cachekey = "global|message_unread_cnt|user_id=$user_id";
my $cacheval = $cache->get($cachekey);
if ($cacheval) {
return $cacheval->{val};
} else {
my $cnt = $schema->resultset('MessageUnread')
->count( { user_id => $user_id } );
$cache->set( $cachekey, { val => $cnt, 1 => 2 }, 1800 )
; # half an hour
return $cnt;
}
}
1;