From 7e25fe8e0d099902c6253026ff1749415a43a397 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=90=D0=BD=D0=B4=D1=80=D0=B5=D0=B9=20=D0=A1=D1=83=D0=BC?= =?UTF-8?q?=D0=B8=D0=BD?= Date: Mon, 3 Mar 2025 14:30:02 +0300 Subject: [PATCH] feat: added one more achieve --- .../achievement/icons/start_competition.png | Bin 0 -> 27703 bytes .../management/commands/init_achievments.py | 10 ++++++++++ services/backend/apps/competition/apps.py | 3 +++ services/backend/apps/competition/signals.py | 17 +++++++++++++++++ 4 files changed, 30 insertions(+) create mode 100644 services/backend/apps/achievement/icons/start_competition.png create mode 100644 services/backend/apps/competition/signals.py diff --git a/services/backend/apps/achievement/icons/start_competition.png b/services/backend/apps/achievement/icons/start_competition.png new file mode 100644 index 0000000000000000000000000000000000000000..d8a351997577588be68333ed366bee5e456df789 GIT binary patch literal 27703 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 OKx8Bo#j8b)gZ=|1e23rw literal 0 HcmV?d00001 diff --git a/services/backend/apps/achievement/management/commands/init_achievments.py b/services/backend/apps/achievement/management/commands/init_achievments.py index 9619b58..bb9f2fb 100644 --- a/services/backend/apps/achievement/management/commands/init_achievments.py +++ b/services/backend/apps/achievement/management/commands/init_achievments.py @@ -30,3 +30,13 @@ class Command(BaseCommand): slug="welcome", icon=welcome_icon, ) + + if not Achievement.objects.filter(slug="start_competition").exists(): + with open(f"{icons_dir}/start_competition.png", "rb") as f: + start_competition = File(f, name="start_competition.png") + Achievement.objects.get_or_create( + name="Да начнётся битва!", + description="Начните соревнование", + slug="start_competition", + icon=start_competition, + ) diff --git a/services/backend/apps/competition/apps.py b/services/backend/apps/competition/apps.py index d343cd0..f10ee38 100644 --- a/services/backend/apps/competition/apps.py +++ b/services/backend/apps/competition/apps.py @@ -5,3 +5,6 @@ class CompetitionsConfig(AppConfig): name = "apps.competition" label = "competition" verbose_name = "Соревнование" + + def ready(self): + import apps.competition.signals diff --git a/services/backend/apps/competition/signals.py b/services/backend/apps/competition/signals.py new file mode 100644 index 0000000..9a832bd --- /dev/null +++ b/services/backend/apps/competition/signals.py @@ -0,0 +1,17 @@ +from django.db.models.signals import post_save +from django.dispatch import receiver + +from apps.achievement.models import Achievement, UserAchievement +from apps.competition.models import State +from apps.user.models import User + + +@receiver(post_save, sender=State) +def assign_start_competition_achievement(sender, instance, created, **kwargs): + if created: + if State.objects.filter(user=instance.user, state=State.StateChoices.STARTED.value).count() == 1 \ + and not State.objects.filter(user=instance.user, state=State.StateChoices.FINISHED.value).exists(): + start_competition_achievement = Achievement.objects.get(slug="start_competition") + UserAchievement.objects.create( + user=instance.user, achievement=start_competition_achievement + )