Add game end functionality with view and URL routing, update models and templates for game state management

This commit is contained in:
Edgar P. Burkhart 2025-06-15 13:02:31 +02:00
parent d03d3b48d4
commit f9ed70d386
Signed by: edpibu
GPG key ID: 9833D3C5A25BD227
9 changed files with 181 additions and 89 deletions

View file

@ -344,6 +344,12 @@ class GameDetailView(LoginRequiredMixin, DetailView):
.distinct()
)
def get_context_data(self, **kwargs):
data = super().get_context_data(**kwargs)
data["is_leader"] = data["musikgame"].group.is_leader(self.request.user)
data["is_owner"] = data["musikgame"].group.is_owner(self.request.user)
return data
class YoutubeCallbackView(LoginRequiredMixin, View):
def get(self, request):
@ -428,7 +434,7 @@ class GameAnswerView(LoginRequiredMixin, DetailView):
template_name = "game/musikgame_answer.html"
def get_queryset(self):
return super().get_queryset().filter(players=self.request.user)
return super().get_queryset().filter(over=False, players=self.request.user)
def get_context_data(self, **kwargs):
return super().get_context_data(**kwargs) | {
@ -452,3 +458,15 @@ class GameAnswerView(LoginRequiredMixin, DetailView):
defaults={"answer": None},
)
return redirect("game_answer", pk)
class GameEndView(LoginRequiredMixin, SingleObjectMixin, View):
model = models.MusikGame
def post(self, request, pk):
game = self.get_object()
if not game.group.is_leader(request.user):
raise PermissionDenied()
game.over = True
game.save()
return redirect("game_detail", pk)