From f8c49e18e57954f3a642283dda165b34a526ff94 Mon Sep 17 00:00:00 2001 From: Josh Washburne Date: Tue, 27 Mar 2018 15:59:53 -0400 Subject: [PATCH] When a song request is fulfilled, update song data. --- savepointradio/profiles/apps.py | 2 +- savepointradio/profiles/signals.py | 17 ++++++++++++++++- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/savepointradio/profiles/apps.py b/savepointradio/profiles/apps.py index 420c741..79f55bc 100644 --- a/savepointradio/profiles/apps.py +++ b/savepointradio/profiles/apps.py @@ -5,4 +5,4 @@ class ProfilesConfig(AppConfig): name = 'profiles' def ready(self): - from .signals import create_profile + from .signals import create_profile, update_song_plays diff --git a/savepointradio/profiles/signals.py b/savepointradio/profiles/signals.py index f1a6506..55965fa 100644 --- a/savepointradio/profiles/signals.py +++ b/savepointradio/profiles/signals.py @@ -1,8 +1,9 @@ from django.conf import settings +from django.db.models import F from django.db.models.signals import post_save from django.dispatch import receiver -from .models import RadioProfile +from .models import RadioProfile, SongRequest @receiver(post_save, sender=settings.AUTH_USER_MODEL) @@ -12,3 +13,17 @@ def create_profile(sender, instance, created, **kwargs): """ if created: profile, new = RadioProfile.objects.get_or_create(user=instance) + + +@receiver(post_save, sender=SongRequest) +def update_song_plays(sender, instance, created, update_fields, **kwargs): + """ + Update the song data with the latest play time and the number of times + played. + """ + if not created and update_fields: + if 'played_at' in update_fields: + song = instance.song + song.last_played = instance.played_at + song.num_played = F('num_played') + 1 + song.save()