Create event for the same position is not allowed

This commit is contained in:
2020-11-06 21:12:57 -03:00
parent 197624d7c8
commit 2e40d7032c
5 changed files with 38 additions and 8 deletions

View File

@@ -44,14 +44,22 @@ class GameEventResource(APIView):
game = Game.objects.get(pk=game_id) game = Game.objects.get(pk=game_id)
except Game.DoesNotExist: except Game.DoesNotExist:
return Response(status=status.HTTP_404_NOT_FOUND) return Response(status=status.HTTP_404_NOT_FOUND)
print(game.status, game.status == GameStatuses.FINISHED)
if game.status == GameStatuses.FINISHED: if game.status == GameStatuses.FINISHED:
print("WTF, DEVERIA PASSAR AQUI")
return Response( return Response(
{"message": "Game is already finished"}, {"message": "Game is already finished"},
status=status.HTTP_412_PRECONDITION_FAILED, status=status.HTTP_412_PRECONDITION_FAILED,
) )
row = request.data.get("row")
col = request.data.get("col")
game_event = GameEvent.objects.filter(game=game, row=row, col=col).first()
if game_event:
return Response(
{"message": "This event was already registered"},
status=status.HTTP_409_CONFLICT,
)
serializer = GameEventSerializer(data=request.data) serializer = GameEventSerializer(data=request.data)
if serializer.is_valid(): if serializer.is_valid():
serializer.save() serializer.save()

View File

@@ -24,6 +24,6 @@ class GameAdmin(admin.ModelAdmin):
@admin.register(GameEvent) @admin.register(GameEvent)
class GameEventAdmin(admin.ModelAdmin): class GameEventAdmin(admin.ModelAdmin):
list_display = ("id", "created_at", "game", "type", "event_row", "event_col") list_display = ("id", "created_at", "game", "type", "row", "col")
list_filter = ("type",) list_filter = ("type",)

View File

@@ -0,0 +1,19 @@
# Generated by Django 3.1.3 on 2020-11-07 00:10
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
("game", "0005_auto_20201106_2357"),
]
operations = [
migrations.RenameField(
model_name="gameevent", old_name="event_col", new_name="col",
),
migrations.RenameField(
model_name="gameevent", old_name="event_row", new_name="row",
),
]

View File

@@ -94,14 +94,14 @@ class GameEvent(models.Model):
help_text="The game event", help_text="The game event",
) )
event_row = models.PositiveIntegerField( row = models.PositiveIntegerField(
"The row clicked", "The row clicked",
default=None, default=None,
null=True, null=True,
blank=True, blank=True,
help_text="Row on the board where the event occurred, if applicable", help_text="Row on the board where the event occurred, if applicable",
) )
event_col = models.PositiveIntegerField( col = models.PositiveIntegerField(
"The column clicked", "The column clicked",
default=None, default=None,
null=True, null=True,

View File

@@ -46,6 +46,9 @@ def identify_click_event(sender, signal, instance, **kwargs):
if not instance.type == EventTypes.CLICK_NAIVE: if not instance.type == EventTypes.CLICK_NAIVE:
return return
if instance.row is None and instance.col is None:
return
ms = Minesweeper( ms = Minesweeper(
instance.game.rows, instance.game.rows,
instance.game.cols, instance.game.cols,
@@ -53,11 +56,11 @@ def identify_click_event(sender, signal, instance, **kwargs):
instance.game.board, instance.game.board,
) )
if ms.is_mine(instance.metadata["row"], instance.metadata["col"]): if ms.is_mine(instance.row, instance.col):
instance.type = EventTypes.CLICK_MINE instance.type = EventTypes.CLICK_MINE
elif ms.is_empty(instance.metadata["row"], instance.metadata["col"]): elif ms.is_empty(instance.row, instance.col):
instance.type = EventTypes.CLICK_EMPTY instance.type = EventTypes.CLICK_EMPTY
elif ms.is_point(instance.metadata["row"], instance.metadata["col"]): elif ms.is_point(instance.row, instance.col):
instance.type = EventTypes.CLICK_POINT instance.type = EventTypes.CLICK_POINT