bloonsworld/app/bloonsa_api/views.py

87 lines
3.3 KiB
Python

from django.shortcuts import render, HttpResponse
from django.http import HttpResponseBadRequest
from django.views.generic import TemplateView
from django.utils.decorators import method_decorator
from django.views.decorators.csrf import csrf_exempt
from bloonsa_game.models import Level
from users.models import Player, Bloonsa_LevelRating
from users.util import tag_player
class CSRFexemptTemplateView(TemplateView):
@method_decorator(csrf_exempt)
def dispatch(self, *args, **kwargs):
return super().dispatch(*args, **kwargs)
class LoadLevel(CSRFexemptTemplateView):
def post(self, request, *args, **kwargs):
levelId = request.POST.get("levelId")
if levelId is None or not levelId.isdigit():
return HttpResponseBadRequest()
level = Level.objects.filter(levelId=int(levelId)).first()
if level is None:
return HttpResponseBadRequest()
if request.user.is_authenticated:
tag_player(request=request)
player = Player.objects.get(user=request.user)
player.bloonsa_levelsPlayed.add(level)
flashVars = level.getFlashVars(seperator="&")
return HttpResponse(flashVars)
class RandomLevel(CSRFexemptTemplateView):
def post(self, request, *args, **kwargs):
level = Level.objects.order_by("?").first()
flashVars = level.getFlashVars(seperator="&")
if request.user.is_authenticated:
tag_player(request=request)
player = Player.objects.get(user=request.user)
player.bloonsa_levelsPlayed.add(level)
return HttpResponse(flashVars)
def get(self, request, *args, **kwargs):
return self.post(request=request, *args, **kwargs)
class CompleteLevel(CSRFexemptTemplateView):
def post(self, request, *args, **kwargs):
if request.user.is_authenticated:
tag_player(request=request)
levelId = int(request.POST.get("levelId"))
level = Level.objects.get(levelId=levelId)
player = Player.objects.get(user=request.user)
player.bloonsa_levelsBeaten.add(level)
# Sending empty content means error in as3
return HttpResponse(content="GG", status=200)
class RateLevel(CSRFexemptTemplateView):
def post(self, request, *args, **kwargs):
if request.user.is_authenticated:
tag_player(request=request)
rating = int(request.POST.get("rating"))
levelId = int(request.POST.get("levelId"))
level = Level.objects.get(levelId=levelId)
player = Player.objects.get(user=request.user)
ratingObject = Bloonsa_LevelRating.objects.filter(player=player,
level=level).first()
if ratingObject:
ratingObject.rating = rating
ratingObject.save()
return HttpResponse(content="OK", status=200)
else:
rating = Bloonsa_LevelRating.objects.create(player=player,
level=level,
rating=rating)
rating.save()
return HttpResponse(content="OK", status=200)
return HttpResponse(status=400)