mirror of
				https://gitlab.com/animath/si/plateforme.git
				synced 2025-10-31 22:24:30 +01:00 
			
		
		
		
	Automatically create appropriated channels when tournaments/pools/participations are updated
Signed-off-by: Emmy D'Anello <emmy.danello@animath.fr>
This commit is contained in:
		| @@ -2,8 +2,15 @@ | ||||
| # SPDX-License-Identifier: GPL-3.0-or-later | ||||
|  | ||||
| from django.apps import AppConfig | ||||
| from django.db.models.signals import post_save | ||||
|  | ||||
|  | ||||
| class ChatConfig(AppConfig): | ||||
|     default_auto_field = "django.db.models.BigAutoField" | ||||
|     name = "chat" | ||||
|  | ||||
|     def ready(self): | ||||
|         from chat import signals | ||||
|         post_save.connect(signals.create_tournament_channels, "participation.Tournament") | ||||
|         post_save.connect(signals.create_pool_channels, "participation.Pool") | ||||
|         post_save.connect(signals.create_team_channel, "participation.Participation") | ||||
|   | ||||
| @@ -3,7 +3,6 @@ | ||||
|  | ||||
| from django.core.management import BaseCommand | ||||
| from django.utils.translation import activate | ||||
|  | ||||
| from participation.models import Team, Tournament | ||||
| from tfjm.permissions import PermissionType | ||||
|  | ||||
|   | ||||
							
								
								
									
										100
									
								
								chat/signals.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										100
									
								
								chat/signals.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,100 @@ | ||||
| # Copyright (C) 2024 by Animath | ||||
| # SPDX-License-Identifier: GPL-3.0-or-later | ||||
|  | ||||
| from chat.models import Channel | ||||
| from participation.models import Participation, Pool, Tournament | ||||
| from tfjm.permissions import PermissionType | ||||
|  | ||||
|  | ||||
| def create_tournament_channels(instance: Tournament, **_kwargs): | ||||
|     tournament = instance | ||||
|  | ||||
|     Channel.objects.update_or_create( | ||||
|         name=f"{tournament.name} - Annonces", | ||||
|         defaults=dict( | ||||
|             category=Channel.ChannelCategory.TOURNAMENT, | ||||
|             read_access=PermissionType.TOURNAMENT_MEMBER, | ||||
|             write_access=PermissionType.TOURNAMENT_ORGANIZER, | ||||
|             tournament=tournament, | ||||
|         ), | ||||
|     ) | ||||
|  | ||||
|     Channel.objects.update_or_create( | ||||
|         name=f"{tournament.name} - Général", | ||||
|         defaults=dict( | ||||
|             category=Channel.ChannelCategory.TOURNAMENT, | ||||
|             read_access=PermissionType.TOURNAMENT_MEMBER, | ||||
|             write_access=PermissionType.TOURNAMENT_MEMBER, | ||||
|             tournament=tournament, | ||||
|         ), | ||||
|     ) | ||||
|  | ||||
|     Channel.objects.update_or_create( | ||||
|         name=f"{tournament.name} - Détente", | ||||
|         defaults=dict( | ||||
|             category=Channel.ChannelCategory.TOURNAMENT, | ||||
|             read_access=PermissionType.TOURNAMENT_MEMBER, | ||||
|             write_access=PermissionType.TOURNAMENT_MEMBER, | ||||
|             tournament=tournament, | ||||
|         ), | ||||
|     ) | ||||
|  | ||||
|     Channel.objects.update_or_create( | ||||
|         name=f"{tournament.name} - Juré⋅es", | ||||
|         defaults=dict( | ||||
|             category=Channel.ChannelCategory.TOURNAMENT, | ||||
|             read_access=PermissionType.JURY_MEMBER, | ||||
|             write_access=PermissionType.JURY_MEMBER, | ||||
|             tournament=tournament, | ||||
|         ), | ||||
|     ) | ||||
|  | ||||
|     if tournament.remote: | ||||
|         Channel.objects.update_or_create( | ||||
|             name=f"{tournament.name} - Président⋅es de jury", | ||||
|             defaults=dict( | ||||
|                 category=Channel.ChannelCategory.TOURNAMENT, | ||||
|                 read_access=PermissionType.TOURNAMENT_JURY_PRESIDENT, | ||||
|                 write_access=PermissionType.TOURNAMENT_JURY_PRESIDENT, | ||||
|                 tournament=tournament, | ||||
|             ), | ||||
|         ) | ||||
|  | ||||
|  | ||||
| def create_pool_channels(instance: Pool, **_kwargs): | ||||
|     pool = instance | ||||
|     tournament = pool.tournament | ||||
|  | ||||
|     if tournament.remote: | ||||
|         Channel.objects.update_or_create( | ||||
|             name=f"{tournament.name} - Poule {pool.short_name}", | ||||
|             defaults=dict( | ||||
|                 category=Channel.ChannelCategory.TOURNAMENT, | ||||
|                 read_access=PermissionType.POOL_MEMBER, | ||||
|                 write_access=PermissionType.POOL_MEMBER, | ||||
|                 pool=pool, | ||||
|             ), | ||||
|         ) | ||||
|  | ||||
|         Channel.objects.update_or_create( | ||||
|             name=f"{tournament.name} - Poule {pool.short_name} - Jury", | ||||
|             defaults=dict( | ||||
|                 category=Channel.ChannelCategory.TOURNAMENT, | ||||
|                 read_access=PermissionType.JURY_MEMBER, | ||||
|                 write_access=PermissionType.JURY_MEMBER, | ||||
|                 pool=pool, | ||||
|             ), | ||||
|         ) | ||||
|  | ||||
|  | ||||
| def create_team_channel(instance: Participation, **_kwargs): | ||||
|     if instance.valid: | ||||
|         Channel.objects.update_or_create( | ||||
|             name=f"Équipe {instance.team.trigram}", | ||||
|             defaults=dict( | ||||
|                 category=Channel.ChannelCategory.TEAM, | ||||
|                 read_access=PermissionType.TEAM_MEMBER, | ||||
|                 write_access=PermissionType.TEAM_MEMBER, | ||||
|                 team=instance.team, | ||||
|             ), | ||||
|         ) | ||||
		Reference in New Issue
	
	Block a user