Skip to content
Permalink
Branch: master
Find file Copy path
Find file Copy path
3 contributors

Users who have contributed to this file

@mongkok @jonatasbaldin @plasx
107 lines (77 sloc) 2.34 KB
from django.db.models import Q
import graphene
from graphene_django import DjangoObjectType
from graphql import GraphQLError
from users.schema import UserType
from .models import Link, Vote
class LinkType(DjangoObjectType):
class Meta:
model = Link
class VoteType(DjangoObjectType):
class Meta:
model = Vote
class Query(graphene.ObjectType):
links = graphene.List(
LinkType,
search=graphene.String(),
first=graphene.Int(),
skip=graphene.Int(),
)
votes = graphene.List(VoteType)
def resolve_links(self, info, search=None, first=None, skip=None, **kwargs):
qs = Link.objects.all()
if search:
filter = (
Q(url__icontains=search) |
Q(description__icontains=search)
)
qs = qs.filter(filter)
if skip:
qs = qs[skip::]
if first:
qs = qs[:first]
return qs
def resolve_votes(self, info, **kwargs):
return Vote.objects.all()
class CreateLink(graphene.Mutation):
id = graphene.Int()
url = graphene.String()
description = graphene.String()
posted_by = graphene.Field(UserType)
class Arguments:
url = graphene.String()
description = graphene.String()
def mutate(self, info, url, description):
user = info.context.user
link = Link(
url=url,
description=description,
posted_by=user,
)
link.save()
return CreateLink(
id=link.id,
url=link.url,
description=link.description,
posted_by=link.posted_by,
)
class CreateVote(graphene.Mutation):
user = graphene.Field(UserType)
link = graphene.Field(LinkType)
class Arguments:
link_id = graphene.Int()
def mutate(self, info, link_id):
user = info.context.user
if user.is_anonymous:
raise GraphQLError('You must be logged in to vote!')
link = Link.objects.filter(id=link_id).first()
if not link:
raise Exception('Invalid Link!')
Vote.objects.create(
user=user,
link=link,
)
return CreateVote(user=user, link=link)
class Mutation(graphene.ObjectType):
create_link = CreateLink.Field()
create_vote = CreateVote.Field()
You can’t perform that action at this time.