私は投票アプリケーションのグラフ環境があり、ユーザー、投票、投票があります。 私は、スキーマ内の私の主な質問に、私のアプリケーションのすべての投票のための質問(制限するなどのオプションがあります...)、私はまた、各ユーザーの投票フィールドを持って、私は一般的にすべての投票が自分のビジネスロジックを使ってソートすることができます(例えば、大多数の投票、最近の投票など...)。投票の各フィールドごとにソートロジックを定義しないでください。 これはどのように行うことができますか?GraphQLカスタムタイプの並べ替え
これは私のコードです。私は現在、私が必要とするスキーマをテストして理解するためにモックデータベースを使用しています。今はGQLへ。
userType = new GraphQLObjectType({
name: 'User',
description: 'Registered user',
fields: (() => ({
id: {
type: new GraphQLNonNull(GraphQLID)
},
email: {
type: GraphQLString
},
password: {
type: GraphQLString
},
username: {
type: GraphQLString
},
polls: { // this should be sortable
type: new GraphQLList(pollType),
resolve: user => db.getUserPolls(user.id)
},
votes: {
type: new GraphQLList(voteType),
resolve: user => db.getUserVotes(user.id)
}
})),
resolve: id => db.getUsers()[id]
});
pollType = new GraphQLObjectType({
name: 'Poll',
description: 'Poll which can be voted by registered users',
fields:() => ({
id: {
type: new GraphQLNonNull(GraphQLID)
},
title: {
type: GraphQLString
},
options: {
type: new GraphQLList(GraphQLString),
},
votes: {
type: new GraphQLList(voteType),
resolve: poll => db.getPollVotes(poll.id)
},
author: {
type: userType,
resolve: poll => db.getPollAuthor(poll.id)
},
timestamp: {
type: GraphQLDate
}
})
});
voteType = new GraphQLObjectType({
name: 'Vote',
description: 'User vote on a poll',
fields:() => ({
id: {
type: new GraphQLNonNull(GraphQLID)
},
user: {
type: userType,
resolve: vote => db.getVoteUser(vote.id)
},
poll: {
type: pollType,
resolve: vote => db.getVotePoll(vote.id)
},
vote: {
type: GraphQLInt
},
timestamp: {
type: GraphQLDate
}
})
});
let schema = new GraphQLSchema({
query: new GraphQLObjectType({
name: 'Query',
fields:() => ({
user: {
type: userType,
args: {
id: {
type: new GraphQLNonNull(GraphQLID)
}
},
resolve: (root, {id}) => db.getUsers()[id]
},
polls: { //this should also be sorted
type: new GraphQLList(pollType),
resolve:() => db.getPolls()
},
votes: {
type: new GraphQLList(voteType),
resolve:() => db.getVotes()
}
})
})
});