OSDN Git Service

Model::Journals: fix 'select' method to support query by uid
authorhylom <hylom@users.sourceforge.jp>
Tue, 1 Nov 2016 10:53:34 +0000 (19:53 +0900)
committerhylom <hylom@users.sourceforge.jp>
Tue, 1 Nov 2016 10:53:34 +0000 (19:53 +0900)
src/newslash_web/lib/Newslash/Model/Journals.pm

index d0d5698..eedc947 100644 (file)
@@ -2,7 +2,6 @@ package Newslash::Model::Journals;
 use Newslash::Model::Base -base;
 
 use Data::Dumper;
-use Mojo::Log;
 
 #========================================================================
 
@@ -56,8 +55,7 @@ EOSQL
     my $sth = $dbh->prepare($sql);
 
     $sth->execute($limit);
-    my $rs = $sth->fetchall_arrayref(+{});
-    $sth->finish;
+    my $rs = $sth->fetchall_arrayref({});
     $dbh->disconnect();
 
     if (@$rs == 0) {
@@ -102,14 +100,37 @@ HASH of story contents
 =cut
 
 sub select {
-  my ($self, $query_type, $value) = @_;
+    my $self = shift;
+    my $params = {@_};
+    my $query_type;
+    my @query_params;
+
+    if (defined $params->{uid}) {
+        $query_type = 'uid';
+        push @query_params, $params->{uid};
+    }
+    elsif (defined $params->{id}) {
+        $query_type = 'id';
+        push @query_params, $params->{id};
+    }
 
-  if ($query_type !~ m/\A(id)\z/) {
-    return undef;
-  }
+    if (!$query_type) {
+        return;
+    }
+
+    my $limit_clause = "";
+    if (defined $params->{limit}) {
+        $limit_clause = "LIMIT ?";
+        push @query_params, $params->{limit};
+    }
+    my $offset_clause = "";
+    if (defined $params->{offset}) {
+        $offset_clause = "OFFSET ?";
+        push @query_params, $params->{offset};
+    }
 
-  my $dbh = $self->connect_db;
-  my $sql = <<"EOSQL";
+    my $dbh = $self->connect_db;
+    my $sql = <<"EOSQL";
 SELECT journals.*, journals_text.*, users.nickname as author, firehose.toptags, topics.*
   FROM journals
     LEFT JOIN journals_text ON journals.id = journals_text.id
@@ -117,20 +138,28 @@ SELECT journals.*, journals_text.*, users.nickname as author, firehose.toptags,
     LEFT JOIN firehose ON journals.id = srcid
     LEFT JOIN topics ON journals.tid = topics.tid
   WHERE journals.$query_type = ? AND firehose.type = 'journal'
+  ORDER BY date DESC
+  $limit_clause
+  $offset_clause
 EOSQL
 
-  my $sth = $dbh->prepare($sql);
-  $sth->execute($value);
-  my $journal = $sth->fetchrow_hashref;
-  $sth->finish;
-  $dbh->disconnect();
+    my $sth = $dbh->prepare($sql);
+    $sth->execute(@query_params);
+    my $rs = $sth->fetchall_arrayref({});
+    $dbh->disconnect();
 
-  if (!$journal) {
-    return undef;
-  }
+    if (@$rs == 0) {
+        return [];
+    }
 
-  $self->_generalize($journal);
-  return $journal;
+    for my $j (@$rs) {
+        $self->_generalize($j);
+    }
+
+    if ($query_type eq 'id') {
+        return $rs->[0];
+    }
+    return $rs;
 }
 
 sub _generalize {