From 2c2b8282b5a51fe920708bfc82e75cbae62d59de Mon Sep 17 00:00:00 2001 From: Mark Hoekveen Date: Wed, 7 Feb 2024 14:08:24 +0100 Subject: [PATCH] utils verplaatst, vote model toegevoegd --- playlist/models/vote.py | 10 ++++++++++ playlist/utils.py | 20 ++++++++++++++++++++ 2 files changed, 30 insertions(+) create mode 100644 playlist/models/vote.py create mode 100644 playlist/utils.py diff --git a/playlist/models/vote.py b/playlist/models/vote.py new file mode 100644 index 0000000..3586528 --- /dev/null +++ b/playlist/models/vote.py @@ -0,0 +1,10 @@ +from django.db import models +from django.contrib.auth.models import User +from . import Track + +class Vote(models.Model): + class Meta: + unique_together = ["user", "track"] + track = models.ForeignKey(Track, on_delete=models.CASCADE) + user = models.ForeignKey(User, on_delete=models.CASCADE) + points = models.IntegerField() diff --git a/playlist/utils.py b/playlist/utils.py new file mode 100644 index 0000000..4f36393 --- /dev/null +++ b/playlist/utils.py @@ -0,0 +1,20 @@ +from .models import Track, Vote +from random import choice, seed + +def from_json(cls, json): + try: + return cls.objects.get(pk=json["id"]) + except cls.DoesNotExist: + keys = [f.name for f in cls._meta.get_fields()] + subset = {key:json[key] for key in set(keys) & set(json.keys())} + return cls.objects.create(**subset) + +def get_unvoted(user): + votes = set(Vote.objects.filter(user=user).values_list('track_id', flat=True)) + tracks = set(Track.objects.values_list('pk', flat=True)) + seed(user.username) + try: + random_track = choice(list(tracks - votes)) + return Track.objects.get(pk=random_track) + except IndexError: + return None