44import { convertModelToGraphQL } from './fieldsConverter' ;
55import { TypeComposer , InputTypeComposer } from 'graphql-compose' ;
66import * as resolvers from './resolvers' ;
7+ import composeWithConnection from 'graphql-compose-connection' ;
8+ import { OPERATORS_FIELDNAME } from './resolvers/helpers/filter' ;
79
810import type {
911 MongooseModelT ,
@@ -13,7 +15,7 @@ import type {
1315} from './definition' ;
1416
1517
16- export function mongooseModelToTypeComposer (
18+ export function composeWithMongoose (
1719 model : MongooseModelT ,
1820 opts : typeConverterOpts = { }
1921) : TypeComposer {
@@ -111,12 +113,55 @@ export function createResolvers(
111113 names . forEach ( resolverName => {
112114 if ( ! opts . hasOwnProperty ( resolverName ) || opts [ resolverName ] !== false ) {
113115 const createResolverFn = resolvers [ resolverName ] ;
114- const resolver = createResolverFn (
115- model ,
116- typeComposer ,
117- opts [ resolverName ] || { }
118- ) ;
119- typeComposer . setResolver ( resolver ) ;
116+ if ( createResolverFn ) {
117+ const resolver = createResolverFn (
118+ model ,
119+ typeComposer ,
120+ opts [ resolverName ] || { }
121+ ) ;
122+ typeComposer . setResolver ( resolver ) ;
123+ }
120124 }
121125 } ) ;
126+
127+ if ( ! opts . hasOwnProperty ( 'connection' ) || opts [ 'connection' ] !== false ) {
128+ prepareConnectionResolver ( typeComposer , opts [ 'connection' ] ) ;
129+ }
130+ }
131+
132+ export function prepareConnectionResolver ( typeComposer : TypeComposer , opts ) {
133+ composeWithConnection ( typeComposer , {
134+ findResolverName : 'findMany' ,
135+ countResolverName : 'count' ,
136+ sort : {
137+ _ID_DESC : {
138+ uniqueFields : [ '_id' ] ,
139+ sortValue : { _id : - 1 } ,
140+ directionFilter : ( cursorData , filter , isBefore ) => {
141+ filter [ OPERATORS_FIELDNAME ] = filter [ OPERATORS_FIELDNAME ] || { } ;
142+ filter [ OPERATORS_FIELDNAME ] . _id = filter [ OPERATORS_FIELDNAME ] . _id || { } ;
143+ if ( isBefore ) {
144+ filter [ OPERATORS_FIELDNAME ] . _id . gt = cursorData . _id ;
145+ } else {
146+ filter [ OPERATORS_FIELDNAME ] . _id . lt = cursorData . _id ;
147+ }
148+ return filter ;
149+ } ,
150+ } ,
151+ _ID_ASC : {
152+ uniqueFields : [ '_id' ] ,
153+ sortValue : { _id : 1 } ,
154+ directionFilter : ( cursorData , filter , isBefore ) => {
155+ filter [ OPERATORS_FIELDNAME ] = filter [ OPERATORS_FIELDNAME ] || { } ;
156+ filter [ OPERATORS_FIELDNAME ] . _id = filter [ OPERATORS_FIELDNAME ] . _id || { } ;
157+ if ( isBefore ) {
158+ filter [ OPERATORS_FIELDNAME ] . _id . lt = cursorData . _id ;
159+ } else {
160+ filter [ OPERATORS_FIELDNAME ] . _id . gt = cursorData . _id ;
161+ }
162+ return filter ;
163+ } ,
164+ }
165+ } ,
166+ } )
122167}
0 commit comments