diff options
Diffstat (limited to 'lib/Travelynx')
| -rw-r--r-- | lib/Travelynx/Controller/Account.pm | 9 | ||||
| -rw-r--r-- | lib/Travelynx/Model/Users.pm | 66 | 
2 files changed, 72 insertions, 3 deletions
diff --git a/lib/Travelynx/Controller/Account.pm b/lib/Travelynx/Controller/Account.pm index 88df2d5..0435d51 100644 --- a/lib/Travelynx/Controller/Account.pm +++ b/lib/Travelynx/Controller/Account.pm @@ -378,13 +378,16 @@ sub insight {  sub webhook {  	my ($self) = @_; -	my $hook = $self->get_webhook; +	my $uid = $self->current_user->{id}; + +	my $hook = $self->users->get_webhook( uid => $uid );  	if ( $self->param('action') and $self->param('action') eq 'save' ) {  		$hook->{url}     = $self->param('url');  		$hook->{token}   = $self->param('token');  		$hook->{enabled} = $self->param('enabled') // 0; -		$self->set_webhook( +		$self->users->set_webhook( +			uid     => $uid,  			url     => $hook->{url},  			token   => $hook->{token},  			enabled => $hook->{enabled} @@ -395,7 +398,7 @@ sub webhook {  			sub {  				$self->render(  					'webhooks', -					hook     => $self->get_webhook, +					hook     => $self->users->get_webhook( uid => $uid ),  					new_hook => 1  				);  			} diff --git a/lib/Travelynx/Model/Users.pm b/lib/Travelynx/Model/Users.pm index 70d81c4..3d19831 100644 --- a/lib/Travelynx/Model/Users.pm +++ b/lib/Travelynx/Model/Users.pm @@ -478,4 +478,70 @@ sub use_history {  	}  } +sub get_webhook { +	my ( $self, %opt ) = @_; +	my $db  = $opt{db} // $self->{pg}->db; +	my $uid = $opt{uid}; + +	my $res_h = $db->select( 'webhooks_str', '*', { user_id => $uid } )->hash; + +	$res_h->{latest_run} = DateTime->from_epoch( +		epoch     => $res_h->{latest_run_ts} // 0, +		time_zone => 'Europe/Berlin', +		locale    => 'de-DE', +	); + +	return $res_h; +} + +sub set_webhook { +	my ( $self, %opt ) = @_; +	my $db = $opt{db} // $self->{pg}->db; + +	if ( $opt{token} ) { +		$opt{token} =~ tr{\r\n}{}d; +	} + +	my $res = $db->insert( +		'webhooks', +		{ +			user_id => $opt{uid}, +			enabled => $opt{enabled}, +			url     => $opt{url}, +			token   => $opt{token} +		}, +		{ +			on_conflict => \ +'(user_id) do update set enabled = EXCLUDED.enabled, url = EXCLUDED.url, token = EXCLUDED.token, errored = null, latest_run = null, output = null' +		} +	); +} + +sub update_webhook_status { +	my ( $self, %opt ) = @_; + +	my $db      = $opt{db} // $self->{pg}->db; +	my $uid     = $opt{uid}; +	my $url     = $opt{url}; +	my $success = $opt{success}; +	my $text    = $opt{text}; + +	if ( length($text) > 1000 ) { +		$text = substr( $text, 0, 1000 ) . '…'; +	} + +	$db->update( +		'webhooks', +		{ +			errored    => $success ? 0 : 1, +			latest_run => DateTime->now( time_zone => 'Europe/Berlin' ), +			output     => $text, +		}, +		{ +			user_id => $uid, +			url     => $url +		} +	); +} +  1;  | 
