99 lines
2.2 KiB
Python
99 lines
2.2 KiB
Python
import graphene
|
|
from basicknowledge.queries import InstrumentNode
|
|
from books.schema.nodes import ContentBlockNode, ModuleNode
|
|
from books.schema.nodes.chapter import ChapterNode
|
|
from core.logger import get_logger
|
|
from graphene import relay
|
|
from graphene_django import DjangoObjectType
|
|
from notes.models import (
|
|
ChapterBookmark,
|
|
ContentBlockBookmark,
|
|
Highlight,
|
|
InstrumentBookmark,
|
|
ModuleBookmark,
|
|
Note,
|
|
)
|
|
|
|
logger = get_logger(__name__)
|
|
|
|
|
|
class NoteNode(DjangoObjectType):
|
|
pk = graphene.Int()
|
|
|
|
class Meta:
|
|
model = Note
|
|
fields = "__all__"
|
|
interfaces = (relay.Node,)
|
|
|
|
def resolve_pk(self, *args, **kwargs):
|
|
return self.id
|
|
|
|
|
|
class ContentBlockBookmarkNode(DjangoObjectType):
|
|
uuid = graphene.UUID()
|
|
note = graphene.Field(NoteNode)
|
|
|
|
class Meta:
|
|
model = ContentBlockBookmark
|
|
fields = "__all__"
|
|
filter_fields = []
|
|
interfaces = (relay.Node,)
|
|
|
|
|
|
class ModuleBookmarkNode(DjangoObjectType):
|
|
note = graphene.Field(NoteNode)
|
|
|
|
class Meta:
|
|
model = ModuleBookmark
|
|
fields = "__all__"
|
|
|
|
|
|
class ChapterBookmarkNode(DjangoObjectType):
|
|
note = graphene.Field(NoteNode)
|
|
|
|
class Meta:
|
|
model = ChapterBookmark
|
|
fields = "__all__"
|
|
filter_fields = []
|
|
interfaces = (relay.Node,)
|
|
|
|
|
|
class InstrumentBookmarkNode(DjangoObjectType):
|
|
uuid = graphene.UUID()
|
|
note = graphene.Field(NoteNode)
|
|
|
|
class Meta:
|
|
model = InstrumentBookmark
|
|
fields = "__all__"
|
|
filter_fields = []
|
|
interfaces = (relay.Node,)
|
|
|
|
|
|
class BookmarkNode(graphene.Union):
|
|
class Meta:
|
|
types = (
|
|
ContentBlockBookmarkNode,
|
|
ModuleBookmarkNode,
|
|
ChapterBookmarkNode,
|
|
InstrumentBookmarkNode,
|
|
)
|
|
|
|
|
|
class HighlightableNode(graphene.Union):
|
|
class Meta:
|
|
types = (ContentBlockNode, InstrumentNode, ModuleNode, ChapterNode)
|
|
|
|
|
|
class HighlightNode(DjangoObjectType):
|
|
page = graphene.Field(HighlightableNode)
|
|
|
|
class Meta:
|
|
model = Highlight
|
|
fields = "__all__"
|
|
filter_fields = []
|
|
interfaces = (relay.Node,)
|
|
|
|
@staticmethod
|
|
def resolve_page(root: Highlight, *args, **kwargs):
|
|
return root.page.specific
|