profiles: online status and friend rework

This commit is contained in:
AdrienLSH
2024-05-07 19:53:28 +02:00
parent c2aafe9a42
commit 17bcee764b
9 changed files with 111 additions and 53 deletions

View File

@ -11,19 +11,19 @@ class ProfileSerializer(serializers.ModelSerializer):
username = serializers.ReadOnlyField(source='user.username')
avatar = serializers.ImageField(required=False)
online = serializers.SerializerMethodField()
is_friend = serializers.SerializerMethodField()
has_incoming_request = serializers.SerializerMethodField()
has_outgoing_request = serializers.SerializerMethodField()
class Meta:
model = ProfileModel
fields = ["username", "avatar", "id", 'online']
fields = ["username", "avatar", "id", 'online', 'is_friend',
'has_outgoing_request', 'has_incoming_request']
def get_online(self, obj: ProfileModel):
from notice.consumers import notice_manager
user = None
request = self.context.get("request")
if request and hasattr(request, "user"):
user = request.user
user = self.context.get('user')
if user is None or not user.is_authenticated:
return None
@ -32,6 +32,27 @@ class ProfileSerializer(serializers.ModelSerializer):
return notice_manager.get_consumer_by_user(obj.user) is not None
def get_is_friend(self, obj: ProfileModel):
user = self.context.get('user')
if user is None or not user.is_authenticated or user.pk == obj.pk:
return False
return obj.is_friend(user.profilemodel)
def get_has_incoming_request(self, obj: ProfileModel):
user = self.context.get('user')
if user is None or not user.is_authenticated or user.pk == obj.pk:
return False
return obj.is_friend_requesting(user.profilemodel)
def get_has_outgoing_request(self, obj: ProfileModel):
user = self.context.get('user')
if user is None or not user.is_authenticated or user.pk == obj.pk:
return False
return obj.is_friend_requested_by(user.profilemodel)
def validate_avatar(self, value):
'''
Check that the image is not too large

View File

@ -35,4 +35,4 @@ class MyProfileViewSet(viewsets.ModelViewSet):
return Response(ProfileSerializer(profile).data)
def retrieve(self, pk=None):
return Response(self.serializer_class(self.get_object(), context={'request': self.request}).data)
return Response(self.serializer_class(self.get_object(), context={'user': self.request.user}).data)

View File

@ -16,12 +16,12 @@ class ProfileViewSet(viewsets.ModelViewSet):
def retrieve(self, request, username=None):
user = get_object_or_404(User, username=username)
return Response(self.serializer_class(user.profilemodel, context={'request': request}).data)
return Response(self.serializer_class(user.profilemodel, context={'user': request.user}).data)
def retrieve_id(self, request, pk=None):
user = get_object_or_404(User, pk=pk)
return Response(self.serializer_class(user.profilemodel, context={'request': request}).data)
return Response(self.serializer_class(user.profilemodel, context={'user': request.user}).data)
def list(self, request):
serializer = ProfileSerializer(self.get_queryset(), many=True, context={'request': request})
serializer = ProfileSerializer(self.get_queryset(), many=True, context={'user': request.user})
return Response(serializer.data)