Files
python-tdd/src/apps/billboard/views.py

70 lines
2.3 KiB
Python
Raw Normal View History

from django.contrib.auth.decorators import login_required
from django.db.models import Max, Q
from django.shortcuts import redirect, render
from apps.applets.models import Applet, UserApplet
from apps.applets.utils import applet_context
from apps.drama.models import GameEvent
from apps.epic.models import GateSlot, Room, RoomInvite
@login_required(login_url="/")
def billboard(request):
my_rooms = Room.objects.filter(
Q(owner=request.user) |
Q(gate_slots__gamer=request.user) |
Q(invites__invitee_email=request.user.email, invites__status=RoomInvite.PENDING)
).distinct().order_by("-created_at")
recent_room = (
Room.objects.filter(
Q(owner=request.user) | Q(gate_slots__gamer=request.user)
)
.annotate(last_event=Max("events__timestamp"))
.filter(last_event__isnull=False)
.order_by("-last_event")
.distinct()
.first()
)
recent_events = (
recent_room.events.select_related("actor").order_by("-timestamp")[:10]
if recent_room else []
)
return render(request, "apps/billboard/billboard.html", {
"my_rooms": my_rooms,
"recent_room": recent_room,
"recent_events": recent_events,
"viewer": request.user,
"applets": applet_context(request.user, "billboard"),
"page_class": "page-billboard",
})
@login_required(login_url="/")
def toggle_billboard_applets(request):
checked = request.POST.getlist("applets")
for applet in Applet.objects.filter(context="billboard"):
UserApplet.objects.update_or_create(
user=request.user,
applet=applet,
defaults={"visible": applet.slug in checked},
)
if request.headers.get("HX-Request"):
return render(request, "apps/billboard/_partials/_applets.html", {
"applets": applet_context(request.user, "billboard"),
})
return redirect("billboard:billboard")
@login_required(login_url="/")
def room_scroll(request, room_id):
room = Room.objects.get(id=room_id)
events = room.events.select_related("actor").all()
return render(request, "apps/billboard/room_scroll.html", {
"room": room,
"events": events,
"viewer": request.user,
"page_class": "page-billscroll",
})