11import { GraphQLList , GraphQLInt , GraphQLBoolean , GraphQLString } from 'graphql' ;
2- import Resolver , { Entity } from './resolver' ;
2+ import Resolver , { Entity , AllOptions } from './resolver' ;
33import dotenv from 'dotenv' ;
44
55dotenv . config ( ) ;
66
77type GraphQLCompositeType = unknown ; // from local graphql shim, keep minimal
88
9- type ResolveArgs = {
10- id ?: number ;
9+ type ResolveByIdArgs = {
10+ id : number ;
11+ page ?: never ;
12+ limit ?: never ;
13+ offset ?: never ;
14+ all ?: never ;
15+ order ?: never ;
16+ } ;
17+
18+ type ResolveListArgs = {
19+ id ?: undefined ;
1120 page ?: number ;
1221 limit ?: number ;
1322 offset ?: number ;
1423 all ?: boolean ;
1524 order ?: string ;
1625} ;
1726
18- const buildQuery = ( name : string , type : GraphQLCompositeType , model : Entity ) => {
19- const resolver = new Resolver ( model ) ;
27+ type ResolveArgs = ResolveByIdArgs | ResolveListArgs ;
28+
29+ const buildQuery = < T extends Record < string , unknown > > (
30+ name : string ,
31+ type : GraphQLCompositeType ,
32+ model : Entity < T > ,
33+ ) => {
34+ const resolver = new Resolver < T > ( model ) ;
2035 return {
2136 [ name ] : {
2237 type : new GraphQLList ( type as unknown ) ,
@@ -28,23 +43,23 @@ const buildQuery = (name: string, type: GraphQLCompositeType, model: Entity) =>
2843 all : { type : GraphQLBoolean } ,
2944 order : { type : GraphQLString } ,
3045 } ,
31- resolve : ( _value : unknown , { id , page , limit , offset , all , order } : ResolveArgs ) => {
32- return ( ( ) => {
33- if ( id ) {
34- return [ resolver . find ( id ) ] ;
35- } else {
36- const settings =
37- limit || page || offset || order
38- ? {
39- currentPage : page ? page : 0 ,
40- limit : limit ? limit : Number ( process . env . APP_PERPAGE ) ,
41- offset : offset ? offset : 0 ,
42- order : order ? order : '' ,
43- }
44- : { all } ;
45- return resolver . all ( settings ) ;
46- }
47- } ) ( ) ;
46+ resolve : (
47+ _value : unknown ,
48+ { id , page , limit , offset , all , order } : ResolveArgs ,
49+ ) : Promise < T [ ] > | Array < Promise < T | null > > => {
50+ if ( id !== undefined ) {
51+ return [ resolver . find ( id ) ] ;
52+ }
53+ const settings : AllOptions =
54+ limit || page || offset || order
55+ ? {
56+ currentPage : page ? page : 0 ,
57+ limit : limit ? limit : Number ( process . env . APP_PERPAGE ) ,
58+ offset : offset ? offset : 0 ,
59+ order : order ? order : '' ,
60+ }
61+ : { all } ;
62+ return resolver . all ( settings ) ;
4863 } ,
4964 } ,
5065 } as Record < string , unknown > ;
0 commit comments