... | ... |
@@ -1,4 +1,5 @@ |
1 | 1 |
from django.db import models |
2 |
+from django.conf import settings |
|
2 | 3 |
|
3 | 4 |
class Game(models.Model): |
4 | 5 |
slug = models.SlugField(max_length=80, unique=True) |
... | ... |
@@ -21,6 +22,10 @@ class Level(models.Model): |
21 | 22 |
return ('scorekeeper.views.level_detail', [str(self.slug)]) |
22 | 23 |
def sorted_scores(self): |
23 | 24 |
return self.score_set.all().order_by('-score') |
25 |
+ def cleanup(self): |
|
26 |
+ if self.score_set.count() > settings.SCORESERVER_MAX_SCORE_TO_KEEP: |
|
27 |
+ for scoreToDelete in self.score_set.all().order_by('-score')[settings.SCORESERVER_MAX_SCORE_TO_KEEP:]: |
|
28 |
+ scoreToDelete.delete() |
|
24 | 29 |
|
25 | 30 |
class Player(models.Model): |
26 | 31 |
slug = models.SlugField(max_length=80, unique=True) |
... | ... |
@@ -32,6 +37,10 @@ class Player(models.Model): |
32 | 37 |
return self.slug |
33 | 38 |
def sorted_scores(self): |
34 | 39 |
return self.score_set.all().order_by('-level__name', '-score') |
40 |
+ @staticmethod |
|
41 |
+ def cleanup(): |
|
42 |
+ for player in Player.objects.annotate(num_scores = models.Count('score')).filter(num_scores = 0): |
|
43 |
+ player.delete() |
|
35 | 44 |
|
36 | 45 |
class Score(models.Model): |
37 | 46 |
player = models.ForeignKey(Player) |
... | ... |
@@ -2,7 +2,6 @@ from django.http import HttpResponse |
2 | 2 |
from django.template import RequestContext, loader |
3 | 3 |
from django.views.generic import list_detail |
4 | 4 |
from scorekeeper.models import Game, Level, Player, Score |
5 |
-from django.conf import settings |
|
6 | 5 |
|
7 | 6 |
def index(request): |
8 | 7 |
games = Game.objects.all().order_by('-name') |
... | ... |
@@ -22,6 +21,7 @@ def player_detail(request, player_slug): |
22 | 21 |
return list_detail.object_detail( request, queryset= Player.objects.all(), slug=player_slug, slug_field='slug', template_name='scorekeeper/templates/player_detail.html' ) |
23 | 22 |
|
24 | 23 |
def score(request): |
24 |
+ #create or update score |
|
25 | 25 |
level = Level.objects.get(slug=request.REQUEST['level']) |
26 | 26 |
player, isNewPlayer = Player.objects.get_or_create(slug=request.REQUEST['player'], defaults={'secret':request.REQUEST['secret']}) |
27 | 27 |
if not isNewPlayer and player.secret != request.REQUEST['secret']: |
... | ... |
@@ -30,7 +30,7 @@ def score(request): |
30 | 30 |
if not isNewScore: |
31 | 31 |
score.score = request.REQUEST['score'] |
32 | 32 |
score.save() |
33 |
- if level.score_set.count() > settings.SCORESERVER_MAX_SCORE_TO_KEEP: |
|
34 |
- for scoreToDelete in level.score_set.all().order_by('-score')[settings.SCORESERVER_MAX_SCORE_TO_KEEP:]: |
|
35 |
- scoreToDelete.delete() |
|
33 |
+ #cleanup |
|
34 |
+ level.cleanup() |
|
35 |
+ Player.cleanup() |
|
36 | 36 |
return HttpResponse("score saved") |