From ac972c7196cc7368cdb2f4af81014a81d992dcfe Mon Sep 17 00:00:00 2001 From: Ramon Wenger Date: Tue, 13 Sep 2022 16:22:35 +0200 Subject: [PATCH] Update instrument schema --- .../migrations/0020_auto_20220908_1517.py | 2 +- .../migrations/0024_auto_20220913_1055.py | 25 +++++++++++++++++++ server/basicknowledge/models.py | 4 ++- server/basicknowledge/queries.py | 14 +++++++++++ server/schema.graphql | 2 ++ 5 files changed, 45 insertions(+), 2 deletions(-) create mode 100644 server/basicknowledge/migrations/0024_auto_20220913_1055.py diff --git a/server/basicknowledge/migrations/0020_auto_20220908_1517.py b/server/basicknowledge/migrations/0020_auto_20220908_1517.py index 17a113fc..f61d0ebc 100644 --- a/server/basicknowledge/migrations/0020_auto_20220908_1517.py +++ b/server/basicknowledge/migrations/0020_auto_20220908_1517.py @@ -9,7 +9,7 @@ INTERDISCIPLINARY = 'interdisciplinary' CATEGORY_CHOICES = ( (LANGUAGE_COMMUNICATION, '#DAA009', '#FFF5D9', 'Sprache & Kommunikation'), (SOCIETY, '#0F7CAC', '#DBEEF6', 'Gesellschaft'), - (INTERDISCIPLINARY, '#99B53E', '#F3F9E3', 'Überfachliches Instrument'), + (INTERDISCIPLINARY, '#99B53E', '#F3F9E3', 'Überfachliche Instrumente'), ) def create_categories(apps, schema_editor): diff --git a/server/basicknowledge/migrations/0024_auto_20220913_1055.py b/server/basicknowledge/migrations/0024_auto_20220913_1055.py new file mode 100644 index 00000000..fdb1b91e --- /dev/null +++ b/server/basicknowledge/migrations/0024_auto_20220913_1055.py @@ -0,0 +1,25 @@ +# Generated by Django 3.2.13 on 2022-09-13 10:55 + +import basicknowledge.models +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('basicknowledge', '0023_alter_instrumenttype_category'), + ] + + operations = [ + migrations.AlterField( + model_name='basicknowledge', + name='old_type', + field=models.CharField(blank=True, choices=[('language_communication', 'Sprache & Kommunikation'), ('society', 'Gesellschaft'), ('interdisciplinary', 'Überfachliche Instrumente')], max_length=100), + ), + migrations.AlterField( + model_name='instrumenttype', + name='category', + field=models.ForeignKey(default=basicknowledge.models.default_category, on_delete=django.db.models.deletion.PROTECT, related_name='instrument_types', to='basicknowledge.instrumentcategory'), + ), + ] diff --git a/server/basicknowledge/models.py b/server/basicknowledge/models.py index 94ca1684..04c6f973 100644 --- a/server/basicknowledge/models.py +++ b/server/basicknowledge/models.py @@ -33,6 +33,7 @@ class InstrumentCategory(models.Model): def default_category(): return InstrumentCategory.objects.first().pk + class InstrumentType(models.Model): CATEGORY_CHOICES = ( (LANGUAGE_COMMUNICATION, LANGUAGE_COMMUNICATION_LABEL), @@ -45,7 +46,8 @@ class InstrumentType(models.Model): InstrumentCategory, on_delete=models.PROTECT, null=False, - default=default_category + default=default_category, + related_name='instrument_types' ) @property diff --git a/server/basicknowledge/queries.py b/server/basicknowledge/queries.py index 7efe2e59..1d592a6b 100644 --- a/server/basicknowledge/queries.py +++ b/server/basicknowledge/queries.py @@ -8,19 +8,29 @@ from notes.models import InstrumentBookmark from notes.schema import InstrumentBookmarkNode from .models import BasicKnowledge, InstrumentCategory, InstrumentType + class InstrumentCategoryNode(DjangoObjectType): + types = graphene.List('basicknowledge.queries.InstrumentTypeNode') + class Meta: model = InstrumentCategory + interfaces = (relay.Node,) only_fields = [ 'name', 'foreground', 'background', 'id' ] + @staticmethod + def resolve_types(root: InstrumentCategory, info, **kwargs): + return root.instrument_types.filter(instruments__isnull=False).order_by('name').distinct() + + class InstrumentTypeNode(DjangoObjectType): type = graphene.String(required=True) category = graphene.Field(InstrumentCategoryNode) class Meta: model = InstrumentType + interfaces = (relay.Node,) only_fields = [ 'name', 'category', 'type', 'id' ] @@ -58,6 +68,7 @@ class InstrumentQuery(object): instrument = graphene.Field(InstrumentNode, slug=graphene.String(), id=graphene.ID()) instruments = graphene.List(InstrumentNode) instrument_types = graphene.List(InstrumentTypeNode) + instrument_categories = graphene.List(InstrumentCategoryNode) def resolve_instrument(self, info, **kwargs): slug = kwargs.get('slug') @@ -74,3 +85,6 @@ class InstrumentQuery(object): def resolve_instrument_types(self, info, **kwargs): return InstrumentType.objects.filter(instruments__isnull=False).order_by('name').distinct() + + def resolve_instrument_categories(self, info, **kwargs): + return InstrumentCategory.objects.all() diff --git a/server/schema.graphql b/server/schema.graphql index 46a1ba41..cd8c68d8 100644 --- a/server/schema.graphql +++ b/server/schema.graphql @@ -516,6 +516,7 @@ type InstrumentCategoryNode { name: String! background: String! foreground: String! + types: [InstrumentTypeNode] } type InstrumentNode implements Node { @@ -875,6 +876,7 @@ type Query { instrument(slug: String, id: ID): InstrumentNode instruments: [InstrumentNode] instrumentTypes: [InstrumentTypeNode] + instrumentCategories: [InstrumentCategoryNode] studentSubmission(id: ID!): StudentSubmissionNode assignment(id: ID!): AssignmentNode assignments: [AssignmentNode]