お絵かき画像をMojoliciousでサーバーサイドに保存する
クオリティはあれなんですが、やっとReact+SVGでお絵かきができるように
なったので、サーバサイドに保存してみたくなった。
JSON-RPCを使ってみよう。以下とても、参考になりそう。qiita.com
セッションに紐づけて保存したいので、
そこはHayajoさんのモジュールを使ってみよう。
セッションIDだけを保存して、セッションIDに紐づけて、JSON文字列を保存するようにした
package AgeWatch::Service::RPCService; use Mojo::Base 'MojoX::JSON::RPC::Service'; use JSON::XS; my @METHODS = qw/ save load /; sub new { my $class = shift; my $self = $class->SUPER::new(@_); for(@METHODS){ $self->register( $_ => \&{$_}, { with_self => 1. } ); } return $self; } sub save { my ($app, $param) = @_; $app->session(expiration => 31536000); my $session_id = $app->session_options->{id}; my $json = encode_json($param); my $row = $app->db->single('AgeWatch', {session_id => $session_id}); if (defined $row){ $row->update( { json => $json, update_at => \"Now()" } ); } else{ my $route = $app->db->insert('AgeWatch', { session_id => $session_id, json => $json, create_at => \"Now()" } ); } return "ok"; } sub load { my ($app, $param) = @_; my $session_id = $app->session_options->{id}; my $row = $app->db->single('AgeWatch', {session_id => $session_id}); if (defined $row ){ return decode_json($row->json); } else{ return {birthday =>{year=> 1970, month=>1, day => 1} , paths => []}; } } 1;