diff --git a/client/src/components/FilterBar.vue b/client/src/components/FilterBar.vue index c303dd4e..38655e72 100644 --- a/client/src/components/FilterBar.vue +++ b/client/src/components/FilterBar.vue @@ -2,18 +2,37 @@
diff --git a/client/src/graphql/gql/userGroupsQuery.gql b/client/src/graphql/gql/userGroupsQuery.gql new file mode 100644 index 00000000..1e3356be --- /dev/null +++ b/client/src/graphql/gql/userGroupsQuery.gql @@ -0,0 +1,12 @@ +query UserGroupsQuery { + userGroups { + edges { + node { + id + name + year + isDeleted + } + } + } +} diff --git a/client/src/pages/module.vue b/client/src/pages/module.vue index aed06fc7..fc2389b5 100644 --- a/client/src/pages/module.vue +++ b/client/src/pages/module.vue @@ -53,7 +53,6 @@ } }, - // TODO: can we do better by defining a type for module? data() { return { module: { diff --git a/server/api/schema.py b/server/api/schema.py index f069301f..0575a845 100644 --- a/server/api/schema.py +++ b/server/api/schema.py @@ -6,14 +6,14 @@ from graphene_django.debug import DjangoDebug # Keep this import exactly here, it's necessary for StreamField conversion from api import graphene_wagtail - from book.schema.mutations import BookMutations from filteredbook.schema import BookQuery from objectives.schema import ObjectivesQuery from rooms.schema import RoomsQuery +from user.schema import UsersQuery -class Query(RoomsQuery, ObjectivesQuery, BookQuery, graphene.ObjectType): +class Query(UsersQuery, RoomsQuery, ObjectivesQuery, BookQuery, graphene.ObjectType): node = relay.Node.Field() if settings.DEBUG: diff --git a/server/filteredbook/migrations/0003_auto_20180911_1501.py b/server/filteredbook/migrations/0003_auto_20180911_1501.py new file mode 100644 index 00000000..203c4fa4 --- /dev/null +++ b/server/filteredbook/migrations/0003_auto_20180911_1501.py @@ -0,0 +1,19 @@ +# Generated by Django 2.0.6 on 2018-09-11 15:01 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('filteredbook', '0002_visibility_user_group'), + ] + + operations = [ + migrations.AlterField( + model_name='visibility', + name='content_block', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='visible_to', to='book.ContentBlock'), + ), + ] diff --git a/server/filteredbook/models.py b/server/filteredbook/models.py index f35ffb01..13a82d0a 100644 --- a/server/filteredbook/models.py +++ b/server/filteredbook/models.py @@ -10,7 +10,7 @@ class Visibility(models.Model): verbose_name_plural = 'Visibilities' user_group = models.ForeignKey(UserGroup, blank=False, null=False, on_delete=models.CASCADE) - content_block = models.ForeignKey(ContentBlock, blank=False, null=False, on_delete=models.CASCADE) + content_block = models.ForeignKey(ContentBlock, blank=False, null=False, on_delete=models.CASCADE, related_name='visible_to') def __str__(self): return 'Visibility {}-{}'.format(self.user_group, self.content_block) diff --git a/server/filteredbook/schema.py b/server/filteredbook/schema.py index 12892c69..ae3417a9 100644 --- a/server/filteredbook/schema.py +++ b/server/filteredbook/schema.py @@ -39,6 +39,13 @@ class FilteredChapterNode(DjangoObjectType): return ContentBlock.get_by_parent(self) +class VisibilityNode(DjangoObjectType): + class Meta: + model = Chapter + filter_fields = ['user_group', 'content_block'] + interfaces = (relay.Node,) + + class BookQuery(object): book = relay.Node.Field(BookNode) topic = relay.Node.Field(TopicNode) diff --git a/server/user/schema.py b/server/user/schema.py index 30e7bc94..9f2639de 100644 --- a/server/user/schema.py +++ b/server/user/schema.py @@ -1,6 +1,7 @@ import graphene from graphene import relay from graphene_django import DjangoObjectType +from graphene_django.filter import DjangoFilterConnectionField from user.models import UserGroup, User @@ -27,3 +28,9 @@ class UserGroupNode(DjangoObjectType): def resolve_pk(self, *args, **kwargs): return self.id + + +class UsersQuery(object): + user_group = relay.Node.Field(UserGroupNode) + + user_groups = DjangoFilterConnectionField(UserGroupNode)