Refactors en stemmen werkt
This commit is contained in:
@@ -1,3 +1,4 @@
|
|||||||
from .track import Track
|
from .track import Track
|
||||||
from .artist import Artist
|
from .artist import Artist
|
||||||
from .album import Album
|
from .album import Album
|
||||||
|
from .vote import Vote
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
from django.db import models
|
from django.db import models
|
||||||
|
from random import choice
|
||||||
from .album import Album
|
from .album import Album
|
||||||
from .artist import Artist
|
from .artist import Artist
|
||||||
from .utils import from_json
|
|
||||||
|
|
||||||
class TrackManager(models.Manager):
|
class TrackManager(models.Manager):
|
||||||
def get_queryset(self):
|
def get_queryset(self):
|
||||||
|
|||||||
@@ -1 +0,0 @@
|
|||||||
from .json import from_json
|
|
||||||
@@ -1,8 +0,0 @@
|
|||||||
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)
|
|
||||||
|
|
||||||
@@ -3,7 +3,7 @@
|
|||||||
{% load static %}
|
{% load static %}
|
||||||
<script src="{% static 'js/htmx.min.js' %}" defer></script>
|
<script src="{% static 'js/htmx.min.js' %}" defer></script>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body hx-headers='{"X-CSRFToken": "{{ csrf_token }}"}'>
|
||||||
<header>
|
<header>
|
||||||
<nav>
|
<nav>
|
||||||
<ul hx-boost="true">
|
<ul hx-boost="true">
|
||||||
|
|||||||
@@ -1,6 +1,35 @@
|
|||||||
<div id="vote-box" hx-boost="true" hx-target="#vote-box">
|
{% if track %}
|
||||||
<iframe src="https://open.spotify.com/embed/track/{{ id }}"
|
<div id="vote-box" hx-target="#vote-box">
|
||||||
|
{% if error %}<div class="error">{{ error }}</div>{% endif %}
|
||||||
|
<iframe src="https://open.spotify.com/embed/track/{{ track.id }}"
|
||||||
class="play-sample" width="300" height="380" frameborder="0" allowtransparency="true"
|
class="play-sample" width="300" height="380" frameborder="0" allowtransparency="true"
|
||||||
allow="encrypted-media"></iframe>
|
allow="encrypted-media"></iframe>
|
||||||
<a href="{% url 'vote-track'%}">Ja</a> | <a href="{% url 'vote-track' %}">Nee</a>
|
<div id="vote-buttons" hx-vals='{"spotify_id": "{{ track.id }}"}'>
|
||||||
|
<button
|
||||||
|
hx-vals='{"vote": "2"}'
|
||||||
|
hx-post="{% url 'vote-track' %}"
|
||||||
|
>Helemaal mee eens</button>
|
||||||
|
<button
|
||||||
|
hx-vals='{"vote": "1"}'
|
||||||
|
hx-post="{% url 'vote-track' %}"
|
||||||
|
>Mee eens</button>
|
||||||
|
<button
|
||||||
|
hx-vals='{"vote": "0"}'
|
||||||
|
hx-post="{% url 'vote-track' %}"
|
||||||
|
>Neutraal</button>
|
||||||
|
<button
|
||||||
|
hx-vals='{"vote": "-1"}'
|
||||||
|
hx-post="{% url 'vote-track' %}"
|
||||||
|
>Niet mee eens</button>
|
||||||
|
<button
|
||||||
|
hx-vals='{"vote": "-2"}'
|
||||||
|
hx-post="{% url 'vote-track' %}"
|
||||||
|
>Helemaal niet mee eens</button>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
{% else %}
|
||||||
|
<p hx-boost="true">
|
||||||
|
Je hebt niets meer om te stemmen. Lekker bezig!
|
||||||
|
<a href="{% url 'nominate' %}">Nomineer zelf iets</a>, als je nog quota hebt.
|
||||||
|
</p>
|
||||||
|
{% endif %}
|
||||||
|
|||||||
@@ -1,12 +1,8 @@
|
|||||||
{% extends "Base.html" %}
|
{% extends "Base.html" %}
|
||||||
|
|
||||||
{% block main-content %}
|
{% block main-content %}
|
||||||
{% for song in songs %}
|
<h2>Lekker stemmen</h2>
|
||||||
{{ song }}
|
|
||||||
{% endfor %}
|
|
||||||
|
|
||||||
<div hx-get="{% url 'vote-track' %}" hx-trigger="load">
|
<div hx-get="{% url 'vote-track' %}" hx-trigger="load">
|
||||||
etst
|
Laden...
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|||||||
+24
-14
@@ -4,23 +4,16 @@ from django.http import HttpResponse
|
|||||||
from django.template.response import TemplateResponse
|
from django.template.response import TemplateResponse
|
||||||
from django.contrib.auth.mixins import LoginRequiredMixin
|
from django.contrib.auth.mixins import LoginRequiredMixin
|
||||||
import re
|
import re
|
||||||
from random import choice
|
from .models import Track, Artist, Album, Vote
|
||||||
from .models import Track, Artist, Album
|
from .utils import from_json, get_unvoted
|
||||||
from .models.utils import from_json
|
|
||||||
from . import spotify
|
from . import spotify
|
||||||
|
|
||||||
spt = spotify.Spotify()
|
spt = spotify.Spotify()
|
||||||
|
|
||||||
# TODO auth mixins
|
|
||||||
|
|
||||||
class AuthView(View):
|
class AuthView(View):
|
||||||
def get(self, request):
|
def get(self, request):
|
||||||
return TemplateResponse(request, "Login.html", {})
|
return TemplateResponse(request, "Login.html", {})
|
||||||
|
|
||||||
class TrackListView(View):
|
|
||||||
def get(self, request):
|
|
||||||
return HttpResponse("..")
|
|
||||||
|
|
||||||
class TrackDetailView(LoginRequiredMixin, View):
|
class TrackDetailView(LoginRequiredMixin, View):
|
||||||
def get(self, request, spotify_id):
|
def get(self, request, spotify_id):
|
||||||
try:
|
try:
|
||||||
@@ -35,11 +28,28 @@ class VoteView(LoginRequiredMixin, View):
|
|||||||
return TemplateResponse(request, "Vote.html", {"songs": songs})
|
return TemplateResponse(request, "Vote.html", {"songs": songs})
|
||||||
|
|
||||||
class VoteTrackView(LoginRequiredMixin, View):
|
class VoteTrackView(LoginRequiredMixin, View):
|
||||||
def get(self, request):
|
def get(self, request, error=None):
|
||||||
pks = Track.objects.values_list('pk', flat=True)
|
track = get_unvoted(request.user)
|
||||||
track = Track.objects.get(pk=choice(pks))
|
return TemplateResponse(request, "SpotifyEmbed.html", {"track": track, "error": error})
|
||||||
|
def post(self, request):
|
||||||
return TemplateResponse(request, "SpotifyEmbed.html", {"id": track.id})
|
try:
|
||||||
|
spotify_id = self.request.POST['spotify_id']
|
||||||
|
score = int(self.request.POST['vote'])
|
||||||
|
score = min(max(-2, score), 2)
|
||||||
|
track = Track.objects.get(pk=spotify_id)
|
||||||
|
try:
|
||||||
|
Vote.objects.get(user=request.user, track=track)
|
||||||
|
except Vote.DoesNotExist:
|
||||||
|
pass #expected behaviour
|
||||||
|
else:
|
||||||
|
raise Exception(f"{request.user} already voted for {track}")
|
||||||
|
Vote.objects.create(track=track, user=request.user, points=score)
|
||||||
|
print(track)
|
||||||
|
except Exception as e:
|
||||||
|
print(e)
|
||||||
|
return self.get(request, str(e))
|
||||||
|
else:
|
||||||
|
return self.get(request)
|
||||||
|
|
||||||
class NominateView(LoginRequiredMixin, View):
|
class NominateView(LoginRequiredMixin, View):
|
||||||
def get(self, request):
|
def get(self, request):
|
||||||
|
|||||||
Reference in New Issue
Block a user