Merge branch 'master' of github.com:ramonwenger/skillbox
This commit is contained in:
commit
f583c6c8cc
|
|
@ -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
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -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
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -39,13 +39,6 @@
|
|||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
head: {
|
||||
title: 'Modules with Apollo'
|
||||
},
|
||||
|
||||
created() {
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
|
|
|||
|
|
@ -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'))
|
||||
|
|
|
|||
|
|
@ -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')
|
||||
|
|
|
|||
|
|
@ -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())
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
},
|
||||
),
|
||||
]
|
||||
|
|
@ -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'},
|
||||
),
|
||||
]
|
||||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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')
|
||||
|
|
|
|||
|
|
@ -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):
|
||||
|
|
|
|||
Loading…
Reference in New Issue