2016-06-20 2 views
1

私は投票アプリケーションのグラフ環境があり、ユーザー、投票、投票があります。 私は、スキーマ内の私の主な質問に、私のアプリケーションのすべての投票のための質問(制限するなどのオプションがあります...)、私はまた、各ユーザーの投票フィールドを持って、私は一般的にすべての投票が自分のビジネスロジックを使ってソートすることができます(例えば、大多数の投票、最近の投票など...)。投票の各フィールドごとにソートロジックを定義しないでください。 これはどのように行うことができますか?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() 
     } 
    }) 
    }) 
}); 

答えて

0

あなたが入力フィールドとしてするカスタムのソートフィールドを持つソート可能なタイプを作成してみてください、そして、あなたのポールタイプがソート可能なインタフェースを実装するリストで持つことができます。

関連する問題