Progress
This commit is contained in:
parent
2a98d58484
commit
f1461f0e08
@ -4,8 +4,8 @@ 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 bloonsa_game.models import Level, LevelRating
|
||||
from users.models import Player
|
||||
from users.util import tag_player
|
||||
|
||||
|
||||
@ -69,17 +69,17 @@ class RateLevel(CSRFexemptTemplateView):
|
||||
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()
|
||||
ratingObject = 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 = LevelRating.objects.create(player=player,
|
||||
level=level,
|
||||
rating=rating)
|
||||
rating.save()
|
||||
return HttpResponse(content="OK", status=200)
|
||||
|
||||
|
||||
22
app/bloonsa_game/migrations/0011_levelrating.py
Normal file
22
app/bloonsa_game/migrations/0011_levelrating.py
Normal file
@ -0,0 +1,22 @@
|
||||
# Generated by Django 5.1.6 on 2025-02-12 10:28
|
||||
|
||||
import django.db.models.deletion
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('bloonsa_game', '0010_alter_author_authorid'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='LevelRating',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('rating', models.SmallIntegerField()),
|
||||
('level', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='bloonsa_game.level')),
|
||||
],
|
||||
),
|
||||
]
|
||||
@ -35,3 +35,11 @@ class Level(models.Model):
|
||||
flashVarsStr = f"{seperator}".join([f"{k}={v}"
|
||||
for k, v in flashVars.items()])
|
||||
return flashVarsStr
|
||||
|
||||
|
||||
class LevelRating(models.Model):
|
||||
level = models.ForeignKey(Level, on_delete=models.CASCADE)
|
||||
rating = models.SmallIntegerField()
|
||||
|
||||
def __str__(self):
|
||||
return f"<{self.rating}> {self.level}"
|
||||
@ -5,7 +5,7 @@ from django.views.generic import TemplateView
|
||||
from django.views.static import serve
|
||||
|
||||
from bloonsa_game.models import Level
|
||||
from users.util import tag_player
|
||||
from users.util import tag_player, init_player
|
||||
|
||||
|
||||
class IndexView(TemplateView):
|
||||
@ -24,6 +24,9 @@ class GameView(TemplateView):
|
||||
|
||||
def get(self, request, *args, **kwargs):
|
||||
tag_player(request=request)
|
||||
init_player(request=request)
|
||||
# TODO get player object here with init_player to use in html template03.3.005
|
||||
|
||||
if type(kwargs.get("pk")) is int:
|
||||
level = Level.objects.get(id=kwargs["pk"])
|
||||
if level:
|
||||
|
||||
@ -1,11 +1,11 @@
|
||||
from django.contrib import admin
|
||||
|
||||
from .models import Player, Bloonsa_LevelRating
|
||||
from .models import Player, LevelRating
|
||||
|
||||
|
||||
class PlayerAdmin(admin.ModelAdmin):
|
||||
# These lag too much
|
||||
exclude = ("bloonsa_levelsPlayed", "bloonsa_levelsBeaten")
|
||||
|
||||
admin.site.register(Bloonsa_LevelRating)
|
||||
admin.site.register(LevelRating)
|
||||
admin.site.register(Player, PlayerAdmin)
|
||||
|
||||
@ -0,0 +1,22 @@
|
||||
# Generated by Django 5.1.6 on 2025-02-12 10:28
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('bloonsa_game', '0011_levelrating'),
|
||||
('users', '0010_alter_bloonsa_levelrating_level'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='player',
|
||||
name='bloonsa_levelRatings',
|
||||
field=models.ManyToManyField(blank=True, related_name='levelRatings', to='bloonsa_game.levelrating'),
|
||||
),
|
||||
migrations.DeleteModel(
|
||||
name='Bloonsa_LevelRating',
|
||||
),
|
||||
]
|
||||
@ -2,7 +2,7 @@ from django.db import models
|
||||
from django.utils import timezone
|
||||
from django.contrib.auth.models import User
|
||||
|
||||
from bloonsa_game.models import Level
|
||||
from bloonsa_game.models import Level, LevelRating
|
||||
|
||||
|
||||
class Player(models.Model):
|
||||
@ -10,6 +10,7 @@ class Player(models.Model):
|
||||
# Savedata
|
||||
bloonsa_levelsPlayed = models.ManyToManyField(Level, blank=True, related_name="levelsPlayed")
|
||||
bloonsa_levelsBeaten = models.ManyToManyField(Level, blank=True, related_name="levelsBeaten")
|
||||
bloonsa_levelRatings = models.ManyToManyField(LevelRating, blank=True, related_name="levelRatings")
|
||||
# Logging
|
||||
creationIP = models.GenericIPAddressField()
|
||||
latestIP = models.GenericIPAddressField()
|
||||
@ -24,10 +25,4 @@ class Player(models.Model):
|
||||
def __str__(self):
|
||||
return f"{self.user} - {self.latestIP}"
|
||||
|
||||
class Bloonsa_LevelRating(models.Model):
|
||||
level = models.ForeignKey(Level, on_delete=models.CASCADE)
|
||||
player = models.ForeignKey(Player, on_delete=models.CASCADE)
|
||||
rating = models.SmallIntegerField()
|
||||
|
||||
def __str__(self):
|
||||
return f"{self.player.user} <{self.rating}> {self.level}"
|
||||
@ -13,28 +13,27 @@ def get_ip(request):
|
||||
return ip
|
||||
|
||||
# Create a Player object for a User
|
||||
def init_player(request, user):
|
||||
if not user.is_authenticated:
|
||||
def init_player(request):
|
||||
if not request.user.is_authenticated:
|
||||
return
|
||||
player = Player.objects.filter(user=user).first()
|
||||
player = Player.objects.filter(user=request.user).first()
|
||||
if player:
|
||||
return
|
||||
ip = get_ip(request=request)
|
||||
player = Player(user=user,
|
||||
player = Player(user=request.user,
|
||||
creationIP=ip,
|
||||
latestIP=ip)
|
||||
player.save()
|
||||
|
||||
# Update activity timestamp and IP
|
||||
def tag_player(request, user=None):
|
||||
def tag_player(request):
|
||||
if not tracking:
|
||||
return
|
||||
user = user or request.user
|
||||
if not user.is_authenticated:
|
||||
if not request.user.is_authenticated:
|
||||
return
|
||||
player = Player.objects.filter(user=request.user).first()
|
||||
if not player:
|
||||
init_player(request=request, user=user)
|
||||
init_player(request=request, user=request.user)
|
||||
player.latestActivity = timezone.now()
|
||||
player.latestIP = get_ip(request=request)
|
||||
player.save()
|
||||
Loading…
Reference in New Issue
Block a user