Skip to content

Commit

Permalink
feat: Add game dropdown (#1450)
Browse files Browse the repository at this point in the history
* wip: changed AddGameForm and Game model

* fix tests

* saving SQL query just in case, though it's not
fully working yet

* fixed SQL to delete avatars as well

* format migration

* move AddGameForm to portal

* updated ci

* Merge branch 'development' into add-game-dropdown

* fixed worksheet_id in cypress

* renamed migration

* bring avatar creator back
  • Loading branch information
razvan-pro committed Jan 25, 2021
1 parent 9ac15aa commit a013f26
Show file tree
Hide file tree
Showing 11 changed files with 160 additions and 247 deletions.
1 change: 1 addition & 0 deletions .github/workflows/cicd.yml
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ jobs:
run: |
pip install pipenv
pipenv install --dev --system
pip install -U git+https://github.com/ocadotechnology/codeforlife-portal.git@add-game-dropdown # Remove after merge
cd game_frontend
yarn --frozen-lockfile
- name: Run Javascript tests
Expand Down
53 changes: 53 additions & 0 deletions aimmo/avatar_creator.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
# -*- coding: utf-8 -*-
# Code for Life
#
# Copyright (C) 2020, Ocado Innovation Limited
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
# published by the Free Software Foundation, either version 3 of the
# License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
# ADDITIONAL TERMS – Section 7 GNU General Public Licence
#
# This licence does not grant any right, title or interest in any “Ocado” logos,
# trade names or the trademark “Ocado” or any other trademarks or domain names
# owned by Ocado Innovation Limited or the Ocado group of companies or any other
# distinctive brand features of “Ocado” as may be secured from time to time. You
# must not distribute any modification of this program using the trademark
# “Ocado” or claim any affiliation or association with Ocado or its employees.
#
# You are not authorised to use the name Ocado (or any of its trade names) or
# the names of any author or contributor in advertising or for publicity purposes
# pertaining to the distribution of this program, without the prior written
# authorisation of Ocado.
#
# Any propagation, distribution or conveyance of this program must include this
# copyright notice and these terms. You must not misrepresent the origins of this
# program; modified versions of the program must be marked as such and not
# identified as the original program.

from aimmo.models import Avatar, Game


def create_avatar_for_user(user, game_id):
"""
Creates an Avatar object for a user. Sets the initial code to simple avatar code
(unless specified otherwise).
:param user: The user the Avatar is for.
:param game_id: The id of the game in which the Avatar is created.
:return: The initialised Avatar object.
"""
game: Game = Game.objects.get(id=game_id)
initial_code = game.worksheet.starter_code
avatar = Avatar.objects.create(owner=user, code=initial_code, game_id=game_id)
return avatar
63 changes: 0 additions & 63 deletions aimmo/forms.py

This file was deleted.

45 changes: 0 additions & 45 deletions aimmo/game_creator.py

This file was deleted.

75 changes: 75 additions & 0 deletions aimmo/migrations/0024_unique_class_per_game.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
# Generated by Django 2.2.17 on 2021-01-19 17:23

from django.db import migrations, models
import django.db.models.deletion


class Migration(migrations.Migration):

dependencies = [
("aimmo", "0023_remove_level_attempt"),
]

operations = [
migrations.RunSQL(
"""
CREATE TEMPORARY TABLE aimmo_games_to_delete AS
SELECT
id
FROM
aimmo_game ag
JOIN (
SELECT
owner_id,
game_class_id,
MAX(id) target_game_id
FROM
aimmo_game
GROUP BY
owner_id,
game_class_id
HAVING
count(*) > 1) duplicate_game ON
ag.owner_id = duplicate_game.owner_id
AND ag.game_class_id = duplicate_game.game_class_id
AND ag.id != duplicate_game.target_game_id;
DELETE
FROM
aimmo_avatar
WHERE
game_id IN aimmo_games_to_delete;
DELETE
FROM
aimmo_game
WHERE
id IN aimmo_games_to_delete;
""",
migrations.RunSQL.noop,
),
migrations.AlterField(
model_name="game",
name="game_class",
field=models.OneToOneField(
blank=True,
null=True,
on_delete=django.db.models.deletion.CASCADE,
to="common.Class",
verbose_name="Class",
),
),
migrations.AlterField(
model_name="game",
name="worksheet",
field=models.ForeignKey(
default=1,
on_delete=django.db.models.deletion.PROTECT,
to="aimmo.Worksheet",
),
),
migrations.AlterUniqueTogether(
name="game",
unique_together=set(),
),
]
10 changes: 4 additions & 6 deletions aimmo/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -71,13 +71,12 @@ class Game(models.Model):
related_name="owned_games",
on_delete=models.SET_NULL,
)
game_class = models.ForeignKey(
game_class = models.OneToOneField(
Class,
verbose_name="Class",
on_delete=models.CASCADE,
blank=True,
null=True,
related_name="games_for_class",
)
public = models.BooleanField(default=False)
can_play = models.ManyToManyField(
Expand Down Expand Up @@ -108,10 +107,9 @@ class Game(models.Model):
start_height = models.IntegerField(default=31)
start_width = models.IntegerField(default=31)
status = models.CharField(max_length=1, choices=STATUS_CHOICES, default=RUNNING)
worksheet = models.ForeignKey(Worksheet, on_delete=models.PROTECT)

class Meta:
unique_together = ("game_class", "worksheet")
worksheet = models.ForeignKey(
Worksheet, on_delete=models.PROTECT, default=DEFAULT_WORKSHEET_ID
)

@property
def is_active(self):
Expand Down
6 changes: 2 additions & 4 deletions aimmo/templatetags/players_utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,11 +14,9 @@ def game_dropdown_list(context, base_url):
def get_user_playable_games(context, base_url):
user = context.request.user
if logged_in_as_student(user):
playable_games = user.userprofile.student.class_field.games_for_class.all()
playable_games = user.userprofile.student.class_field.game
elif logged_in_as_teacher(user):
playable_games = Game.objects.none()
for klass in user.userprofile.teacher.class_teacher.all():
playable_games |= klass.games_for_class.all()
playable_games = Game.objects.filter(game_class__teacher=user.userprofile.teacher)
else:
playable_games = Game.objects.none()
return {
Expand Down
104 changes: 0 additions & 104 deletions aimmo/tests/test_forms.py

This file was deleted.

Loading

0 comments on commit a013f26

Please sign in to comment.