Creating structure for the game events (#3)

* Adding the GameVent model and migration

* Initializing the GameEvent endpoint

* GameEvent listing endpoint

* Adding CLICK_NAIVE event

* Added signal for identify what is on the click location

* Using row and col integer is better than metadata with jsonfield

* Create event for the same position is not allowed

* Better signals control

* Adding a board progress to Game model

* Identifying the win status

* Hide generated board from client
This commit is contained in:
2020-11-07 00:29:51 -03:00
committed by GitHub
parent 733f3e5992
commit 26de57fbfc
15 changed files with 494 additions and 14 deletions

View File

@@ -0,0 +1,73 @@
# Generated by Django 3.1.3 on 2020-11-06 03:54
from django.db import migrations, models
import django.db.models.deletion
import django_mysql.models
import game.models
import internal.utils
class Migration(migrations.Migration):
dependencies = [
("game", "0002_auto_20201106_0225"),
]
operations = [
migrations.CreateModel(
name="GameEvent",
fields=[
(
"id",
models.AutoField(
auto_created=True,
primary_key=True,
serialize=False,
verbose_name="ID",
),
),
(
"created_at",
models.DateTimeField(
auto_now_add=True, verbose_name="Creation date"
),
),
(
"type",
models.IntegerField(
choices=[
(0, "START_GAME"),
(1, "PAUSE"),
(2, "RESUME"),
(3, "CLICK_MINE"),
(4, "CLICK_POINT"),
(5, "CLICK_EMPTY"),
(6, "CLICK_FLAG"),
(7, "GAME_OVER"),
],
default=game.models.EventTypes["START_GAME"],
help_text="The game event",
),
),
(
"metadata",
django_mysql.models.JSONField(
default=internal.utils.empty_object,
help_text="Some usefull event metadata",
verbose_name="Event metadata",
),
),
(
"game",
models.ForeignKey(
on_delete=django.db.models.deletion.CASCADE, to="game.game"
),
),
],
options={
"verbose_name": "Game event",
"verbose_name_plural": "Game events",
"db_table": "game_events",
},
),
]

View File

@@ -0,0 +1,41 @@
# Generated by Django 3.1.3 on 2020-11-06 04:53
from django.db import migrations, models
import game.models
class Migration(migrations.Migration):
dependencies = [
("game", "0003_gameevent"),
]
operations = [
migrations.AlterModelOptions(
name="gameevent",
options={
"ordering": ["created_at"],
"verbose_name": "Game event",
"verbose_name_plural": "Game events",
},
),
migrations.AlterField(
model_name="gameevent",
name="type",
field=models.IntegerField(
choices=[
(0, "START_GAME"),
(1, "PAUSE"),
(2, "RESUME"),
(3, "CLICK_MINE"),
(4, "CLICK_POINT"),
(5, "CLICK_EMPTY"),
(6, "CLICK_FLAG"),
(7, "GAME_OVER"),
(8, "CLICK_NAIVE"),
],
default=game.models.EventTypes["START_GAME"],
help_text="The game event",
),
),
]

View File

@@ -0,0 +1,51 @@
# Generated by Django 3.1.3 on 2020-11-06 23:57
from django.db import migrations, models
import game.models
class Migration(migrations.Migration):
dependencies = [
("game", "0004_auto_20201106_0453"),
]
operations = [
migrations.RemoveField(model_name="gameevent", name="metadata",),
migrations.AddField(
model_name="gameevent",
name="event_col",
field=models.PositiveIntegerField(
blank=True,
default=None,
help_text="Column on the board where the event occurred, if applicable",
null=True,
verbose_name="The column clicked",
),
),
migrations.AddField(
model_name="gameevent",
name="event_row",
field=models.PositiveIntegerField(
blank=True,
default=None,
help_text="Row on the board where the event occurred, if applicable",
null=True,
verbose_name="The row clicked",
),
),
migrations.AlterField(
model_name="game",
name="status",
field=models.IntegerField(
choices=[
(0, "NOT_PLAYED"),
(1, "PLAYING"),
(2, "PAUSED"),
(3, "FINISHED"),
],
default=game.models.GameStatuses["NOT_PLAYED"],
help_text="Actual game status",
),
),
]

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

@@ -0,0 +1,33 @@
# Generated by Django 3.1.3 on 2020-11-07 01:30
from django.db import migrations
import django_mysql.models
import internal.utils
class Migration(migrations.Migration):
dependencies = [
("game", "0006_auto_20201107_0010"),
]
operations = [
migrations.AddField(
model_name="game",
name="board_progress",
field=django_mysql.models.JSONField(
default=internal.utils.empty_list,
help_text="This board is updated at each GameEvent recorded",
verbose_name="Progress board",
),
),
migrations.AlterField(
model_name="game",
name="board",
field=django_mysql.models.JSONField(
default=internal.utils.empty_list,
help_text="The generated board game",
verbose_name="Generated board",
),
),
]