Pics count method. Fix counting when there is only one object.
[blog.pm-common-perl-mods.git] / Common-RDBO-Helper / lib / Common / RDBO / Helper / Comment / Manager.pm
blob3c259d3b96e0a828eac4ab3578b097eed16a4d86
1 package Common::RDBO::Helper::Comment::Manager;
3 use strict;
4 use warnings;
6 use Rose::Object::MixIn();
7 our @ISA = qw(Rose::Object::MixIn);
9 use Hash::Merge 'merge';
11 __PACKAGE__->export_tag(
12 all => [ qw/ get_list get_recent fill_comment_count / ] );
14 sub get_list {
15 my $self = shift;
16 my %args = ref $_[ 0 ] eq 'HASH' ? %{ $_[ 0 ] } : @_;
18 use Data::Dumper;
20 #die Dumper \%args;
21 return $self->get_objects( %args );
24 sub get_recent {
25 my $self = shift;
26 my %args = ref $_[ 0 ] eq 'HASH' ? %{ $_[ 0 ] } : @_;
28 my $limit = delete $args{ limit } || 10;
30 use Data::Dumper;
32 #die Dumper \%args;
34 my $cond = merge {
35 sort_by => 'addtime DESC',
36 limit => $limit,
38 #require_objects => [ 'post' ]
40 \%args;
42 #die Dumper $cond;
44 return $self->get_list( $cond );
47 sub fill_comment_count {
48 my ( $self ) = shift;
49 my %args =
50 ref $_[ 0 ] eq 'HASH' ? %{ $_[ 0 ] }
51 : scalar @_ == 1 ? ( objects => $_[ 0 ] )
52 : @_;
54 my @objects;
55 if ( ref $args{ objects } eq 'ARRAY' ) {
56 @objects = @{ delete $args{ objects } };
57 } else {
58 $objects[0] = delete $args{ objects };
61 my ( $rel ) =
62 grep { $_->name eq 'comments' }
63 @{ $self->object_class->meta->relationships };
65 if ( scalar @objects ) {
66 my $cond = merge {
67 query => [ master_id => [ map { $_->id } @objects ] ],
68 select => [ 'master_id', \'COUNT(id) AS comment_count' ],
69 group_by => 'master_id'
71 \%args;
73 my $comments = $self->get_objects( %$cond );
75 my %comments = map { $_->master_id => $_->comment_count } @$comments;
77 foreach ( @objects ) {
78 $_->{ comment_count } = $comments{ $_->id }
79 if $comments{ $_->id };