diff --git a/profiles/serializers.py b/profiles/serializers.py index 972c3d8..5d0a8be 100644 --- a/profiles/serializers.py +++ b/profiles/serializers.py @@ -10,10 +10,30 @@ class ProfileSerializer(serializers.ModelSerializer): username = serializers.ReadOnlyField(source='user.username') avatar = serializers.ImageField(required=False) + online = serializers.SerializerMethodField() class Meta: model = ProfileModel - fields = ["username", "avatar", "id"] + fields = ["username", "avatar", "id", 'online'] + + 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 + + if user is None: + return False + + if user.pk == obj.pk: + return True + + if not user.profilemodel.is_friend(obj): + return None + + return notice_manager.get_consumer_by_user(obj.user) is not None def validate_avatar(self, value): ''' diff --git a/profiles/viewsets/ProfileViewSet.py b/profiles/viewsets/ProfileViewSet.py index 2aa0aa0..c16a888 100644 --- a/profiles/viewsets/ProfileViewSet.py +++ b/profiles/viewsets/ProfileViewSet.py @@ -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).data) + return Response(self.serializer_class(user.profilemodel, context={'request': request}).data) def retrieve_id(self, request, pk=None): user = get_object_or_404(User, pk=pk) - return Response(self.serializer_class(user.profilemodel).data) + return Response(self.serializer_class(user.profilemodel, context={'request': request}).data) def list(self, request): - serializer = ProfileSerializer(self.get_queryset(), many=True) + serializer = ProfileSerializer(self.get_queryset(), many=True, context={'request': request}) return Response(serializer.data)