· 7 years ago · Nov 17, 2018, 12:34 PM
1use strict;
2use warnings;
3use 5.10.0;
4use Data::Dumper;
5use Data::Validator;
6use Net::Amazon::DynamoDB;
7
8use App::Rad;
9App::Rad->run();
10
11sub setup {
12 my $c = shift;
13
14 $c->register_commands( {
15 create => 'ユーザ作æˆ',
16 list => 'ユーザリスト',
17 update => 'ユーザ更新',
18 delete => 'ユーザ削除',
19 });
20
21 # setup dynamodb
22 $c->load_config( 'config');
23 $c->stash->{dynamo} = Net::Amazon::DynamoDB->new(
24 access_key => $c->config->{accessKeyId},
25 secret_key => $c->config->{secretAccessKey},
26 host => $c->config->{host},
27 tables => {
28 'user' => {
29 hash_key => 'id',
30 attributes => {
31 id => 'S',
32 name => 'S',
33 }
34 },
35 },
36 );
37}
38
39sub create {
40 create_or_update(@_);
41 return $c->cmd . "is succeed";
42}
43
44sub update {
45 create_or_update(@_);
46 return $c->cmd . "is succeed";
47}
48
49sub list {
50 my $c = shift;
51 # list
52 my $list = $c->stash->{dynamo}->scan_items(
53 'user', {}, {},
54 );
55 print Dumper $list;
56
57 return $c->cmd . "is succeed";
58}
59
60sub create_or_update {
61 my $c = shift;
62 my $args = eval {
63 state $rule = Data::Validator->new(
64 id => { isa => 'Str'},
65 name => { isa => 'Str'},
66 );
67 $rule->validate($c->options);
68 };
69 if($@) {
70 $c->execute('usage') or return undef;
71 }
72
73 # create
74 $c->stash->{dynamo}->update_item(
75 'user',
76 { name => $args->{id} },
77 { id => $args->{id}, },
78 );
79}
80
81
82sub delete {
83 my $c = shift;
84 my $args = eval {
85 state $rule = Data::Validator->new(
86 id => { isa => 'Str'},
87 );
88 $rule->validate($c->options);
89 };
90 if($@) {
91 $c->execute('usage') or return undef;
92 }
93
94 # delete
95 $c->stash->{dynamo}->delete_item(
96 'user',
97 { id => $c->options->{id} },
98 {},
99 );
100
101 return $c->cmd . "is succeed";
102}