@@ -15,79 +15,68 @@ import { isRelationshipField } from '../../relationships';
1515 *
1616 * {
1717 * posts: [
18- * { id: 1, title: 'foo ', user_id: 123 }
18+ * { id: 1, title: 'Hello, world ', user_id: 123 }
1919 * ],
2020 * users: [
2121 * { id: 123, name: 'John Doe' }
2222 * ]
23+ * comments: [
24+ * { id: 4646, post_id: 1, body: 'Nice post!' }
25+ * ]
2326 * }
2427 *
25- * There is one relationship field here, posts.user_id.
26- * The generated GraphQL schema is:
28+ * There are two relationship fields here, posts.user_id and comments.post_id .
29+ * The generated GraphQL schema for posts is:
2730 *
2831 * type Post {
2932 * id: ID!
3033 * title: String
3134 * user_id: ID
3235 * User: User
33- * }
34- * type User {
35- * id: ID!
36- * name: String
37- * Posts: [Post]
36+ * Comments: [Comment]
3837 * }
3938 *
40- * This method generates resolvers for Post.User and User.Posts
39+ * When called for the posts entity, this method generates resolvers
40+ * for Post.User and Post.Comments
4141 *
42- * @param {String } key The entity key in the data map, e.g. "posts"
42+ * @param {String } entityName The entity key in the data map, e.g. "posts"
4343 * @param {Object } data The entire data map, e.g. { posts: [], users: [] }
4444 *
4545 * @return {Object } resolvers, e.g.
4646 *
4747 * {
4848 * Post: {
49- * User: (post) => users.find(user => user.id == post.user_id)
49+ * User: (post) => users.find(user => user.id == post.user_id),
50+ * Comments: (post) => comments.filter(comment => comment.post_id = post.id),
5051 * },
5152 * }
52- *
53- * when called with the "posts" key, and
54- *
55- * {
56- * User: {
57- * Posts: (user) => posts.filter(post => post.user_id == user.id)
58- * }
59- * }
60- *
61- * when called with the "users" key
6253 */
63- export default ( key , data ) => {
64- const manyToOneResolvers = Object . keys ( getFieldsFromEntities ( data [ key ] ) )
65- . filter ( isRelationshipField )
66- . reduce (
67- ( resolvers , fieldName ) => ( {
68- ...resolvers ,
69- [ getRelatedType ( fieldName ) ] : entity =>
70- data [ getRelatedKey ( fieldName ) ] . find (
71- relatedRecord => relatedRecord . id == entity [ fieldName ] ,
72- ) ,
73- } ) ,
74- { } ,
75- ) ;
76- const relatedField = getReverseRelatedField ( key ) ; // 'posts' => 'post_id'
54+ export default ( entityName , data ) => {
55+ const entityFields = Object . keys ( getFieldsFromEntities ( data [ entityName ] ) ) ;
56+ const manyToOneResolvers = entityFields . filter ( isRelationshipField ) . reduce (
57+ ( resolvers , fieldName ) => ( {
58+ ...resolvers ,
59+ [ getRelatedType ( fieldName ) ] : entity =>
60+ data [ getRelatedKey ( fieldName ) ] . find (
61+ relatedRecord => relatedRecord . id == entity [ fieldName ] ,
62+ ) ,
63+ } ) ,
64+ { } ,
65+ ) ;
66+ const relatedField = getReverseRelatedField ( entityName ) ; // 'posts' => 'post_id'
7767 const hasReverseRelationship = entityName =>
7868 getFieldsFromEntities ( data [ entityName ] ) . hasOwnProperty ( relatedField ) ;
79- const oneToManyResolvers = Object . keys ( data )
80- . filter ( hasReverseRelationship )
81- . reduce (
82- ( resolvers , entityName ) => ( {
83- ...resolvers ,
84- [ getRelationshipFromKey ( entityName ) ] : entity =>
85- data [ entityName ] . filter (
86- record => record [ relatedField ] == entity . id ,
87- ) ,
88- } ) ,
89- { } ,
90- ) ;
69+ const entities = Object . keys ( data ) ;
70+ const oneToManyResolvers = entities . filter ( hasReverseRelationship ) . reduce (
71+ ( resolvers , entityName ) => ( {
72+ ...resolvers ,
73+ [ getRelationshipFromKey ( entityName ) ] : entity =>
74+ data [ entityName ] . filter (
75+ record => record [ relatedField ] == entity . id ,
76+ ) ,
77+ } ) ,
78+ { } ,
79+ ) ;
9180
9281 return {
9382 ...manyToOneResolvers ,
0 commit comments