diff --git a/server/basicknowledge/queries.py b/server/basicknowledge/queries.py index 14360489..cf4a9127 100644 --- a/server/basicknowledge/queries.py +++ b/server/basicknowledge/queries.py @@ -4,10 +4,14 @@ from graphene_django import DjangoObjectType from graphene_django.filter import DjangoFilterConnectionField from api.utils import get_object +from notes.models import InstrumentBookmark +from notes.schema import InstrumentBookmarkNode from .models import BasicKnowledge -class BasicKnowledgeNode(DjangoObjectType): +class InstrumentNode(DjangoObjectType): + bookmarks = graphene.List(InstrumentBookmarkNode) + class Meta: model = BasicKnowledge filter_fields = ['slug', 'type'] @@ -16,10 +20,16 @@ class BasicKnowledgeNode(DjangoObjectType): 'slug', 'title', 'type', 'contents', ] + def resolve_bookmarks(self, info, **kwargs): + return InstrumentBookmark.objects.filter( + user=info.context.user, + instrument=self + ) + class BasicKnowledgeQuery(object): - instrument = graphene.Field(BasicKnowledgeNode, slug=graphene.String(), id=graphene.ID()) - instruments = DjangoFilterConnectionField(BasicKnowledgeNode) + instrument = graphene.Field(InstrumentNode, slug=graphene.String(), id=graphene.ID()) + instruments = DjangoFilterConnectionField(InstrumentNode) def resolve_instrument(self, info, **kwargs): slug = kwargs.get('slug') diff --git a/server/notes/migrations/0003_instrumentbookmark.py b/server/notes/migrations/0003_instrumentbookmark.py new file mode 100644 index 00000000..9f566040 --- /dev/null +++ b/server/notes/migrations/0003_instrumentbookmark.py @@ -0,0 +1,30 @@ +# Generated by Django 2.0.6 on 2020-01-08 12:54 + +from django.conf import settings +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ('basicknowledge', '0004_auto_20191128_1601'), + ('notes', '0002_chapterbookmark_modulebookmark'), + ] + + operations = [ + migrations.CreateModel( + name='InstrumentBookmark', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('uuid', models.UUIDField(unique=True)), + ('instrument', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='basicknowledge.BasicKnowledge')), + ('note', models.OneToOneField(null=True, on_delete=django.db.models.deletion.SET_NULL, to='notes.Note')), + ('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)), + ], + options={ + 'abstract': False, + }, + ), + ] diff --git a/server/notes/models.py b/server/notes/models.py index 72eea13e..1d7794ed 100644 --- a/server/notes/models.py +++ b/server/notes/models.py @@ -28,3 +28,7 @@ class ModuleBookmark(Bookmark): class ChapterBookmark(Bookmark): chapter = models.ForeignKey('books.Chapter', on_delete=models.CASCADE) + +class InstrumentBookmark(Bookmark): + uuid = models.UUIDField(unique=True) + instrument = models.ForeignKey('basicknowledge.BasicKnowledge', on_delete=models.CASCADE) diff --git a/server/notes/schema.py b/server/notes/schema.py index 818d44e7..7ff958cb 100644 --- a/server/notes/schema.py +++ b/server/notes/schema.py @@ -2,7 +2,7 @@ import graphene from graphene import relay from graphene_django import DjangoObjectType -from notes.models import Note, ContentBlockBookmark, ModuleBookmark, ChapterBookmark +from notes.models import Note, ContentBlockBookmark, ModuleBookmark, ChapterBookmark, InstrumentBookmark class NoteNode(DjangoObjectType): @@ -17,7 +17,6 @@ class NoteNode(DjangoObjectType): class ContentBlockBookmarkNode(DjangoObjectType): - # note = graphene. uuid = graphene.UUID() note = graphene.Field(NoteNode) @@ -41,3 +40,13 @@ class ChapterBookmarkNode(DjangoObjectType): model = ChapterBookmark filter_fields = [] interfaces = (relay.Node,) + + +class InstrumentBookmarkNode(DjangoObjectType): + uuid = graphene.UUID() + note = graphene.Field(NoteNode) + + class Meta: + model = InstrumentBookmark + filter_fields = [] + interfaces = (relay.Node,)