summaryrefslogtreecommitdiff
path: root/lib/Travelynx/Model/Users.pm
diff options
context:
space:
mode:
authorDerf Null <derf@finalrewind.org>2023-06-04 18:21:36 +0200
committerDerf Null <derf@finalrewind.org>2023-06-04 18:21:36 +0200
commit00eb6af1bd21df42fc41195ceed0fad73bbb5f27 (patch)
treeaea171b00a79681e403292b0ad06b01e5d9a21d1 /lib/Travelynx/Model/Users.pm
parent07fe4ecd1f73e7b111d4cd6f6bb8fd390b5f3151 (diff)
expose follows / social interaction in frontend
Diffstat (limited to 'lib/Travelynx/Model/Users.pm')
-rw-r--r--lib/Travelynx/Model/Users.pm106
1 files changed, 98 insertions, 8 deletions
diff --git a/lib/Travelynx/Model/Users.pm b/lib/Travelynx/Model/Users.pm
index 7326e34..ade9711 100644
--- a/lib/Travelynx/Model/Users.pm
+++ b/lib/Travelynx/Model/Users.pm
@@ -180,13 +180,14 @@ sub get_privacy_by {
my $res = $db->select(
'users',
- [ 'id', 'public_level', 'accept_follows' ],
+ [ 'id', 'name', 'public_level', 'accept_follows' ],
{ %where, status => 1 }
);
if ( my $user = $res->hash ) {
return {
id => $user->{id},
+ name => $user->{name},
public_level => $user->{public_level}, # todo remove?
default_visibility => $user->{public_level} & 0x7f,
default_visibility_str =>
@@ -777,16 +778,16 @@ sub get_profile {
sub get_relation {
my ( $self, %opt ) = @_;
- my $db = $opt{db} // $self->{pg}->db;
- my $uid = $opt{uid};
- my $target = $opt{target};
+ my $db = $opt{db} // $self->{pg}->db;
+ my $subject = $opt{subject};
+ my $object = $opt{object};
my $res_h = $db->select(
'relations',
['predicate'],
{
- subject_id => $uid,
- object_id => $target
+ subject_id => $subject,
+ object_id => $object,
}
)->hash;
@@ -824,6 +825,24 @@ sub update_notifications {
$db->update( 'users', { notifications => $notifications }, { id => $uid } );
}
+sub follow {
+ my ( $self, %opt ) = @_;
+
+ my $db = $opt{db} // $self->{pg}->db;
+ my $uid = $opt{uid};
+ my $target = $opt{target};
+
+ $db->insert(
+ 'relations',
+ {
+ subject_id => $uid,
+ predicate => $predicate_atoi{follows},
+ object_id => $target,
+ ts => DateTime->now( time_zone => 'Europe/Berlin' ),
+ }
+ );
+}
+
sub request_follow {
my ( $self, %opt ) = @_;
@@ -920,6 +939,16 @@ sub reject_follow_request {
}
}
+sub cancel_follow_request {
+ my ( $self, %opt ) = @_;
+
+ $self->reject_follow_request(
+ db => $opt{db},
+ uid => $opt{target},
+ applicant => $opt{uid},
+ );
+}
+
sub unfollow {
my ( $self, %opt ) = @_;
@@ -1005,9 +1034,50 @@ sub get_followers {
my $db = $opt{db} // $self->{pg}->db;
my $uid = $opt{uid};
- my $res = $db->select( 'followers', [ 'id', 'name' ], { self_id => $uid } );
+ my $res = $db->select(
+ 'followers',
+ [ 'id', 'name', 'accept_follows', 'inverse_predicate' ],
+ { self_id => $uid }
+ );
+
+ my @ret;
+ while ( my $row = $res->hash ) {
+ push(
+ @ret,
+ {
+ id => $row->{id},
+ name => $row->{name},
+ following_back => (
+ $row->{inverse_predicate}
+ and $row->{inverse_predicate} == $predicate_atoi{follows}
+ ) ? 1 : 0,
+ followback_requested => (
+ $row->{inverse_predicate}
+ and $row->{inverse_predicate}
+ == $predicate_atoi{requests_follow}
+ ) ? 1 : 0,
+ can_follow_back => (
+ not $row->{inverse_predicate}
+ and $row->{accept_follows} == 2
+ ) ? 1 : 0,
+ can_request_follow_back => (
+ not $row->{inverse_predicate}
+ and $row->{accept_follows} == 1
+ ) ? 1 : 0,
+ }
+ );
+ }
+ return @ret;
+}
- return $res->hashes->each;
+sub has_followers {
+ my ( $self, %opt ) = @_;
+
+ my $db = $opt{db} // $self->{pg}->db;
+ my $uid = $opt{uid};
+
+ return $db->select( 'followers', 'count(*) as count', { self_id => $uid } )
+ ->hash->{count};
}
sub get_follow_requests {
@@ -1043,6 +1113,16 @@ sub get_followees {
return $res->hashes->each;
}
+sub has_followees {
+ my ( $self, %opt ) = @_;
+
+ my $db = $opt{db} // $self->{pg}->db;
+ my $uid = $opt{uid};
+
+ return $db->select( 'followees', 'count(*) as count', { self_id => $uid } )
+ ->hash->{count};
+}
+
sub get_blocked_users {
my ( $self, %opt ) = @_;
@@ -1055,4 +1135,14 @@ sub get_blocked_users {
return $res->hashes->each;
}
+sub has_blocked_users {
+ my ( $self, %opt ) = @_;
+
+ my $db = $opt{db} // $self->{pg}->db;
+ my $uid = $opt{uid};
+
+ return $db->select( 'blocked_users', 'count(*) as count',
+ { self_id => $uid } )->hash->{count};
+}
+
1;