feat: Ajout de la fratrie [#27]

This commit is contained in:
N3WT DE COMPET
2025-05-02 17:44:35 +02:00
parent 1ced4a1069
commit 4a382d523c
8 changed files with 279 additions and 30 deletions

View File

@ -158,15 +158,33 @@ class StudentSerializer(serializers.ModelSerializer):
guardians_ids.append(guardian_instance.id)
return guardians_ids
def create_or_update_siblings(self, siblings_data):
siblings_ids = []
def create_or_update_siblings(self, siblings_data, student_instance):
"""
Crée ou met à jour les frères et sœurs associés à un étudiant.
Supprime les frères et sœurs qui ne sont plus présents dans siblings_data.
"""
# Si siblings_data est vide, supprimer tous les frères et sœurs associés
if not siblings_data:
student_instance.siblings.clear() # Supprime toutes les relations
return []
# Récupérer les IDs des frères et sœurs existants
existing_sibling_ids = set(student_instance.siblings.values_list('id', flat=True))
# Créer ou mettre à jour les frères et sœurs
updated_sibling_ids = []
for sibling_data in siblings_data:
sibling_instance, created = Sibling.objects.update_or_create(
id=sibling_data.get('id'),
defaults=sibling_data
)
siblings_ids.append(sibling_instance.id)
return siblings_ids
updated_sibling_ids.append(sibling_instance.id)
# Supprimer les frères et sœurs qui ne sont plus dans siblings_data
siblings_to_delete = existing_sibling_ids - set(updated_sibling_ids)
Sibling.objects.filter(id__in=siblings_to_delete).delete()
return updated_sibling_ids
def create_or_update_languages(self, languages_data):
languages_ids = []
@ -195,8 +213,10 @@ class StudentSerializer(serializers.ModelSerializer):
languages_data = validated_data.pop('spoken_languages', [])
if guardians_data:
instance.guardians.set(self.create_or_update_guardians(guardians_data))
if siblings_data:
instance.siblings.set(self.create_or_update_siblings(siblings_data))
sibling_ids = self.create_or_update_siblings(siblings_data, instance)
instance.siblings.set(sibling_ids)
if languages_data:
instance.spoken_languages.set(self.create_or_update_languages(languages_data))