Skip to content

Commit b2e142e

Browse files
authored
Merge pull request #30 from binary-monkey/dev
First deliverable
2 parents 6034392 + 95bb5a4 commit b2e142e

44 files changed

Lines changed: 4863 additions & 6113 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

GameHoarder/settings.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -136,6 +136,7 @@
136136
STATIC_URL = '/static/'
137137

138138
API_KEY = "your-key-here"
139+
DEV_MAIL = "your-mail-here"
139140

140141
BROKER_URL = 'redis://localhost:6379'
141142
CELERY_RESULT_BACKEND = 'redis://localhost:6379'

game_collection/foms.py

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
from django import forms
2+
3+
4+
class MoveForm(forms.Form):
5+
6+
new_state = forms.IntegerField()
7+
8+
price = forms.FloatField()
9+
10+
date_adquired = forms.CharField()
11+
date_started = forms.CharField()
12+
date_other = forms.CharField()
13+
14+
time_played = forms.FloatField()
15+
time_other = forms.FloatField()
16+
17+
playstyle = forms.IntegerField()

game_collection/migrations/0001_initial.py

Lines changed: 29 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,14 @@
1-
# Generated by Django 2.2.2 on 2019-06-24 09:42
1+
# Generated by Django 2.2.2 on 2019-11-18 22:09
22

3-
import django.utils.timezone
43
from django.conf import settings
54
from django.db import migrations, models
6-
5+
import django.db.models.deletion
6+
import django.utils.timezone
77
import game_collection.models
88

99

1010
class Migration(migrations.Migration):
11+
1112
initial = True
1213

1314
dependencies = [
@@ -21,11 +22,8 @@ class Migration(migrations.Migration):
2122
fields=[
2223
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
2324
('date_added', models.DateField(default=django.utils.timezone.now, verbose_name='date added')),
24-
('game_version',
25-
models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='game_database.GameVersion',
26-
verbose_name='game version')),
27-
('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL,
28-
verbose_name='user')),
25+
('game_version', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='game_database.GameVersion', verbose_name='game version')),
26+
('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL, verbose_name='user')),
2927
],
3028
options={
3129
'verbose_name': 'Wishlist',
@@ -36,9 +34,8 @@ class Migration(migrations.Migration):
3634
name='TagGroup',
3735
fields=[
3836
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
39-
('name', models.CharField(max_length=16, verbose_name='name')),
40-
('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL,
41-
verbose_name='user')),
37+
('name', models.CharField(max_length=16, unique=True, verbose_name='name')),
38+
('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL, verbose_name='user')),
4239
],
4340
options={
4441
'verbose_name': 'Tag Group',
@@ -50,14 +47,12 @@ class Migration(migrations.Migration):
5047
name='Playing',
5148
fields=[
5249
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
50+
('price', models.FloatField(default=0.0, verbose_name='price')),
5351
('date_adquired', models.DateField(blank=True, null=True, verbose_name='date adquired')),
5452
('time_played', models.FloatField(blank=True, null=True, verbose_name='time played')),
5553
('date_started', models.DateField(blank=True, null=True, verbose_name='date started')),
56-
('game_version',
57-
models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='game_database.GameVersion',
58-
verbose_name='game version')),
59-
('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL,
60-
verbose_name='user')),
54+
('game_version', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='game_database.GameVersion', verbose_name='game version')),
55+
('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL, verbose_name='user')),
6156
],
6257
options={
6358
'verbose_name': 'Playing',
@@ -68,15 +63,13 @@ class Migration(migrations.Migration):
6863
name='Played',
6964
fields=[
7065
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
66+
('price', models.FloatField(default=0.0, verbose_name='price')),
7167
('date_adquired', models.DateField(blank=True, null=True, verbose_name='date adquired')),
7268
('time_played', models.FloatField(blank=True, null=True, verbose_name='time played')),
7369
('date_started', models.DateField(blank=True, null=True, verbose_name='date started')),
7470
('date_stopped', models.DateField(blank=True, null=True, verbose_name='date stopped')),
75-
('game_version',
76-
models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='game_database.GameVersion',
77-
verbose_name='game version')),
78-
('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL,
79-
verbose_name='user')),
71+
('game_version', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='game_database.GameVersion', verbose_name='game version')),
72+
('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL, verbose_name='user')),
8073
],
8174
options={
8275
'verbose_name': 'Played',
@@ -88,11 +81,8 @@ class Migration(migrations.Migration):
8881
fields=[
8982
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
9083
('date_added', models.DateField(default=django.utils.timezone.now, verbose_name='date added')),
91-
('game_version',
92-
models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='game_database.GameVersion',
93-
verbose_name='game version')),
94-
('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL,
95-
verbose_name='user')),
84+
('game_version', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='game_database.GameVersion', verbose_name='game version')),
85+
('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL, verbose_name='user')),
9686
],
9787
options={
9888
'verbose_name': 'Interested',
@@ -103,21 +93,15 @@ class Migration(migrations.Migration):
10393
name='Finished',
10494
fields=[
10595
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
96+
('price', models.FloatField(default=0.0, verbose_name='price')),
10697
('date_adquired', models.DateField(blank=True, null=True, verbose_name='date adquired')),
10798
('time_played', models.FloatField(blank=True, null=True, verbose_name='time played')),
10899
('date_started', models.DateField(blank=True, null=True, verbose_name='date started')),
109100
('date_finished', models.DateField(blank=True, null=True, verbose_name='date finished')),
110101
('time_to_finish', models.FloatField(blank=True, null=True, verbose_name='time to finish')),
111-
('playstyle', models.CharField(
112-
choices=[(game_collection.models.PlaystyleChoice('Main Story'), 'Main Story'),
113-
(game_collection.models.PlaystyleChoice('Main + Extra'), 'Main + Extra'),
114-
(game_collection.models.PlaystyleChoice('Completionist'), 'Completionist')], max_length=5,
115-
verbose_name='playstyle')),
116-
('game_version',
117-
models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='game_database.GameVersion',
118-
verbose_name='game version')),
119-
('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL,
120-
verbose_name='user')),
102+
('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')),
103+
('game_version', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='game_database.GameVersion', verbose_name='game version')),
104+
('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL, verbose_name='user')),
121105
],
122106
options={
123107
'verbose_name': 'Finished',
@@ -128,15 +112,13 @@ class Migration(migrations.Migration):
128112
name='Abandoned',
129113
fields=[
130114
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
115+
('price', models.FloatField(default=0.0, verbose_name='price')),
131116
('date_adquired', models.DateField(blank=True, null=True, verbose_name='date adquired')),
132117
('time_played', models.FloatField(blank=True, null=True, verbose_name='time played')),
133118
('date_started', models.DateField(blank=True, null=True, verbose_name='date started')),
134119
('date_abandoned', models.DateField(blank=True, null=True, verbose_name='date abandoned')),
135-
('game_version',
136-
models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='game_database.GameVersion',
137-
verbose_name='game version')),
138-
('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL,
139-
verbose_name='user')),
120+
('game_version', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='game_database.GameVersion', verbose_name='game version')),
121+
('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL, verbose_name='user')),
140122
],
141123
options={
142124
'verbose_name': 'Abandoned',
@@ -147,12 +129,10 @@ class Migration(migrations.Migration):
147129
name='Tag',
148130
fields=[
149131
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
150-
('name', models.CharField(max_length=16, verbose_name='name')),
132+
('name', models.CharField(max_length=16, unique=True, verbose_name='name')),
151133
('game_version', models.ManyToManyField(to='game_database.GameVersion', verbose_name='game version')),
152-
('tag_group', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL,
153-
to='game_collection.TagGroup', verbose_name='tag group')),
154-
('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL,
155-
verbose_name='user')),
134+
('tag_group', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='game_collection.TagGroup', verbose_name='tag group')),
135+
('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL, verbose_name='user')),
156136
],
157137
options={
158138
'verbose_name': 'Tag',
@@ -164,13 +144,11 @@ class Migration(migrations.Migration):
164144
name='Queue',
165145
fields=[
166146
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
147+
('price', models.FloatField(default=0.0, verbose_name='price')),
167148
('date_adquired', models.DateField(blank=True, null=True, verbose_name='date adquired')),
168149
('time_played', models.FloatField(blank=True, null=True, verbose_name='time played')),
169-
('game_version',
170-
models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='game_database.GameVersion',
171-
verbose_name='game version')),
172-
('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL,
173-
verbose_name='user')),
150+
('game_version', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='game_database.GameVersion', verbose_name='game version')),
151+
('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL, verbose_name='user')),
174152
],
175153
options={
176154
'abstract': False,

game_collection/models.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
class Collection(models.Model):
1212
user = models.ForeignKey(User, on_delete=models.CASCADE, verbose_name=_("user"))
1313
game_version = models.ForeignKey(GameVersion, on_delete=models.PROTECT, verbose_name=_("game version"))
14+
price = models.FloatField(default=0.0, verbose_name=_("price"))
1415

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

103104
class TagGroup(models.Model):
104105
user = models.ForeignKey(User, on_delete=models.CASCADE, verbose_name=_("user"))
105-
name = models.CharField(max_length=16, verbose_name=_("name"))
106+
name = models.CharField(max_length=16, verbose_name=_("name"), unique=True)
106107

107108
def __str__(self):
108109
return self.name
@@ -115,7 +116,7 @@ class Meta:
115116

116117
class Tag(models.Model):
117118
user = models.ForeignKey(User, on_delete=models.CASCADE, verbose_name=_("user"))
118-
name = models.CharField(max_length=16, verbose_name=_("name"))
119+
name = models.CharField(max_length=16, verbose_name=_("name"), unique=True)
119120
game_version = models.ManyToManyField(GameVersion, verbose_name=_("game version"))
120121

121122
tag_group = models.ForeignKey(TagGroup, on_delete=models.SET_NULL, blank=True, null=True,

game_collection/tasks.py

Lines changed: 15 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -33,18 +33,19 @@ def verify_collection_task(self, csv_file):
3333
"platform": row[4].strip(),
3434
"name": row[5].strip().replace("'", ""),
3535
"id": row[6].strip(),
36-
"time_played": row[7].strip(),
37-
"time_to_finish": row[8].strip(),
38-
"playstyle": row[9].strip(),
39-
"tags": row[10].strip()
36+
"price": row[7].strip(),
37+
"time_played": row[8].strip(),
38+
"time_to_finish": row[9].strip(),
39+
"playstyle": row[10].strip(),
40+
"tags": row[11].strip()
4041
}
4142

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

44-
platform_name = title["platform"]
45+
platform_id = GiantBombAPI.search_platform(title["platform"])["id"]
4546
original_name = title["name"]
4647

47-
result = GiantBombAPI.search_game(original_name, platform_name, 10)
48+
result = GiantBombAPI.search_game(original_name, 10, platform_id)
4849
if result is not None:
4950

5051
title["id"] = result["id"]
@@ -109,11 +110,10 @@ def verify_list_task(self, csv_file):
109110
}
110111

111112
if title["id"] == "":
112-
113-
platform_name = title["platform"]
113+
platform_id = GiantBombAPI.search_platform(title["platform"])["id"]
114114
original_name = title["name"]
115115

116-
result = GiantBombAPI.search_game(original_name, platform_name, 10)
116+
result = GiantBombAPI.search_game(original_name, 10, platform_id)
117117
if result is not None:
118118

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

167167
for i in range(total_titles):
168168
title = titles[i]
169+
169170
user = User.objects.get(username=username)
170171

171172
if not Platform.objects.filter(name=title["platform"]).exists():
172-
Platform.objects.create(name=title["platform"])
173+
platform_id = GiantBombAPI.search_platform(title["platform"])["id"]
174+
GameCollectionController.create_platform(platform_id)
173175

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

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

196198
for tag_name in title["tags"].split(";"):
199+
197200
if not Tag.objects.filter(name=tag_name, user=user).exists():
198201
Tag.objects.create(name=tag_name, user=user)
199202

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

211214
elif list_type == "PLAYING":
212-
213215
if title["date_started"] != "":
214216
collection_entry["date_started"] = title["date_started"]
215217

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

289291
if not Platform.objects.filter(name=title["platform"]).exists():
290-
Platform.objects.create(name=title["platform"])
292+
platform_id = GiantBombAPI.search_platform(title["platform"])["id"]
293+
GameCollectionController.create_platform(platform_id)
291294

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

game_collection/tests.py

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1 +1,52 @@
11
# Create your tests here.
2+
3+
from django.test import TestCase
4+
5+
from game_database.functions import GameCollectionController, HowLongToBeatAPI
6+
from game_database.models import Platform
7+
8+
9+
class HLTBTest(TestCase):
10+
11+
def setUp(self):
12+
13+
pc = Platform.objects.create(name="PC")
14+
15+
self.game = GameCollectionController.create_game(1539, pc).parent_game
16+
17+
# Removing times for update test
18+
self.game.main_time = 0
19+
self.game.extra_time = 0
20+
self.game.completion_time = 0
21+
22+
def test_load_times(self):
23+
24+
times = HowLongToBeatAPI.load_times(self.game)
25+
26+
self.assertTrue(isinstance(times.gameplay_main, str))
27+
self.assertTrue(isinstance(times.gameplay_main_extra, str))
28+
self.assertTrue(isinstance(times.gameplay_completionist, str))
29+
30+
def test_update_times(self):
31+
times = HowLongToBeatAPI.load_times(self.game)
32+
33+
if str(times.gameplay_main) != "-1":
34+
main_time = times.gameplay_main.replace("½", ".5")
35+
else:
36+
main_time = 0
37+
38+
if str(times.gameplay_main_extra) != "-1":
39+
extra_time = times.gameplay_main_extra.replace("½", ".5")
40+
else:
41+
extra_time = 0
42+
43+
if str(times.gameplay_completionist) != "-1":
44+
completion_time = times.gameplay_completionist.replace("½", ".5")
45+
else:
46+
completion_time = 0
47+
48+
HowLongToBeatAPI.update_game_hltb(self.game)
49+
50+
self.assertEquals(self.game.main_time, float(main_time))
51+
self.assertEquals(self.game.extra_time, float(extra_time))
52+
self.assertEquals(self.game.completion_time, float(completion_time))

game_collection/urls.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,4 +19,11 @@
1919
path('collection/finished', views_tables.finished_table, name='finished_table'),
2020
path('collection/played', views_tables.played_table, name='played_table'),
2121
path('collection/abandoned', views_tables.abandoned_table, name='abandoned_table'),
22+
23+
path('search', views.game_search, name='game_search'),
24+
path('tag/', views_tables.tag_table, name='tag_table'),
25+
26+
path('game/<str:db_id>', views.game_view, name='game_view'),
27+
path('game/<str:db_id>/add', views.add_game, name='add_game'),
28+
path('game/<str:db_id>/move', views.move_game, name='move_game'),
2229
]

0 commit comments

Comments
 (0)