clean: project is healthy now :)

This commit is contained in:
AdrienLSH
2024-04-07 18:48:36 +02:00
parent 80e7335c8d
commit 9bbe5a4705
16 changed files with 113 additions and 726 deletions

View File

@ -1,9 +1,12 @@
from django.contrib import admin
from .models import ProfileModel, BlockModel, FriendModel, AskFriendModel
from .models.BlockModel import BlockModel
from .models.FriendModel import FriendModel
# from .models.FriendRequestModel import FriendRequestModel
from .models.ProfileModel import ProfileModel
# Register your models here.
admin.site.register(ProfileModel)
admin.site.register(BlockModel)
admin.site.register(FriendModel)
admin.site.register(AskFriendModel)
# admin.site.register(AskFriendModel)

View File

@ -1,108 +0,0 @@
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 os.path import splitext
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
@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()
class BlockModel(models.Model):
blocker = models.ForeignKey(User, on_delete=models.CASCADE, related_name='blocker')
blocked = models.ForeignKey(User, on_delete=models.CASCADE, related_name='blocked')
class AskFriendModel(models.Model):
asker = models.IntegerField(primary_key=False)
asked = models.IntegerField(primary_key=False)
def getAsked(self, asker):
askeds = []
for ask in AskFriendModel.objects.filter(asker=asker):
askeds.append(ask.asked)
return askeds
def getAsker(self, asked):
askers = []
for ask in AskFriendModel.objects.filter(asked=asked):
askers.append(ask.asker)
return askers
def deleteAsk(self, asker, asked):
deleted = AskFriendModel.objects.filter(asker=asker, asked=asked)
if (deleted.count() == 0 or not deleted):
return False
deleted.delete()
return True
class FriendModel(models.Model):
user_id1 = models.IntegerField(primary_key=False)
user_id2 = models.IntegerField(primary_key=False)
def getFriends(self, user_id):
friends = []
for friend in FriendModel.objects.filter(user_id1=user_id):
friends.append(friend.user_id2)
for friend in FriendModel.objects.filter(user_id2=user_id):
friends.append(friend.user_id1)
return friends
def isFriend(self, user_id1, user_id2):
return user_id2 in self.getFriends(user_id1)
def deleteFriend(self, user_id1, user_id2):
first = FriendModel.objects.filter(user_id1=user_id1, user_id2=user_id2)
if (first.count() == 1):
first.delete()
return True
second = FriendModel.objects.filter(user_id1=user_id2, user_id2=user_id1)
if (second.count() == 1):
second.delete()
return True
return False

View File

@ -0,0 +1,7 @@
from django.db import models
from django.contrib.auth.models import User
class BlockModel(models.Model):
blocker = models.ForeignKey(User, on_delete=models.CASCADE, related_name='blocker')
blocked = models.ForeignKey(User, on_delete=models.CASCADE, related_name='blocked')

View File

@ -0,0 +1,7 @@
from django.contrib.auth.models import User
from django.db import models
class FriendModel(models.Model):
friend1 = models.ForeignKey(User, on_delete=models.CASCADE, related_name='friend1')
friend2 = models.ForeignKey(User, on_delete=models.CASCADE, related_name='friend2')

View File

View File

@ -0,0 +1,53 @@
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()

View File

@ -1,21 +0,0 @@
from rest_framework.serializers import (ModelSerializer,
ReadOnlyField,
SerializerMethodField)
from ..models import ProfileModel
from ..models import BlockModel
class BlockSerializer(ModelSerializer):
blocked_username = ReadOnlyField(source='blocked.username')
blocked_avatar = SerializerMethodField()
class Meta:
model = BlockModel
fields = ['blocked', 'blocked_username', 'blocked_avatar']
def get_blocked_avatar(self, instance):
blocked_profile = ProfileModel.objects.filter(user_id=instance.blocked.pk)
if (blocked_profile.exists()):
return blocked_profile[0].avatar.name
return '/static/avatars/default.avif'

View File

@ -3,7 +3,7 @@ from django.utils.translation import gettext as _
from rest_framework import serializers
from ..models import ProfileModel
from ..models.ProfileModel import ProfileModel
class ProfileSerializer(serializers.ModelSerializer):

View File

@ -6,7 +6,8 @@ from rest_framework.authentication import SessionAuthentication
from django.contrib.auth.models import User
from django.utils.translation import gettext as _
from ..models import BlockModel, ProfileModel
from ..models.BlockModel import BlockModel
from ..models.ProfileModel import ProfileModel
from ..serializers.ProfileSerializer import ProfileSerializer

View File

@ -2,8 +2,10 @@ from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework import permissions, status
from rest_framework.authentication import SessionAuthentication
from django.utils.translation import gettext as _
from ..models import FriendModel
from ..models.FriendModel import FriendModel
class FriendsView(APIView):
@ -11,7 +13,7 @@ class FriendsView(APIView):
authentication_classes = (SessionAuthentication,)
def get(self, request):
friends = FriendModel().getFriends(request.user.pk)
friends = FriendModel.getFriends(request.user.pk)
if (friends):
return Response({"friends": friends, "user_id": request.user.pk}, status=status.HTTP_200_OK)
return Response({}, status=status.HTTP_204_NO_CONTENT)

View File

@ -4,7 +4,7 @@ from rest_framework.response import Response
from rest_framework.authentication import SessionAuthentication
from ..serializers.ProfileSerializer import ProfileSerializer
from ..models import ProfileModel
from ..models.ProfileModel import ProfileModel
class MyProfileViewSet(viewsets.ModelViewSet):

View File

@ -6,7 +6,7 @@ from rest_framework import viewsets
from rest_framework.response import Response
from ..serializers.ProfileSerializer import ProfileSerializer
from ..models import ProfileModel
from ..models.ProfileModel import ProfileModel
class ProfileViewSet(viewsets.ModelViewSet):