From 26aa2ba19f444b41d6a7c05bc2a0436758e3a951 Mon Sep 17 00:00:00 2001 From: swag Date: Sun, 2 Jan 2022 01:31:33 -0500 Subject: [PATCH] Implement is_spam column --- README.md | 2 +- guestbook-ng.pl | 10 +++++----- lib/GuestbookNg/Model/Message.pm | 27 +++++++++++++++++---------- migrations/5/down.sql | 2 ++ migrations/5/up.sql | 10 ++++++++++ 5 files changed, 35 insertions(+), 16 deletions(-) create mode 100644 migrations/5/down.sql create mode 100644 migrations/5/up.sql diff --git a/README.md b/README.md index a942ae6..7b7e538 100644 --- a/README.md +++ b/README.md @@ -51,4 +51,4 @@ Add the `-v` option for more verbose output 1. Input validation 1. Filter URLs out of message body -1. Add column to tag posts as spam or hidden +1. Set date in the DB rather than the model diff --git a/guestbook-ng.pl b/guestbook-ng.pl index 7dea7f9..6dca81a 100755 --- a/guestbook-ng.pl +++ b/guestbook-ng.pl @@ -67,14 +67,14 @@ any [qw{GET POST}], '/sign' => sub ($c) { my $name = $c->param('name') || 'Anonymous'; my $url = $c->param('url'); my $message = $c->param('message'); - my $answer = $c->param('answer'); + my $spam = $c->param('answer') ? 0 : 1; - if ($message && $answer) { - $c->message->create_post($name, $message, $url); + if ($message) { + $c->message->create_post($name, $message, $url, $spam); $c->redirect_to('index'); } else { - $c->flash(error => 'Uh-oh!! Please try again.'); + $c->flash(error => 'Message cannot be blank'); $c->redirect_to('sign'); } } @@ -106,7 +106,7 @@ app->secrets(app->config->{'secrets'}) || die $@; app->message->max_posts(app->config->{'max_posts'}) if app->config->{'max_posts'}; -app->pg->migrations->from_dir('migrations')->migrate(4); +app->pg->migrations->from_dir('migrations')->migrate(5); app->asset->store->paths(['assets']); app->asset->process('swagg.css', 'css/swagg.css'); diff --git a/lib/GuestbookNg/Model/Message.pm b/lib/GuestbookNg/Model/Message.pm index e8962b4..84c6d3d 100644 --- a/lib/GuestbookNg/Model/Message.pm +++ b/lib/GuestbookNg/Model/Message.pm @@ -20,43 +20,46 @@ sub get_posts($self, $this_page = undef) { return $self->pg->db ->query(<<~'END_SQL', $row_count, $offset)->arrays(); - SELECT to_char(message_date, 'Dy Mon DD HH:MI:SS AM TZ YYYY'), + SELECT TO_CHAR(message_date, 'Dy Mon DD HH:MI:SS AM TZ YYYY'), visitor_name, message, homepage_url FROM messages + WHERE NOT is_spam ORDER BY message_date DESC LIMIT ? OFFSET ?; END_SQL } else { return $self->pg->db->query(<<~'END_SQL')->arrays() - SELECT to_char(message_date, 'Dy Mon DD HH:MI:SS AM TZ YYYY'), + SELECT TO_CHAR(message_date, 'Dy Mon DD HH:MI:SS AM TZ YYYY'), visitor_name, message, homepage_url FROM messages + WHERE NOT is_spam ORDER BY message_date DESC; END_SQL } } -sub create_post($self, $name, $message, $url = undef) { +sub create_post($self, $name, $message, $url = undef, $spam = 1) { if ($url) { - $self->pg->db->query(<<~'END_SQL', $name, $message, $url) + $self->pg->db->query(<<~'END_SQL', $name, $message, $url, $spam) INSERT INTO messages ( message_date, visitor_name, message, - homepage_url + homepage_url, + is_spam ) - VALUES (NOW(), ?, ?, ?); + VALUES (NOW(), ?, ?, ?, ?); END_SQL } else { - $self->pg->db->query(<<~'END_SQL', $name, $message) - INSERT INTO messages (message_date, visitor_name, message) - VALUES (NOW(), ?, ?); + $self->pg->db->query(<<~'END_SQL', $name, $message, $spam) + INSERT INTO messages (message_date, visitor_name, message, is_spam) + VALUES (NOW(), ?, ?, ?); END_SQL } @@ -76,7 +79,11 @@ sub get_last_page($self) { } sub get_post_count($self) { - return $self->pg->db->query('SELECT count(*) FROM messages;')->text() + return $self->pg->db->query(<<~'END_SQL')->text() + SELECT COUNT(*) + FROM messages + WHERE NOT is_spam; + END_SQL } 1; diff --git a/migrations/5/down.sql b/migrations/5/down.sql new file mode 100644 index 0000000..e86bab5 --- /dev/null +++ b/migrations/5/down.sql @@ -0,0 +1,2 @@ +ALTER TABLE messages + DROP COLUMN is_spam; diff --git a/migrations/5/up.sql b/migrations/5/up.sql new file mode 100644 index 0000000..dcd73d9 --- /dev/null +++ b/migrations/5/up.sql @@ -0,0 +1,10 @@ + ALTER TABLE messages + ADD is_spam BOOLEAN; + +UPDATE messages + SET is_spam = FALSE + WHERE is_spam IS NULL; + + ALTER TABLE messages + ALTER COLUMN is_spam + SET NOT NULL;