Merge branch 'master' of github.com:ramonwenger/skillbox

This commit is contained in:
Ramon Wenger 2018-08-23 16:05:40 +02:00
commit f583c6c8cc
11 changed files with 218 additions and 28 deletions

View File

@ -0,0 +1,24 @@
query RoomEntriesQuery($id: ID!) {
room(id:$id) {
id
title
slug
appearance
pk
roomEntries {
edges {
node {
id
slug
title
description
author {
id
firstName
lastName
}
}
}
}
}
}

View File

@ -0,0 +1,32 @@
query RoomsQuery {
room(id:"Um9vbU5vZGU6MTA=") {
id
title
slug
appearance
pk
roomEntries {
edges {
node {
id
slug
title
description
author {
id
firstName
lastName
}
}
}
}
}
allRooms(first:0) {
edges {
node {
id
}
}
}
}

View File

@ -39,13 +39,6 @@
}
}
}
},
head: {
title: 'Modules with Apollo'
},
created() {
}
}
</script>

View File

@ -6,7 +6,7 @@ from django.conf import settings
from django.contrib.auth import get_user_model
from django.core.management import BaseCommand
from rooms.factories import RoomFactory
from rooms.factories import RoomFactory, RoomEntryFactory
from rooms.models import Room
from user.factories import UserGroupFactory
from user.models import UserGroup
@ -15,20 +15,50 @@ data = [
{
'title': 'Ein historisches Festival',
'appearance': 'red',
# 'group': 'Klasse 3b - 2018/2019'
# 'entries': [1, 1, 1, 1, 1, 1]
'entries': [
{
'title': 'Ein neues Festival auf dem Gurten und ich bin dabei!',
'description': 'Endlich war es soweit. Zum ersten Mal fand am 2. und 3. Juli 1977 das 1. Internationale …'
},
{
'title': 'Mein Tagesblog',
'description': 'https://blogger.com/cruel-festivals-around-the-world/'
},
{
'title': 'Woodstock',
'description': 'In Woodstock hat sich dem Mythos nach vor genau vierzig Jahren das Lebensgefühl …'
},
{
'title': 'Ein neues Festival auf dem Gurten und ich bin dabei!',
'description': 'Endlich war es soweit. Zum ersten Mal fand am 2. und 3. Juli 1977 das 1. Internationale …'
},
{
'title': 'Das Festival',
'description': 'www.meinblog.ch'
},
{
'title': '',
'description': ''
},
]
},
{
'title': 'Erfahrungen Lehrbeginn',
'appearance': 'green',
# 'group': 'Klasse 3b - 2018/2019'
# 'entries': [1]
'entries': [
{
'title': 'Ich heisse Jan und habe am 01. August 2017 meine Ausbildung begonnen. Pünktlich zum …',
'description': ''
},
{
'title': 'Mein Lehrbeginn',
'description': 'Was war ich angespannt… und nervös. Das hat sich aber schnell gelegt.'
}
]
},
{
'title': 'Interview «Mein neues Umfeld»',
'appearance': 'brown',
# 'group': 'Hans Muster und 12 weitere Personen'
# 'entries': [1, 1, 1, 1, 1, 1]
'appearance': 'brown'
}
]
@ -67,7 +97,13 @@ class Command(BaseCommand):
UserGroupFactory(users=(random.choices(get_user_model().objects.all(), k=3)))
for room_idx, room_data in enumerate(data):
RoomFactory.create(**room_data)
room = RoomFactory.create(**self.filter_data(room_data, ['entries']))
default_room_entries = [{} for i in range(0, random.randint(5, 8))]
room_entries = room_data.get('entries', default_room_entries)
for room_entry_idx, room_entry in enumerate(room_entries):
RoomEntryFactory.create(room=room, **room_entry)
# for book_idx, book_data in enumerate(data):
# book = BookFactory.create(parent=site.root_page, **self.filter_data(book_data, 'topics'))

View File

@ -1,9 +1,15 @@
from django.contrib import admin
from rooms.models import Room
from rooms.models import Room, RoomEntry
@admin.register(Room)
class RoomAdmin(admin.ModelAdmin):
list_display = ('id', 'title', 'user_group', 'appearance')
list_filter = ('user_group', 'appearance',)
list_display = ('id', 'slug', 'title', 'user_group', 'appearance')
list_filter = ('user_group', 'appearance')
@admin.register(RoomEntry)
class RoomEntryAdmin(admin.ModelAdmin):
list_display = ('id', 'slug', 'title', 'room', 'author')
list_filter = ('room', 'author')

View File

@ -1,9 +1,10 @@
import random
import factory
from django.contrib.auth import get_user_model
from core.factories import fake
from rooms.models import Room
from rooms.models import Room, RoomEntry
from user.models import UserGroup
@ -14,3 +15,12 @@ class RoomFactory(factory.django.DjangoModelFactory):
title = factory.LazyAttribute(lambda x: fake.sentence(nb_words=random.randint(4, 8)))
user_group = factory.Iterator(UserGroup.objects.all())
appearance = factory.LazyAttribute(lambda x: random.choice(['red', 'green', 'brown']))
class RoomEntryFactory(factory.django.DjangoModelFactory):
class Meta:
model = RoomEntry
title = factory.LazyAttribute(lambda x: fake.sentence(nb_words=random.randint(8, 12)))
description = factory.LazyAttribute(lambda x: fake.sentence(nb_words=random.randint(20, 30)))
author = factory.Iterator(get_user_model().objects.all())

View File

@ -0,0 +1,31 @@
# Generated by Django 2.0.6 on 2018-08-23 13:25
from django.conf import settings
from django.db import migrations, models
import django.db.models.deletion
import django_extensions.db.fields
class Migration(migrations.Migration):
dependencies = [
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
('rooms', '0002_room_user_group'),
]
operations = [
migrations.CreateModel(
name='RoomEntry',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('title', models.CharField(max_length=255, verbose_name='title')),
('description', models.TextField(blank=True, null=True, verbose_name='description')),
('slug', django_extensions.db.fields.AutoSlugField(blank=True, editable=False, populate_from='title', verbose_name='slug')),
('author', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)),
('room', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='rooms.Room')),
],
options={
'abstract': False,
},
),
]

View File

@ -0,0 +1,17 @@
# Generated by Django 2.0.6 on 2018-08-23 13:36
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('rooms', '0003_roomentry'),
]
operations = [
migrations.AlterModelOptions(
name='roomentry',
options={'verbose_name': 'Raumeintrag', 'verbose_name_plural': 'Raumeinträge'},
),
]

View File

@ -1,3 +1,4 @@
from django.contrib.auth import get_user_model
from django.db import models
from django_extensions.db.models import TitleDescriptionModel, TitleSlugDescriptionModel
@ -14,3 +15,15 @@ class Room(TitleSlugDescriptionModel):
def __str__(self):
return 'Room {}-{}-{}'.format(self.id, self.title, self.user_group)
class RoomEntry(TitleSlugDescriptionModel):
class Meta:
verbose_name = 'Raumeintrag'
verbose_name_plural = 'Raumeinträge'
room = models.ForeignKey(Room, blank=False, null=False, on_delete=models.CASCADE)
author = models.ForeignKey(get_user_model(), null=True, on_delete=models.CASCADE)
def __str__(self):
return 'RoomEntry {}-{}-{}'.format(self.id, self.title, self.author)

View File

@ -3,13 +3,27 @@ from graphene import relay
from graphene_django import DjangoObjectType
from graphene_django.filter import DjangoFilterConnectionField
from rooms.models import Room
from user.schema import UserGroupNode
from rooms.models import Room, RoomEntry
from user.schema import UserGroupNode, UserNode
class RoomEntryNode(DjangoObjectType):
pk = graphene.Int()
author = UserNode()
class Meta:
model = RoomEntry
filter_fields = ['slug']
interfaces = (relay.Node,)
def resolve_pk(self, *args, **kwargs):
return self.id
class RoomType(DjangoObjectType):
pk = graphene.Int()
userGroup = UserGroupNode()
user_group = UserGroupNode()
room_entries = DjangoFilterConnectionField(RoomEntryNode)
class Meta:
model = Room
@ -26,6 +40,8 @@ class RoomsQuery(object):
id=graphene.Int(),
appearance=graphene.String())
all_rooms = DjangoFilterConnectionField(RoomType)
all_room_entries = DjangoFilterConnectionField(RoomEntryNode)
room_entry = relay.Node.Field(RoomEntryNode)
def resolve_room(self, info, **kwargs):
slug = kwargs.get('slug')

View File

@ -3,16 +3,28 @@ from graphene import relay
from graphene_django import DjangoObjectType
from graphene_django.filter import DjangoFilterConnectionField
from rooms.models import Room
from user.models import UserGroup
from user.models import UserGroup, User
class UserGroupNode(DjangoObjectType):
class UserNode(DjangoObjectType):
pk = graphene.Int()
class Meta:
model = UserGroup
filter_fields = ['pk', 'name']
model = User
filter_fields = ['username', 'email']
interfaces = (relay.Node,)
def resolve_pk(self, *args, **kwargs):
return self.id
class UserGroupNode(DjangoObjectType):
pk = graphene.Int()
users = DjangoFilterConnectionField(UserNode)
class Meta:
model = UserGroup
filter_fields = ['name']
interfaces = (relay.Node,)
def resolve_pk(self, *args, **kwargs):