from os.path import splitext from django.contrib.auth.models import User from django.db import models from django.db.models.signals import post_save, pre_delete from django.dispatch import receiver from games.consumers import game_manager from ..models.FriendModel import FriendModel def upload_to(instance, filename: str): return f"./profiles/static/avatars/{instance.pk}{splitext(filename)[1]}" class ProfileModel(models.Model): user = models.ForeignKey(User, on_delete=models.CASCADE) avatar = models.ImageField(upload_to=upload_to, default="./profiles/static/avatars/default.avif") def get_game(self) -> int: for game in game_manager._game_list: for player in game.get_players_connected(): if (player.user_id == self.user.pk): return game.game_id return None def getFriends(self): friends = [] for friendship in FriendModel.objects.filter(models.Q(friend1=self.user) | models.Q(friend2=self.user)): friends.append(friendship.friend1 if friendship.friend1 != self.user else friendship.friend2) return friends def isFriend(self, user): return user in self.getFriends() def deleteFriend(self, user): for friendship in FriendModel.objects.filter(models.Q(friend1=self.user) | models.Q(friend2=self.user)): friendship.delete() @receiver(pre_delete, sender=ProfileModel) def delete_profile_picture(sender, instance, **kwargs): if instance.avatar.name != './profiles/static/avatars/default.avif': instance.avatar.storage.delete(instance.avatar.name) @receiver(post_save, sender=User) def on_user_created(sender, instance, created, **kwargs): if created: profile: ProfileModel = ProfileModel.objects.create(pk=instance.pk, user=instance) profile.save()