42_ft_transcendence/profiles/models/ProfileModel.py
2024-04-07 18:48:36 +02:00

54 lines
1.8 KiB
Python

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