From d9d387c0964f74cecae0e042c2da6005535f821f Mon Sep 17 00:00:00 2001 From: hylom Date: Fri, 24 Feb 2017 21:17:59 +0900 Subject: [PATCH] Model: add Messages.pm --- src/newslash_web/lib/Newslash/Model.pm | 1 + src/newslash_web/lib/Newslash/Model/Messages.pm | 82 +++++++++++++++++++++++++ src/newslash_web/t/models/messages.t | 46 ++++++++++++++ 3 files changed, 129 insertions(+) create mode 100644 src/newslash_web/lib/Newslash/Model/Messages.pm create mode 100644 src/newslash_web/t/models/messages.t diff --git a/src/newslash_web/lib/Newslash/Model.pm b/src/newslash_web/lib/Newslash/Model.pm index 16e0551a..7678c926 100644 --- a/src/newslash_web/lib/Newslash/Model.pm +++ b/src/newslash_web/lib/Newslash/Model.pm @@ -15,6 +15,7 @@ load(globjs => "Newslash::Model::Globjs"); load(timeline => "Newslash::Model::Timeline"); load(relations => "Newslash::Model::Relations"); load(events => "Newslash::Model::Events"); +load(messages => "Newslash::Model::Messages"); 1; diff --git a/src/newslash_web/lib/Newslash/Model/Messages.pm b/src/newslash_web/lib/Newslash/Model/Messages.pm new file mode 100644 index 00000000..e177e659 --- /dev/null +++ b/src/newslash_web/lib/Newslash/Model/Messages.pm @@ -0,0 +1,82 @@ +package Newslash::Model::Messages; +use Newslash::Model::Base -base; + +use constant MESSAGE_TYPES_TABLE_NAME => 'ns_message_types'; + +use JSON qw(decode_json); +use IO::File; + +sub on_start_up { + my $self = shift; + my $app = shift; + + # create tables + my $table_name = MESSAGE_TYPES_TABLE_NAME; + if (!$self->table_exists($table_name)) { + my $dbh = $self->connect_db; + + my $sql = <<"EOSQL"; +CREATE TABLE IF NOT EXISTS $table_name ( + msgtype_id int(11) NOT NULL PRIMARY KEY, + msgtype_name varchar(32) NOT NULL, + msgtype_description varchar(32) NOT NULL, + msgtype_seclev int(11) NOT NULL DEFAULT '1' +) DEFAULT CHARSET=utf8mb4 +EOSQL + my $rs = $dbh->do($sql, undef); + $self->disconnect_db; + if ($rs) { + return 1; + } + $self->warn("cannot create table: $table_name"); + } + + return 1; +} + +sub create_message_type { + my ($self, $id, $name, $description, $seclev) = @_; + return if (!defined $id || !$name || !$description); + + my $table_name = MESSAGE_TYPES_TABLE_NAME; + my $sql = <<"EOSQL"; +INSERT INTO $table_name + (msgtype_id, msgtype_name, msgtype_description, msgtype_seclev) + VALUES + (?, ?, ?, ?) +EOSQL + my $dbh = $self->connect_db; + my $sth = $dbh->prepare($sql); + my $rs = $sth->execute($id, $name, $description, $seclev); + if (defined $rs) { + $self->disconnect_db; + return $id; + } + $self->disconnect_db; + return $rs; +}; + +sub delete_message_type { + my $self = shift; + my $params = {@_}; + return if !defined $params->{msgtype_id}; + + my $table_name = MESSAGE_TYPES_TABLE_NAME; + my $sql = <<"EOSQL"; +DELETE FROM $table_name WHERE msgtype_id = ? +EOSQL + my $dbh = $self->connect_db; + my $rs = $dbh->do($sql, undef, $params->{msgtype_id}); + $self->disconnect_db; + return $rs; +}; + +sub select_message_type { + my $self = shift; + my $table_name = MESSAGE_TYPES_TABLE_NAME; + return $self->generic_select($table_name, + { unique_keys => [qw(msgtype_id msgtype_name)], }, + @_); +} + +1; diff --git a/src/newslash_web/t/models/messages.t b/src/newslash_web/t/models/messages.t new file mode 100644 index 00000000..788be923 --- /dev/null +++ b/src/newslash_web/t/models/messages.t @@ -0,0 +1,46 @@ +# -*-Perl-*- +# Model::Messages tests +use Mojo::Base -strict; + +use Test::More; +use Test::Mojo; +use Data::Dumper; +use Storable; + + +my $t = Test::Mojo->new('Newslash::Web'); +my $messages = $t->app->model('messages'); + +subtest 'basic message type methods' => sub { + plan skip_all => "mode is not 'test'" if ($t->app->mode ne 'test'); + + my $type = { + msgtype_id => 3333, + msgtype_name => "test_message_foo", + msgtype_description => "テスト用メッセージタイプ", + msgtype_seclev => 100, + }; + my $created_id = $messages->create_message_type($type->{msgtype_id}, + $type->{msgtype_name}, + $type->{msgtype_description}, + $type->{msgtype_seclev}); + is($created_id, $type->{msgtype_id}, "create message type"); + + my $new_obj = $messages->select_message_type(msgtype_id => $type->{msgtype_id}); + is_deeply($new_obj, $type, "select by msgtype_id"); + + $new_obj = $messages->select_message_type(msgtype_name => $type->{msgtype_name}); + is_deeply($new_obj, $type, "select by msgtype_name"); + + my $rs = $messages->select_message_type; + ok($rs, "select with no arguments"); + ok(@$rs > 0, "select some items with no arguments"); + + my $rs = $messages->delete_message_type(msgtype_id => $type->{msgtype_id}); + ok($rs, "delete message type"); + + +}; + + + done_testing(); -- 2.11.0