[moods] Add a nice form for checking in
All checks were successful
build & deploy / test (push) Successful in 2m2s
build & deploy / deploy (push) Successful in 38s

This commit is contained in:
2026-04-28 15:44:48 -04:00
parent e912eda6e4
commit ef4e510814
8 changed files with 173 additions and 1 deletions

View File

@ -1,4 +1,83 @@
from moods.models import Mood
import logging
from django.contrib.auth.decorators import login_required
from django.shortcuts import redirect, render
from django.urls import reverse
from django.utils import timezone
from moods.models import Mood, MoodLogData, MoodQuality
from scrobbles.models import Scrobble
logger = logging.getLogger(__name__)
@login_required
def checkin(request):
"""Two-step mood check-in wizard"""
step = request.session.get("checkin_step", 1)
if request.method == "POST":
if step == 1:
quality = request.POST.get("mood_quality")
if quality:
request.session["checkin_quality"] = int(quality)
request.session["checkin_step"] = 2
return redirect("moods:checkin")
qualities = [
{"value": q.value, "name": q.name.replace("_", " ").title()}
for q in MoodQuality
]
return render(
request, "moods/checkin_quality.html", {"qualities": qualities}
)
elif step == 2:
mood_id = request.POST.get("mood")
quality = request.session.get("checkin_quality")
if mood_id and quality:
try:
mood = Mood.objects.get(id=mood_id)
log_data = MoodLogData(
mood_quality=quality,
mood_type=mood.mood_type,
)
scrobble = Scrobble.objects.create(
user=request.user,
mood=mood,
media_type=Scrobble.MediaType.MOOD,
timestamp=timezone.now(),
source="web_checkin",
log=log_data.asdict,
)
# Clear session data
request.session.pop("checkin_step", None)
request.session.pop("checkin_quality", None)
return redirect("moods:checkin_success")
except Mood.DoesNotExist:
logger.error(f"Mood with id {mood_id} not found")
return redirect("moods:checkin")
if step == 1:
qualities = [
{"value": q.value, "name": q.name.replace("_", " ").title()}
for q in MoodQuality
]
return render(
request, "moods/checkin_quality.html", {"qualities": qualities}
)
else:
moods = Mood.objects.all()
return render(request, "moods/checkin_mood.html", {"moods": moods})
@login_required
def checkin_success(request):
return render(request, "moods/checkin_success.html")
from scrobbles.views import ScrobbleableListView, ScrobbleableDetailView