From d312f965af0d1db94fb016ec4a1a5c673864ca59 Mon Sep 17 00:00:00 2001
From: Alexandre Morignot <erdnaxeli@cervoi.se>
Date: Thu, 19 Feb 2015 00:34:41 +0100
Subject: [PATCH] Sam::commands::list uses ORM

---
 Sam/commands/list.pm | 83 +++++++++++++++++---------------------------
 1 file changed, 32 insertions(+), 51 deletions(-)

diff --git a/Sam/commands/list.pm b/Sam/commands/list.pm
index d90ee11..e563781 100644
--- a/Sam/commands/list.pm
+++ b/Sam/commands/list.pm
@@ -1,5 +1,10 @@
 package Sam::commands::list;
 
+use strict;
+
+use DateTime;
+use Sam::Event::Manager;
+
 require Exporter;
 our @ISA = qw(Exporter);
 our @EXPORT_OK = qw(exec);
@@ -12,67 +17,43 @@ sub exec {
     my $chan = shift;
     my $sth;
 
-    if ($chan->[0] =~ /^#/) {
-        $sth = $dbh->prepare_cached('SELECT id, title, DATE_FORMAT(date, "%d/%m/%Y"), place, description, link
-            FROM sam
-            WHERE date > NOW()
-            ORDER BY date
-            LIMIT 2'
-        );
-    } else {
-        $sth = $dbh->prepare_cached('SELECT id, title, DATE_FORMAT(date, "%d/%m/%Y"), place, description, link
-            FROM sam
-            WHERE date > NOW()
-            ORDER BY date'
-        );
-    }
-
-    unless (defined $sth) {
-    	$log->error("Couldn't prepare querie; aborting");
-        return;
-    }
-
-	$sth->execute()
-		or $log->error("Couldn't finish transaction: " . $dbh->errstr);
+    my $events = Sam::Event::Manager->get_events(
+        query   =>
+        [
+            date => { 'gt' => DateTime->now() },
+        ],
+        sort_by => 'date',
+        limit   => ($chan->[0] =~ /^#/) ? 2 : 10,
+    );
 
-    if (!$sth->rows) {
+    if (scalar @{$events} == 0) {
         $irc->yield(privmsg => $chan => "Aucune soirée à venir enregistrée, on se fait bien chier…");
         return;
     }
 
-    while ($row = $sth->fetch) {
-        $msg = "[".$row->[0]."] ".$row->[1]." le ".$row->[2];
-        $msg .= " @ ".$row->[3] if ($row->[3]);
-        $msg .= " : ".$row->[4] if ($row->[4]);
-        $msg .= " <".$row->[5].">" if ($row->[5]);
+    foreach (@{$events}) {
+        my $msg = "[".$_->id."] ".$_->title;
+        $msg .=" le ".$_->date->strftime('%d/%m/%Y');
+        $msg .= " @ ".$_->place if ($_->place);
+        $msg .= " : ".$_->description if ($_->description);
+        $msg .= " <".$_->link.">" if ($_->link);
         $irc->yield(privmsg => $chan => $msg);
     }
 
-    if ($chan->[0] =~ /^#/) {
-        $sth = $dbh->prepare_cached('SELECT count(*)
-            FROM sam
-            where date > ?'
-        );
-
-        unless (defined $sth) {
-            $log->error("Couldn't prepare querie; aborting");
-            return;
-        }
+    my $events_nb = Sam::Event::Manager->get_events_count(
+        query => [ date => { 'gt' => DateTime->now() } ]
+    );
 
-	    $sth->execute(scalar time)
-		    or $log->error("Couldn't finish transaction: " . $dbh->errstr);
+    $events_nb -= 2;
+    $events_nb -= 8 if ($chan->[0] !~ /^#/); # query
 
-        $row = $sth->fetch;
-        $events = $row->[0] - 2;
-
-        if ($events > 0) {
-            $msg = $events . " autre";
-            $msg .= "s" if ($events > 1);
-            $msg .= " soirée";
-            $msg .= "s" if ($events > 1);
-            $msg .= " sur http://nightiies.iiens.net/sam/";
-            $irc->yield(privmsg => $chan => $msg);
-        }
+    if ($events_nb > 0) {
+        my $msg = $events_nb . " autre";
+        $msg .= "s" if ($events_nb > 1);
+        $msg .= " soirée";
+        $msg .= "s" if ($events_nb > 1);
+        $msg .= " sur http://nightiies.iiens.net/sam/";
+        $irc->yield(privmsg => $chan => $msg);
     }
 }
 
-- 
GitLab