Skip to content

Commit

Permalink
Merge pull request #30 from binary-monkey/dev
Browse files Browse the repository at this point in the history
First deliverable
  • Loading branch information
mikelsr committed Nov 18, 2019
2 parents 6034392 + 95bb5a4 commit b2e142e
Show file tree
Hide file tree
Showing 44 changed files with 4,863 additions and 6,113 deletions.
1 change: 1 addition & 0 deletions GameHoarder/settings.py
Original file line number Diff line number Diff line change
Expand Up @@ -136,6 +136,7 @@
STATIC_URL = '/static/'

API_KEY = "your-key-here"
DEV_MAIL = "your-mail-here"

BROKER_URL = 'redis://localhost:6379'
CELERY_RESULT_BACKEND = 'redis://localhost:6379'
Expand Down
17 changes: 17 additions & 0 deletions game_collection/foms.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
from django import forms


class MoveForm(forms.Form):

new_state = forms.IntegerField()

price = forms.FloatField()

date_adquired = forms.CharField()
date_started = forms.CharField()
date_other = forms.CharField()

time_played = forms.FloatField()
time_other = forms.FloatField()

playstyle = forms.IntegerField()
80 changes: 29 additions & 51 deletions game_collection/migrations/0001_initial.py
Original file line number Diff line number Diff line change
@@ -1,13 +1,14 @@
# Generated by Django 2.2.2 on 2019-06-24 09:42
# Generated by Django 2.2.2 on 2019-11-18 22:09

import django.utils.timezone
from django.conf import settings
from django.db import migrations, models

import django.db.models.deletion
import django.utils.timezone
import game_collection.models


class Migration(migrations.Migration):

initial = True

dependencies = [
Expand All @@ -21,11 +22,8 @@ class Migration(migrations.Migration):
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('date_added', models.DateField(default=django.utils.timezone.now, verbose_name='date added')),
('game_version',
models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='game_database.GameVersion',
verbose_name='game version')),
('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL,
verbose_name='user')),
('game_version', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='game_database.GameVersion', verbose_name='game version')),
('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL, verbose_name='user')),
],
options={
'verbose_name': 'Wishlist',
Expand All @@ -36,9 +34,8 @@ class Migration(migrations.Migration):
name='TagGroup',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('name', models.CharField(max_length=16, verbose_name='name')),
('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL,
verbose_name='user')),
('name', models.CharField(max_length=16, unique=True, verbose_name='name')),
('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL, verbose_name='user')),
],
options={
'verbose_name': 'Tag Group',
Expand All @@ -50,14 +47,12 @@ class Migration(migrations.Migration):
name='Playing',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('price', models.FloatField(default=0.0, verbose_name='price')),
('date_adquired', models.DateField(blank=True, null=True, verbose_name='date adquired')),
('time_played', models.FloatField(blank=True, null=True, verbose_name='time played')),
('date_started', models.DateField(blank=True, null=True, verbose_name='date started')),
('game_version',
models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='game_database.GameVersion',
verbose_name='game version')),
('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL,
verbose_name='user')),
('game_version', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='game_database.GameVersion', verbose_name='game version')),
('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL, verbose_name='user')),
],
options={
'verbose_name': 'Playing',
Expand All @@ -68,15 +63,13 @@ class Migration(migrations.Migration):
name='Played',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('price', models.FloatField(default=0.0, verbose_name='price')),
('date_adquired', models.DateField(blank=True, null=True, verbose_name='date adquired')),
('time_played', models.FloatField(blank=True, null=True, verbose_name='time played')),
('date_started', models.DateField(blank=True, null=True, verbose_name='date started')),
('date_stopped', models.DateField(blank=True, null=True, verbose_name='date stopped')),
('game_version',
models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='game_database.GameVersion',
verbose_name='game version')),
('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL,
verbose_name='user')),
('game_version', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='game_database.GameVersion', verbose_name='game version')),
('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL, verbose_name='user')),
],
options={
'verbose_name': 'Played',
Expand All @@ -88,11 +81,8 @@ class Migration(migrations.Migration):
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('date_added', models.DateField(default=django.utils.timezone.now, verbose_name='date added')),
('game_version',
models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='game_database.GameVersion',
verbose_name='game version')),
('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL,
verbose_name='user')),
('game_version', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='game_database.GameVersion', verbose_name='game version')),
('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL, verbose_name='user')),
],
options={
'verbose_name': 'Interested',
Expand All @@ -103,21 +93,15 @@ class Migration(migrations.Migration):
name='Finished',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('price', models.FloatField(default=0.0, verbose_name='price')),
('date_adquired', models.DateField(blank=True, null=True, verbose_name='date adquired')),
('time_played', models.FloatField(blank=True, null=True, verbose_name='time played')),
('date_started', models.DateField(blank=True, null=True, verbose_name='date started')),
('date_finished', models.DateField(blank=True, null=True, verbose_name='date finished')),
('time_to_finish', models.FloatField(blank=True, null=True, verbose_name='time to finish')),
('playstyle', models.CharField(
choices=[(game_collection.models.PlaystyleChoice('Main Story'), 'Main Story'),
(game_collection.models.PlaystyleChoice('Main + Extra'), 'Main + Extra'),
(game_collection.models.PlaystyleChoice('Completionist'), 'Completionist')], max_length=5,
verbose_name='playstyle')),
('game_version',
models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='game_database.GameVersion',
verbose_name='game version')),
('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL,
verbose_name='user')),
('playstyle', models.CharField(choices=[(game_collection.models.PlaystyleChoice('Main Story'), 'Main Story'), (game_collection.models.PlaystyleChoice('Main + Extra'), 'Main + Extra'), (game_collection.models.PlaystyleChoice('Completionist'), 'Completionist')], max_length=5, verbose_name='playstyle')),
('game_version', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='game_database.GameVersion', verbose_name='game version')),
('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL, verbose_name='user')),
],
options={
'verbose_name': 'Finished',
Expand All @@ -128,15 +112,13 @@ class Migration(migrations.Migration):
name='Abandoned',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('price', models.FloatField(default=0.0, verbose_name='price')),
('date_adquired', models.DateField(blank=True, null=True, verbose_name='date adquired')),
('time_played', models.FloatField(blank=True, null=True, verbose_name='time played')),
('date_started', models.DateField(blank=True, null=True, verbose_name='date started')),
('date_abandoned', models.DateField(blank=True, null=True, verbose_name='date abandoned')),
('game_version',
models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='game_database.GameVersion',
verbose_name='game version')),
('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL,
verbose_name='user')),
('game_version', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='game_database.GameVersion', verbose_name='game version')),
('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL, verbose_name='user')),
],
options={
'verbose_name': 'Abandoned',
Expand All @@ -147,12 +129,10 @@ class Migration(migrations.Migration):
name='Tag',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('name', models.CharField(max_length=16, verbose_name='name')),
('name', models.CharField(max_length=16, unique=True, verbose_name='name')),
('game_version', models.ManyToManyField(to='game_database.GameVersion', verbose_name='game version')),
('tag_group', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL,
to='game_collection.TagGroup', verbose_name='tag group')),
('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL,
verbose_name='user')),
('tag_group', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='game_collection.TagGroup', verbose_name='tag group')),
('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL, verbose_name='user')),
],
options={
'verbose_name': 'Tag',
Expand All @@ -164,13 +144,11 @@ class Migration(migrations.Migration):
name='Queue',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('price', models.FloatField(default=0.0, verbose_name='price')),
('date_adquired', models.DateField(blank=True, null=True, verbose_name='date adquired')),
('time_played', models.FloatField(blank=True, null=True, verbose_name='time played')),
('game_version',
models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='game_database.GameVersion',
verbose_name='game version')),
('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL,
verbose_name='user')),
('game_version', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='game_database.GameVersion', verbose_name='game version')),
('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL, verbose_name='user')),
],
options={
'abstract': False,
Expand Down
5 changes: 3 additions & 2 deletions game_collection/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
class Collection(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE, verbose_name=_("user"))
game_version = models.ForeignKey(GameVersion, on_delete=models.PROTECT, verbose_name=_("game version"))
price = models.FloatField(default=0.0, verbose_name=_("price"))

date_adquired = models.DateField(blank=True, null=True, verbose_name=_("date adquired"))
time_played = models.FloatField(blank=True, null=True, verbose_name=_("time played"))
Expand Down Expand Up @@ -102,7 +103,7 @@ class Meta:

class TagGroup(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE, verbose_name=_("user"))
name = models.CharField(max_length=16, verbose_name=_("name"))
name = models.CharField(max_length=16, verbose_name=_("name"), unique=True)

def __str__(self):
return self.name
Expand All @@ -115,7 +116,7 @@ class Meta:

class Tag(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE, verbose_name=_("user"))
name = models.CharField(max_length=16, verbose_name=_("name"))
name = models.CharField(max_length=16, verbose_name=_("name"), unique=True)
game_version = models.ManyToManyField(GameVersion, verbose_name=_("game version"))

tag_group = models.ForeignKey(TagGroup, on_delete=models.SET_NULL, blank=True, null=True,
Expand Down
27 changes: 15 additions & 12 deletions game_collection/tasks.py
Original file line number Diff line number Diff line change
Expand Up @@ -33,18 +33,19 @@ def verify_collection_task(self, csv_file):
"platform": row[4].strip(),
"name": row[5].strip().replace("'", ""),
"id": row[6].strip(),
"time_played": row[7].strip(),
"time_to_finish": row[8].strip(),
"playstyle": row[9].strip(),
"tags": row[10].strip()
"price": row[7].strip(),
"time_played": row[8].strip(),
"time_to_finish": row[9].strip(),
"playstyle": row[10].strip(),
"tags": row[11].strip()
}

if title["id"] == "":

platform_name = title["platform"]
platform_id = GiantBombAPI.search_platform(title["platform"])["id"]
original_name = title["name"]

result = GiantBombAPI.search_game(original_name, platform_name, 10)
result = GiantBombAPI.search_game(original_name, 10, platform_id)
if result is not None:

title["id"] = result["id"]
Expand Down Expand Up @@ -109,11 +110,10 @@ def verify_list_task(self, csv_file):
}

if title["id"] == "":

platform_name = title["platform"]
platform_id = GiantBombAPI.search_platform(title["platform"])["id"]
original_name = title["name"]

result = GiantBombAPI.search_game(original_name, platform_name, 10)
result = GiantBombAPI.search_game(original_name, 10, platform_id)
if result is not None:

title["id"] = result["id"]
Expand Down Expand Up @@ -166,10 +166,12 @@ def import_collection_task(self, titles, username):

for i in range(total_titles):
title = titles[i]

user = User.objects.get(username=username)

if not Platform.objects.filter(name=title["platform"]).exists():
Platform.objects.create(name=title["platform"])
platform_id = GiantBombAPI.search_platform(title["platform"])["id"]
GameCollectionController.create_platform(platform_id)

platform = Platform.objects.get(name=title["platform"])

Expand All @@ -194,6 +196,7 @@ def import_collection_task(self, titles, username):
collection_entry["time_played"] = title["time_played"]

for tag_name in title["tags"].split(";"):

if not Tag.objects.filter(name=tag_name, user=user).exists():
Tag.objects.create(name=tag_name, user=user)

Expand All @@ -209,7 +212,6 @@ def import_collection_task(self, titles, username):
queue_titles += 1

elif list_type == "PLAYING":

if title["date_started"] != "":
collection_entry["date_started"] = title["date_started"]

Expand Down Expand Up @@ -287,7 +289,8 @@ def import_list_task(self, titles, username):
user = User.objects.get(username=username)

if not Platform.objects.filter(name=title["platform"]).exists():
Platform.objects.create(name=title["platform"])
platform_id = GiantBombAPI.search_platform(title["platform"])["id"]
GameCollectionController.create_platform(platform_id)

platform = Platform.objects.get(name=title["platform"])

Expand Down
51 changes: 51 additions & 0 deletions game_collection/tests.py
Original file line number Diff line number Diff line change
@@ -1 +1,52 @@
# Create your tests here.

from django.test import TestCase

from game_database.functions import GameCollectionController, HowLongToBeatAPI
from game_database.models import Platform


class HLTBTest(TestCase):

def setUp(self):

pc = Platform.objects.create(name="PC")

self.game = GameCollectionController.create_game(1539, pc).parent_game

# Removing times for update test
self.game.main_time = 0
self.game.extra_time = 0
self.game.completion_time = 0

def test_load_times(self):

times = HowLongToBeatAPI.load_times(self.game)

self.assertTrue(isinstance(times.gameplay_main, str))
self.assertTrue(isinstance(times.gameplay_main_extra, str))
self.assertTrue(isinstance(times.gameplay_completionist, str))

def test_update_times(self):
times = HowLongToBeatAPI.load_times(self.game)

if str(times.gameplay_main) != "-1":
main_time = times.gameplay_main.replace("½", ".5")
else:
main_time = 0

if str(times.gameplay_main_extra) != "-1":
extra_time = times.gameplay_main_extra.replace("½", ".5")
else:
extra_time = 0

if str(times.gameplay_completionist) != "-1":
completion_time = times.gameplay_completionist.replace("½", ".5")
else:
completion_time = 0

HowLongToBeatAPI.update_game_hltb(self.game)

self.assertEquals(self.game.main_time, float(main_time))
self.assertEquals(self.game.extra_time, float(extra_time))
self.assertEquals(self.game.completion_time, float(completion_time))
7 changes: 7 additions & 0 deletions game_collection/urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,4 +19,11 @@
path('collection/finished', views_tables.finished_table, name='finished_table'),
path('collection/played', views_tables.played_table, name='played_table'),
path('collection/abandoned', views_tables.abandoned_table, name='abandoned_table'),

path('search', views.game_search, name='game_search'),
path('tag/', views_tables.tag_table, name='tag_table'),

path('game/<str:db_id>', views.game_view, name='game_view'),
path('game/<str:db_id>/add', views.add_game, name='add_game'),
path('game/<str:db_id>/move', views.move_game, name='move_game'),
]
Loading

0 comments on commit b2e142e

Please sign in to comment.