From 19cd9f7a8d888302d8637af897d407fc34bab522 Mon Sep 17 00:00:00 2001 From: Birte Kristina Friesel Date: Sun, 16 Jul 2023 23:01:23 +0200 Subject: account: add a list of sent follow requests --- lib/Travelynx/Command/database.pm | 19 ++++++++++++++ lib/Travelynx/Controller/Account.pm | 51 ++++++++++++++++++++++++------------- lib/Travelynx/Model/Users.pm | 20 ++++++++------- 3 files changed, 64 insertions(+), 26 deletions(-) (limited to 'lib') diff --git a/lib/Travelynx/Command/database.pm b/lib/Travelynx/Command/database.pm index a0dea45..022614b 100644 --- a/lib/Travelynx/Command/database.pm +++ b/lib/Travelynx/Command/database.pm @@ -1761,6 +1761,25 @@ my @migrations = ( } ); }, + + # v42 -> v43 + # list sent and received follow requests + sub { + my ($db) = @_; + $db->query( + qq{ + alter view follow_requests rename to rx_follow_requests; + create view tx_follow_requests as select + relations.subject_id as self_id, + users.id as id, + users.name as name + from relations + join users on relations.object_id = users.id + where predicate = 2; + update schema_version set version = 43; + } + ); + }, ); # TODO add 'hafas' column to in_transit (and maybe journeys? undo/redo needs something to work with...) diff --git a/lib/Travelynx/Controller/Account.pm b/lib/Travelynx/Controller/Account.pm index d7035d8..2664329 100644 --- a/lib/Travelynx/Controller/Account.pm +++ b/lib/Travelynx/Controller/Account.pm @@ -547,12 +547,24 @@ sub social_list { my $kind = $self->stash('kind'); my $user = $self->current_user; - if ( $kind eq 'follow-requests' ) { + if ( $kind eq 'follow-requests-received' ) { my @follow_reqs = $self->users->get_follow_requests( uid => $user->{id} ); $self->render( 'social_list', - type => 'follow-requests', + type => 'follow-requests-received', + entries => [@follow_reqs], + notifications => $user->{notifications}, + ); + } + elsif ( $kind eq 'follow-requests-sent' ) { + my @follow_reqs = $self->users->get_follow_requests( + uid => $user->{id}, + sent => 1 + ); + $self->render( + 'social_list', + type => 'follow-requests-sent', entries => [@follow_reqs], notifications => $user->{notifications}, ); @@ -994,10 +1006,10 @@ sub change_name { return; } - # The users table has a unique constraint on the "name" column, so having - # two users with the same name is not possible. The race condition - # between the user_name_exists check in is_name_invalid and this - # change_name call is harmless. + # The users table has a unique constraint on the "name" column, so having + # two users with the same name is not possible. The race condition + # between the user_name_exists check in is_name_invalid and this + # change_name call is harmless. my $success = $self->users->change_name( uid => $self->current_user->{id}, name => $new_name @@ -1240,20 +1252,25 @@ sub confirm_mail { } sub account { - my ($self) = @_; - my $uid = $self->current_user->{id}; - my $follow_requests = $self->users->has_follow_requests( uid => $uid ); - my $followers = $self->users->has_followers( uid => $uid ); - my $following = $self->users->has_followees( uid => $uid ); - my $blocked = $self->users->has_blocked_users( uid => $uid ); + my ($self) = @_; + my $uid = $self->current_user->{id}; + my $rx_follow_requests = $self->users->has_follow_requests( uid => $uid ); + my $tx_follow_requests = $self->users->has_follow_requests( + uid => $uid, + sent => 1 + ); + my $followers = $self->users->has_followers( uid => $uid ); + my $following = $self->users->has_followees( uid => $uid ); + my $blocked = $self->users->has_blocked_users( uid => $uid ); $self->render( 'account', - api_token => $self->users->get_api_token( uid => $uid ), - num_follow_requests => $follow_requests, - num_followers => $followers, - num_following => $following, - num_blocked => $blocked, + api_token => $self->users->get_api_token( uid => $uid ), + num_rx_follow_requests => $rx_follow_requests, + num_tx_follow_requests => $tx_follow_requests, + num_followers => $followers, + num_following => $following, + num_blocked => $blocked, ); $self->users->mark_seen( uid => $uid ); } diff --git a/lib/Travelynx/Model/Users.pm b/lib/Travelynx/Model/Users.pm index 8f1714d..0665f6a 100644 --- a/lib/Travelynx/Model/Users.pm +++ b/lib/Travelynx/Model/Users.pm @@ -809,8 +809,8 @@ sub get_relation { } return; - #my $res_h = $db->select( 'relations', ['subject_id', 'predicate'], - # { subject_id => [$uid, $target], object_id => [$target, $target] } )->hash; + #my $res_h = $db->select( 'relations', ['subject_id', 'predicate'], + # { subject_id => [$uid, $target], object_id => [$target, $target] } )->hash; } sub update_notifications { @@ -1096,11 +1096,12 @@ sub has_followers { sub get_follow_requests { my ( $self, %opt ) = @_; - my $db = $opt{db} // $self->{pg}->db; - my $uid = $opt{uid}; + my $db = $opt{db} // $self->{pg}->db; + my $uid = $opt{uid}; + my $table = $opt{sent} ? 'tx_follow_requests' : 'rx_follow_requests'; my $res - = $db->select( 'follow_requests', [ 'id', 'name' ], { self_id => $uid } ); + = $db->select( $table, [ 'id', 'name' ], { self_id => $uid } ); return $res->hashes->each; } @@ -1108,11 +1109,12 @@ sub get_follow_requests { sub has_follow_requests { my ( $self, %opt ) = @_; - my $db = $opt{db} // $self->{pg}->db; - my $uid = $opt{uid}; + my $db = $opt{db} // $self->{pg}->db; + my $uid = $opt{uid}; + my $table = $opt{sent} ? 'tx_follow_requests' : 'rx_follow_requests'; - return $db->select( 'follow_requests', 'count(*) as count', - { self_id => $uid } )->hash->{count}; + return $db->select( $table, 'count(*) as count', { self_id => $uid } ) + ->hash->{count}; } sub get_followees { -- cgit v1.2.3