Loading README.md +1 −0 Original line number Diff line number Diff line Loading @@ -21,6 +21,7 @@ Dependencies * Geo::Distance * Mojolicious * Mojolicious::Plugin::Authentication * Mojo::Pg * Travel::Status::DE::IRIS * UUID::Tiny * JSON Loading lib/Travelynx.pm +77 −57 Original line number Diff line number Diff line package Travelynx; use Mojo::Base 'Mojolicious'; use Mojo::Pg; use Mojolicious::Plugin::Authentication; use Cache::File; use Crypt::Eksblowfish::Bcrypt qw(bcrypt en_base64); Loading Loading @@ -241,32 +242,6 @@ sub startup { ); } ); $self->attr( add_stats_query => sub { my ($self) = @_; return $self->app->dbh->prepare( qq{ insert into journey_stats (user_id, year, month, data) values (?, ?, ?, ?) } ); } ); $self->attr( drop_stats_query => sub { my ($self) = @_; return $self->app->dbh->prepare( qq{ delete from journey_stats where user_id = ? and year = ? and month = ? } ); } ); $self->attr( action_set_sched_time_query => sub { my ($self) = @_; Loading Loading @@ -566,23 +541,30 @@ qq{select * from pending_mails where email = ? and num_tries > 1;} qq{select id from stations where name = ?}); } ); $self->attr( undo_query => sub { my ($self) = @_; return $self->app->dbh->prepare( qq{ delete from user_actions where id = ? } $self->helper( sendmail => sub { state $sendmail = Travelynx::Helper::Sendmail->new( config => ( $self->config->{mail} // {} ), log => $self->log ); }, } ); $self->helper( sendmail => sub { state $sendmail = Travelynx::Helper::Sendmail->new( config => ( $self->config->{mail} // {} ) ); pg => sub { my ($self) = @_; my $config = $self->app->config; my $dbname = $config->{db}->{database}; my $host = $config->{db}->{host} // 'localhost'; my $port = $config->{db}->{port} // 5432; my $user = $config->{db}->{user}; my $pw = $config->{db}->{password}; state $pg = Mojo::Pg->new("postgresql://${user}\@${host}:${port}/${dbname}") ->password($pw); } ); Loading Loading @@ -798,17 +780,16 @@ qq{select * from pending_mails where email = ? and num_tries > 1;} "Invalid action ID: $action_id != $status->{action_id}. Note that you can only undo your latest action."; } my $success = $self->app->undo_query->execute($action_id); if ( defined $success ) { return; } else { eval { $self->pg->db->delete( 'user_actions', { id => $action_id } ); }; if ($@) { my $uid = $self->current_user->{id}; my $err = $self->app->undo_query->errstr; $self->app->log->error("Undo($uid): DELETE failed: $err"); return 'DELETE failed: ' . $err; $self->app->log->error( "Undo($uid, $action_id): DELETE failed: $@"); return 'DELETE failed: ' . $@; } return; } ); Loading @@ -828,15 +809,48 @@ qq{select * from pending_mails where email = ? and num_tries > 1;} # * (year) - 1 year # * total stats $self->app->drop_stats_query->execute( $uid, $ts->year, $ts->month ); $self->app->drop_stats_query->execute( $uid, $ts->year, 0 ); $self->pg->db->delete( 'journey_stats', { user_id => $uid, year => $ts->year, month => $ts->month, } ); $self->pg->db->delete( 'journey_stats', { user_id => $uid, year => $ts->year, month => 0, } ); $ts->subtract( months => 1 ); $self->app->drop_stats_query->execute( $uid, $ts->year, $ts->month ); $self->pg->db->delete( 'journey_stats', { user_id => $uid, year => $ts->year, month => $ts->month, } ); $ts->subtract( months => 11 ); $self->app->drop_stats_query->execute( $uid, $ts->year, 0 ); $self->app->drop_stats_query->execute( $uid, 0, 0 ); $self->pg->db->delete( 'journey_stats', { user_id => $uid, year => $ts->year, month => 0, } ); $self->pg->db->delete( 'journey_stats', { user_id => $uid, year => 0, month => 0, } ); } ); Loading Loading @@ -1285,9 +1299,15 @@ qq{select * from pending_mails where email = ? and num_tries > 1;} ); my $stats = $self->compute_journey_stats(@journeys); $self->app->drop_stats_query->execute( $uid, $year, $month ); $self->app->add_stats_query->execute( $uid, $year, $month, JSON->new->encode($stats) ); $self->pg->db->insert( 'journey_stats', { user_id => $uid, year => $year, month => $month, data => JSON->new->encode($stats), } ); return $stats; } Loading Loading
README.md +1 −0 Original line number Diff line number Diff line Loading @@ -21,6 +21,7 @@ Dependencies * Geo::Distance * Mojolicious * Mojolicious::Plugin::Authentication * Mojo::Pg * Travel::Status::DE::IRIS * UUID::Tiny * JSON Loading
lib/Travelynx.pm +77 −57 Original line number Diff line number Diff line package Travelynx; use Mojo::Base 'Mojolicious'; use Mojo::Pg; use Mojolicious::Plugin::Authentication; use Cache::File; use Crypt::Eksblowfish::Bcrypt qw(bcrypt en_base64); Loading Loading @@ -241,32 +242,6 @@ sub startup { ); } ); $self->attr( add_stats_query => sub { my ($self) = @_; return $self->app->dbh->prepare( qq{ insert into journey_stats (user_id, year, month, data) values (?, ?, ?, ?) } ); } ); $self->attr( drop_stats_query => sub { my ($self) = @_; return $self->app->dbh->prepare( qq{ delete from journey_stats where user_id = ? and year = ? and month = ? } ); } ); $self->attr( action_set_sched_time_query => sub { my ($self) = @_; Loading Loading @@ -566,23 +541,30 @@ qq{select * from pending_mails where email = ? and num_tries > 1;} qq{select id from stations where name = ?}); } ); $self->attr( undo_query => sub { my ($self) = @_; return $self->app->dbh->prepare( qq{ delete from user_actions where id = ? } $self->helper( sendmail => sub { state $sendmail = Travelynx::Helper::Sendmail->new( config => ( $self->config->{mail} // {} ), log => $self->log ); }, } ); $self->helper( sendmail => sub { state $sendmail = Travelynx::Helper::Sendmail->new( config => ( $self->config->{mail} // {} ) ); pg => sub { my ($self) = @_; my $config = $self->app->config; my $dbname = $config->{db}->{database}; my $host = $config->{db}->{host} // 'localhost'; my $port = $config->{db}->{port} // 5432; my $user = $config->{db}->{user}; my $pw = $config->{db}->{password}; state $pg = Mojo::Pg->new("postgresql://${user}\@${host}:${port}/${dbname}") ->password($pw); } ); Loading Loading @@ -798,17 +780,16 @@ qq{select * from pending_mails where email = ? and num_tries > 1;} "Invalid action ID: $action_id != $status->{action_id}. Note that you can only undo your latest action."; } my $success = $self->app->undo_query->execute($action_id); if ( defined $success ) { return; } else { eval { $self->pg->db->delete( 'user_actions', { id => $action_id } ); }; if ($@) { my $uid = $self->current_user->{id}; my $err = $self->app->undo_query->errstr; $self->app->log->error("Undo($uid): DELETE failed: $err"); return 'DELETE failed: ' . $err; $self->app->log->error( "Undo($uid, $action_id): DELETE failed: $@"); return 'DELETE failed: ' . $@; } return; } ); Loading @@ -828,15 +809,48 @@ qq{select * from pending_mails where email = ? and num_tries > 1;} # * (year) - 1 year # * total stats $self->app->drop_stats_query->execute( $uid, $ts->year, $ts->month ); $self->app->drop_stats_query->execute( $uid, $ts->year, 0 ); $self->pg->db->delete( 'journey_stats', { user_id => $uid, year => $ts->year, month => $ts->month, } ); $self->pg->db->delete( 'journey_stats', { user_id => $uid, year => $ts->year, month => 0, } ); $ts->subtract( months => 1 ); $self->app->drop_stats_query->execute( $uid, $ts->year, $ts->month ); $self->pg->db->delete( 'journey_stats', { user_id => $uid, year => $ts->year, month => $ts->month, } ); $ts->subtract( months => 11 ); $self->app->drop_stats_query->execute( $uid, $ts->year, 0 ); $self->app->drop_stats_query->execute( $uid, 0, 0 ); $self->pg->db->delete( 'journey_stats', { user_id => $uid, year => $ts->year, month => 0, } ); $self->pg->db->delete( 'journey_stats', { user_id => $uid, year => 0, month => 0, } ); } ); Loading Loading @@ -1285,9 +1299,15 @@ qq{select * from pending_mails where email = ? and num_tries > 1;} ); my $stats = $self->compute_journey_stats(@journeys); $self->app->drop_stats_query->execute( $uid, $year, $month ); $self->app->add_stats_query->execute( $uid, $year, $month, JSON->new->encode($stats) ); $self->pg->db->insert( 'journey_stats', { user_id => $uid, year => $year, month => $month, data => JSON->new->encode($stats), } ); return $stats; } Loading