profiles: get online status if friend

This commit is contained in:
AdrienLSH 2024-04-26 16:20:15 +02:00
parent 55d29d5763
commit 743988c883
2 changed files with 24 additions and 4 deletions

View File

@ -10,10 +10,30 @@ class ProfileSerializer(serializers.ModelSerializer):
username = serializers.ReadOnlyField(source='user.username') username = serializers.ReadOnlyField(source='user.username')
avatar = serializers.ImageField(required=False) avatar = serializers.ImageField(required=False)
online = serializers.SerializerMethodField()
class Meta: class Meta:
model = ProfileModel 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): def validate_avatar(self, value):
''' '''

View File

@ -16,12 +16,12 @@ class ProfileViewSet(viewsets.ModelViewSet):
def retrieve(self, request, username=None): def retrieve(self, request, username=None):
user = get_object_or_404(User, username=username) 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): def retrieve_id(self, request, pk=None):
user = get_object_or_404(User, pk=pk) 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): 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) return Response(serializer.data)