Merge branch 'main' of codeberg.org:adrien-lsh/ft_transcendence

This commit is contained in:
Xamora 2024-04-28 18:01:02 +02:00
commit 188de86f8d
3 changed files with 27 additions and 7 deletions

View File

@ -18,7 +18,7 @@ class NoticeManager:
unsend_notices = NoticeModel.objects.filter(user=consumer.user)
for notice in unsend_notices:
self.notify_user(consumer.user, json_data=notice.data)
consumer.send(notice.data)
notice.delete()
def remove(self, consumer: NoticeConsumer):
@ -29,9 +29,9 @@ class NoticeManager:
if consumer.user == user:
return consumer
def notify_user(self, user: User, data: dict = None, json_data: str = None):
def notify_user(self, user: User, data: dict):
consumer = self.get_consumer_by_user(user)
data_str: str = json.dumps(data) if json_data is None else json_data
data_str: str = json.dumps(data)
if consumer:
consumer.send(data_str)
else:

View File

@ -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):
'''

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).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)