diff options
| author | Daniel Friesel <derf@finalrewind.org> | 2022-02-20 17:35:30 +0100 | 
|---|---|---|
| committer | Daniel Friesel <derf@finalrewind.org> | 2022-02-20 17:35:30 +0100 | 
| commit | 209e2918217aef8d900a194309160f7119a205bc (patch) | |
| tree | f108d9a4f02d217c57f8e9ef1412d34ec86e7b07 /lib/Travelynx/Model | |
| parent | 0d108e43343b055e1b6a77c78e4f91307f6964c0 (diff) | |
Move webhook database queries to Users model
Diffstat (limited to 'lib/Travelynx/Model')
| -rw-r--r-- | lib/Travelynx/Model/Users.pm | 66 | 
1 files changed, 66 insertions, 0 deletions
| 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; | 
