Skip to content

Commit b6d979f

Browse files
committed
Removed Source class, consolidated on attachments
1 parent 16e2f04 commit b6d979f

File tree

6 files changed

+60
-64
lines changed

6 files changed

+60
-64
lines changed

challenges/migrations/0001_initial.py

Lines changed: 14 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
# Generated by Django 2.1.2 on 2018-10-07 00:29
1+
# Generated by Django 2.1.2 on 2018-10-08 22:58
22

33
from django.conf import settings
44
from django.db import migrations, models
@@ -23,6 +23,7 @@ class Migration(migrations.Migration):
2323
('name', models.CharField(max_length=250)),
2424
('url', models.TextField()),
2525
('active', models.BooleanField(default=True)),
26+
('attachment_type', models.CharField(blank=True, choices=[('image', 'Image'), ('github_url', 'Github Url'), ('url', 'Url'), ('zip', 'Zip'), ('pdf', 'PDF'), ('Sketch', 'Sketch File'), ('PSD', 'Photoshop')], max_length=30, null=True)),
2627
],
2728
),
2829
migrations.CreateModel(
@@ -44,19 +45,7 @@ class Migration(migrations.Migration):
4445
('technical_notes', models.TextField()),
4546
('procedure', models.TextField()),
4647
('code_tips', models.TextField()),
47-
('user', models.ForeignKey(on_delete=django.db.models.deletion.DO_NOTHING, to=settings.AUTH_USER_MODEL)),
48-
],
49-
),
50-
migrations.CreateModel(
51-
name='Source',
52-
fields=[
53-
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
54-
('created_at', models.DateTimeField(auto_now_add=True)),
55-
('updated_at', models.DateTimeField(auto_now=True)),
56-
('name', models.CharField(max_length=250)),
57-
('url', models.TextField()),
58-
('active', models.BooleanField(default=True)),
59-
('challenge', models.ForeignKey(on_delete=django.db.models.deletion.DO_NOTHING, to='challenges.Challenge')),
48+
('fake_date_created', models.CharField(max_length=25, null=True)),
6049
],
6150
),
6251
migrations.CreateModel(
@@ -68,9 +57,19 @@ class Migration(migrations.Migration):
6857
('name', models.CharField(max_length=250)),
6958
],
7059
),
60+
migrations.AddField(
61+
model_name='challenge',
62+
name='tags',
63+
field=models.ManyToManyField(related_name='challenges', to='challenges.Tag'),
64+
),
65+
migrations.AddField(
66+
model_name='challenge',
67+
name='user',
68+
field=models.ForeignKey(on_delete=django.db.models.deletion.DO_NOTHING, to=settings.AUTH_USER_MODEL),
69+
),
7170
migrations.AddField(
7271
model_name='attachment',
7372
name='challenge',
74-
field=models.ForeignKey(on_delete=django.db.models.deletion.DO_NOTHING, to='challenges.Challenge'),
73+
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='attachments', to='challenges.Challenge'),
7574
),
7675
]

challenges/migrations/0002_challenge_tags.py

Lines changed: 0 additions & 18 deletions
This file was deleted.

challenges/models.py

Lines changed: 15 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
from django.db import models
22
from accounts.models import User
33

4+
45
class Tag(models.Model):
56
def __str__(self):
67
return self.name
@@ -9,6 +10,7 @@ def __str__(self):
910
updated_at = models.DateTimeField(auto_now=True)
1011
name = models.CharField(max_length=250,)
1112

13+
1214
class Challenge(models.Model):
1315

1416
CHALLENGE_TYPES = (
@@ -36,25 +38,27 @@ class Challenge(models.Model):
3638
procedure = models.TextField()
3739
code_tips = models.TextField()
3840
tags = models.ManyToManyField(Tag, related_name='challenges')
41+
fake_date_created = models.CharField(max_length=25, null=True)
42+
3943

4044
class Attachment(models.Model):
4145
def __str__(self):
4246
return self.name
4347

44-
created_at = models.DateTimeField(auto_now_add=True)
45-
updated_at = models.DateTimeField(auto_now=True)
46-
name = models.CharField(max_length=250,)
47-
url = models.TextField()
48-
active = models.BooleanField(default=True)
49-
challenge = models.ForeignKey(Challenge, on_delete=models.DO_NOTHING)
50-
51-
class Source(models.Model):
52-
def __str__(self):
53-
return self.name
48+
ATTACHMENT_TYPES = (
49+
('image', 'Image'),
50+
('github_url', 'Github Url'),
51+
('url', 'Url'),
52+
('zip', 'Zip'),
53+
('pdf', 'PDF'),
54+
('Sketch', 'Sketch File'),
55+
('PSD', 'Photoshop'),
56+
)
5457

5558
created_at = models.DateTimeField(auto_now_add=True)
5659
updated_at = models.DateTimeField(auto_now=True)
5760
name = models.CharField(max_length=250,)
5861
url = models.TextField()
5962
active = models.BooleanField(default=True)
60-
challenge = models.ForeignKey(Challenge, related_name='sources', on_delete=models.DO_NOTHING)
63+
attachment_type = models.CharField(max_length=30, choices=ATTACHMENT_TYPES, null=True, blank=True)
64+
challenge = models.ForeignKey(Challenge, related_name='attachments', on_delete=models.CASCADE)

challenges/serializers.py

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
from rest_framework_json_api import serializers
2-
from .models import Challenge, Tag, Source
2+
from .models import Challenge, Tag, Attachment
33
from accounts.models import User
44
from accounts.serializers import UserSerializer
55
from rest_framework_json_api.relations import ResourceRelatedField
@@ -9,25 +9,28 @@ class Meta:
99
model = Tag
1010
fields = ('name',)
1111

12-
class SourcesSerializer(serializers.ModelSerializer):
1312

14-
queryset = Source.objects.filter(active=True,)
13+
class AttachmentsSerializer(serializers.ModelSerializer):
14+
15+
queryset = Attachment.objects.filter(active=True,)
1516

1617
class Meta:
17-
model = Source
18-
fields = ('name', 'url')
18+
model = Attachment
19+
fields = ('name', 'url', 'attachment_type')
1920

2021
class ChallengeSerializer(serializers.ModelSerializer):
2122
class Meta:
2223
model = Challenge
23-
fields = ('user', 'tags', 'sources', 'created_at', 'updated_at', 'title', 'short_title', 'owner', 'difficulty',
24+
fields = ('user', 'tags', 'attachments', 'created_at', 'updated_at', 'title', 'short_title', 'owner', 'difficulty',
2425
'challenge_type', 'priority', 'description', 'short_description',
2526
'extra_points', 'technical_notes', 'procedure', 'code_tips')
2627

28+
queryset = Challenge.objects.filter(is_visible=True,)
29+
2730
included_serializers = {
2831
'user': UserSerializer,
2932
'tags': TagsSerializer,
30-
'sources': SourcesSerializer,
33+
'attachments': AttachmentsSerializer,
3134
}
3235

3336
user = ResourceRelatedField(
@@ -39,13 +42,13 @@ class Meta:
3942
many=True,
4043
)
4144

42-
sources = ResourceRelatedField(
43-
queryset=Source.objects,
45+
attachments = ResourceRelatedField(
46+
queryset=Attachment.objects,
4447
many=True,
4548
)
4649

4750
class JSONAPIMeta:
48-
included_resources = ['user', 'tags', 'sources']
51+
included_resources = ['user', 'tags', 'attachments']
4952

5053
class TagGetSerializer(serializers.ModelSerializer):
5154
class Meta:

challenges/tests/test_requests/test_challenges.py

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
from django.test import TestCase
22
from rest_framework.test import APIClient, APITestCase
33
from accounts.models import User
4-
from challenges.models import Challenge, Tag, Attachment, Source
4+
from challenges.models import Challenge, Tag, Attachment
55
import sure
66
import json
77
import pdb
@@ -56,7 +56,7 @@ def test_challenge_create_with_tags(self):
5656
"""
5757
Ensure we get the correct tags information with a challenge
5858
"""
59-
tag1 = Tag.objects.create(name='Javascript')
59+
tag1 = Tag.objects.create(name='JavascriptTestTag')
6060

6161
challenge = self.get_sample_challenge(tags=[ tag1 ])
6262

@@ -73,15 +73,16 @@ def test_challenge_create_with_tags(self):
7373

7474
[item for item in included if item.get('type') == 'tags'][0]['attributes']['name'].should.equal(tag1.name)
7575

76-
def test_challenge_create_with_source(self):
76+
def test_challenge_create_with_attachment(self):
7777
"""
78-
Ensure we get the correct sources information with the challenge
78+
Ensure we get the correct attachments information with the challenge
7979
"""
8080
challenge = self.get_sample_challenge()
81-
source = Source.objects.create(
81+
attachment = Attachment.objects.create(
8282
challenge=challenge,
8383
name='github',
84-
url='https://github.com/corgicode'
84+
attachment_type='github_url',
85+
url='https://github.com/corgicode',
8586
)
8687

8788
response = self.client.get(f'/services/api/challenges?pk={ challenge.id }',
@@ -92,13 +93,13 @@ def test_challenge_create_with_source(self):
9293
response_data = json.loads(response.content)
9394
included = response_data['included']
9495

95-
[item for item in included if item.get('type') == 'sources'][0]['attributes']['name'].should.equal(source.name)
96+
[item for item in included if item.get('type') == 'attachments'][0]['attributes']['name'].should.equal(attachment.name)
9697

9798
def get_challenges_with_tag_name(self):
9899
"""
99100
Ensure we get the correct challenge
100101
"""
101-
tag = Tag.objects.create(name='testTag')
102+
tag = Tag.objects.create(name='testTagName')
102103

103104
challenge1 = self.get_sample_challenge(tags=[ tag ])
104105
challenge2 = self.get_sample_challenge(tags=[ tag ])

challenges/views.py

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,21 +5,28 @@
55
class ChallengesViewSet(viewsets.ModelViewSet):
66

77
def get_queryset(self):
8-
queryset = Challenge.objects.all()
8+
queryset = Challenge.objects.filter(is_visible=True,).order_by('id')
99
pk = self.request.query_params.get('pk', None)
1010
if pk is not None:
1111
queryset = queryset.filter(pk=pk)
1212
return queryset
1313

1414
serializer_class = ChallengeSerializer
1515

16+
class Meta:
17+
ordering = ['-id']
18+
1619
class TagsViewSet(viewsets.ModelViewSet):
1720

1821
def get_queryset(self):
19-
queryset = Tag.objects.all()
22+
queryset = Tag.objects.all().order_by('id')
2023
pk = self.request.query_params.get('name', None)
2124
if pk is not None:
2225
queryset = queryset.filter(name=name)
2326
return queryset
2427

2528
serializer_class = TagGetSerializer
29+
30+
class Meta:
31+
ordering = ['-id']
32+

0 commit comments

Comments
 (0)