Skip to content

Commit 1d2bb7a

Browse files
committed
refactor: northwind schema migrated to graphql-compose-mongoose v9 syntax
1 parent 48e55df commit 1d2bb7a

File tree

11 files changed

+265
-179
lines changed

11 files changed

+265
-179
lines changed

examples/northwind/data/seed.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
import fs from 'fs';
2+
import { Db } from 'mongodb';
23

34
const collectionPrefix = 'northwind_';
45

5-
export default async function seed(db: any) {
6+
export default async function seed(db: Db) {
67
const files = [
78
'categories',
89
'customers',

examples/northwind/models/category.ts

Lines changed: 20 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { Schema, model } from 'mongoose';
22
import { composeMongoose } from 'graphql-compose-mongoose';
3-
import { ProductTC } from './product';
3+
import { productConnectionResolver, productFindManyResolver } from './product';
44

55
export const CategorySchema: Schema<any> = new Schema(
66
{
@@ -24,29 +24,35 @@ export const Category = model<any>('Category', CategorySchema);
2424

2525
export const CategoryTC = composeMongoose(Category);
2626

27-
// TODO refactor
28-
CategoryTC.getResolver('connection').extensions = {
29-
complexity: ({ args, childComplexity }) => childComplexity * (args.first || args.last || 20),
30-
};
31-
CategoryTC.getResolver('pagination').extensions = {
32-
complexity: ({ args, childComplexity }) => childComplexity * (args.perPage || 20),
33-
};
34-
CategoryTC.getResolver('findMany').extensions = {
35-
complexity: ({ args, childComplexity }) => childComplexity * (args.limit || 1000),
36-
};
37-
3827
CategoryTC.addRelation('productConnection', {
39-
resolver: () => ProductTC.getResolver('connection'),
28+
resolver: () => productConnectionResolver,
4029
prepareArgs: {
4130
filter: (source) => ({ categoryID: source.categoryID }),
4231
},
4332
projection: { categoryID: true },
4433
});
4534

4635
CategoryTC.addRelation('productList', {
47-
resolver: () => ProductTC.getResolver('findMany'),
36+
resolver: () => productFindManyResolver,
4837
prepareArgs: {
4938
filter: (source) => ({ categoryID: source.categoryID }),
5039
},
5140
projection: { categoryID: true },
5241
});
42+
43+
export const categoryConnectionResolver = CategoryTC.mongooseResolvers.connection();
44+
categoryConnectionResolver.setExtensions({
45+
complexity: ({ args, childComplexity }) => childComplexity * (args.first || args.last || 20),
46+
});
47+
48+
export const categoryPaginationResolver = CategoryTC.mongooseResolvers.pagination();
49+
categoryPaginationResolver.setExtensions({
50+
complexity: ({ args, childComplexity }) => childComplexity * (args.perPage || 20),
51+
});
52+
53+
export const categoryFindManyResolver = CategoryTC.mongooseResolvers.findMany();
54+
categoryFindManyResolver.setExtensions({
55+
complexity: ({ args, childComplexity }) => childComplexity * (args.limit || 1000),
56+
});
57+
58+
export const categoryFindOneResolver = CategoryTC.mongooseResolvers.findOne();

examples/northwind/models/customer.ts

Lines changed: 20 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { Schema, model } from 'mongoose';
22
import { composeMongoose } from 'graphql-compose-mongoose';
33
import { AddressSchema } from './addressSchema';
4-
import { OrderTC } from './order';
4+
import { orderConnectionResolver, orderFindManyResolver } from './order';
55

66
export const CustomerSchema: Schema<any> = new Schema(
77
{
@@ -28,28 +28,35 @@ export const Customer = model<any>('Customer', CustomerSchema);
2828

2929
export const CustomerTC = composeMongoose(Customer);
3030

31-
CustomerTC.getResolver('connection').extensions = {
32-
complexity: ({ args, childComplexity }) => childComplexity * (args.first || args.last || 20),
33-
};
34-
CustomerTC.getResolver('pagination').extensions = {
35-
complexity: ({ args, childComplexity }) => childComplexity * (args.perPage || 20),
36-
};
37-
CustomerTC.getResolver('findMany').extensions = {
38-
complexity: ({ args, childComplexity }) => childComplexity * (args.limit || 1000),
39-
};
40-
4131
CustomerTC.addRelation('orderConnection', {
42-
resolver: () => OrderTC.getResolver('connection'),
32+
resolver: () => orderConnectionResolver,
4333
prepareArgs: {
4434
filter: (source) => ({ customerID: source.customerID }),
4535
},
4636
projection: { customerID: true },
4737
});
4838

4939
CustomerTC.addRelation('orderList', {
50-
resolver: () => OrderTC.getResolver('findMany'),
40+
resolver: () => orderFindManyResolver,
5141
prepareArgs: {
5242
filter: (source) => ({ customerID: source.customerID }),
5343
},
5444
projection: { customerID: true },
5545
});
46+
47+
export const customerConnectionResolver = CustomerTC.mongooseResolvers.connection();
48+
customerConnectionResolver.setExtensions({
49+
complexity: ({ args, childComplexity }) => childComplexity * (args.first || args.last || 20),
50+
});
51+
52+
export const customerPaginationResolver = CustomerTC.mongooseResolvers.pagination();
53+
customerPaginationResolver.setExtensions({
54+
complexity: ({ args, childComplexity }) => childComplexity * (args.perPage || 20),
55+
});
56+
57+
export const customerFindManyResolver = CustomerTC.mongooseResolvers.findMany();
58+
customerPaginationResolver.setExtensions({
59+
complexity: ({ args, childComplexity }) => childComplexity * (args.limit || 1000),
60+
});
61+
62+
export const customerFindOneResolver = CustomerTC.mongooseResolvers.findOne();

examples/northwind/models/employee.ts

Lines changed: 34 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { Schema, model } from 'mongoose';
22
import { composeMongoose } from 'graphql-compose-mongoose';
33
import { AddressSchema } from './addressSchema';
4-
import { OrderTC } from './order';
4+
import { orderConnectionResolver } from './order';
55

66
export const EmployeeSchema: Schema<any> = new Schema(
77
{
@@ -63,33 +63,9 @@ export const Employee = model<any>('Employee', EmployeeSchema);
6363

6464
export const EmployeeTC = composeMongoose(Employee);
6565

66-
EmployeeTC.getResolver('connection').extensions = {
67-
complexity: ({ args, childComplexity }) => childComplexity * (args.first || args.last || 20),
68-
};
69-
EmployeeTC.getResolver('pagination').extensions = {
70-
complexity: ({ args, childComplexity }) => childComplexity * (args.perPage || 20),
71-
};
72-
EmployeeTC.getResolver('findMany').extensions = {
73-
complexity: ({ childComplexity }) => childComplexity * 100,
74-
};
75-
76-
const findManyResolver = EmployeeTC.getResolver('findMany').addFilterArg({
77-
name: 'fullTextSearch',
78-
type: 'String',
79-
description: 'Fulltext search with mongodb stemming and weights',
80-
query: (query, value, resolveParams) => {
81-
resolveParams.args.sort = {
82-
score: { $meta: 'textScore' },
83-
};
84-
query.$text = { $search: value, $language: 'ru' };
85-
resolveParams.projection.score = { $meta: 'textScore' };
86-
},
87-
});
88-
EmployeeTC.setResolver('findMany', findManyResolver);
89-
9066
EmployeeTC.addRelation('chief', {
9167
resolver: () =>
92-
EmployeeTC.getResolver('findOne').wrapResolve((next) => (resolveParams) => {
68+
employeeFindOneResolver.wrapResolve((next) => (resolveParams) => {
9369
// if `reportsTo` is empty, then return null, otherwise proceed relation
9470
return resolveParams.source.reportsTo ? next(resolveParams) : null;
9571
}),
@@ -105,7 +81,7 @@ EmployeeTC.addRelation('chief', {
10581
});
10682

10783
EmployeeTC.addRelation('subordinates', {
108-
resolver: () => EmployeeTC.getResolver('findMany'),
84+
resolver: () => employeeFindManyResolver,
10985
prepareArgs: {
11086
filter: (source) => ({ reportsTo: source.employeeID }),
11187
},
@@ -116,9 +92,39 @@ EmployeeTC.addRelation('subordinates', {
11692
});
11793

11894
EmployeeTC.addRelation('orderConnection', {
119-
resolver: () => OrderTC.getResolver('connection'),
95+
resolver: () => orderConnectionResolver,
12096
prepareArgs: {
12197
filter: (source) => ({ employeeID: source.employeeID }),
12298
},
12399
projection: { employeeID: true },
124100
});
101+
102+
export const employeeConnectionResolver = EmployeeTC.mongooseResolvers.connection();
103+
employeeConnectionResolver.setExtensions({
104+
complexity: ({ args, childComplexity }) => childComplexity * (args.first || args.last || 20),
105+
});
106+
107+
export const employeePaginationResolver = EmployeeTC.mongooseResolvers.pagination();
108+
employeePaginationResolver.setExtensions({
109+
complexity: ({ args, childComplexity }) => childComplexity * (args.perPage || 20),
110+
});
111+
112+
export const employeeFindManyResolver = EmployeeTC.mongooseResolvers.findMany().addFilterArg({
113+
name: 'fullTextSearch',
114+
type: 'String',
115+
description: 'Fulltext search with mongodb stemming and weights',
116+
query: (query, value, resolveParams) => {
117+
resolveParams.args.sort = {
118+
score: { $meta: 'textScore' },
119+
};
120+
query.$text = { $search: value, $language: 'ru' };
121+
resolveParams.projection.score = { $meta: 'textScore' };
122+
},
123+
});
124+
employeeFindManyResolver.setExtensions({
125+
complexity: ({ childComplexity }) => childComplexity * 100,
126+
});
127+
128+
export const employeeFindOneResolver = EmployeeTC.mongooseResolvers.findOne();
129+
130+
export const employeeUpdateByIdResolver = EmployeeTC.mongooseResolvers.updateById();

examples/northwind/models/order.ts

Lines changed: 29 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
import { Schema, model } from 'mongoose';
22
import { composeMongoose } from 'graphql-compose-mongoose';
33
import { AddressSchema } from './addressSchema';
4-
import { CustomerTC } from './customer';
5-
import { EmployeeTC } from './employee';
6-
import { ShipperTC } from './shipper';
7-
import { ProductTC } from './product';
4+
import { customerFindOneResolver } from './customer';
5+
import { employeeFindOneResolver } from './employee';
6+
import { shipperFindOneResolver } from './shipper';
7+
import { productFindOneResolver } from './product';
88

99
export const OrderDetailsSchema: Schema<any> = new Schema(
1010
{
@@ -36,7 +36,6 @@ export const OrderSchema: Schema<any> = new Schema(
3636
shipAddress: AddressSchema,
3737
details: {
3838
type: [OrderDetailsSchema],
39-
index: true,
4039
description: 'List of ordered products',
4140
},
4241
},
@@ -49,18 +48,8 @@ export const Order = model<any>('Order', OrderSchema);
4948

5049
export const OrderTC = composeMongoose(Order);
5150

52-
OrderTC.getResolver('connection').extensions = {
53-
complexity: ({ args, childComplexity }) => childComplexity * (args.first || args.last || 20),
54-
};
55-
OrderTC.getResolver('pagination').extensions = {
56-
complexity: ({ args, childComplexity }) => childComplexity * (args.perPage || 20),
57-
};
58-
OrderTC.getResolver('findMany').extensions = {
59-
complexity: ({ args, childComplexity }) => childComplexity * (args.limit || 1000),
60-
};
61-
6251
OrderTC.addRelation('customer', {
63-
resolver: () => CustomerTC.getResolver('findOne'),
52+
resolver: () => customerFindOneResolver,
6453
prepareArgs: {
6554
filter: (source) => ({ customerID: source.customerID }),
6655
skip: null,
@@ -70,7 +59,7 @@ OrderTC.addRelation('customer', {
7059
});
7160

7261
OrderTC.addRelation('employee', {
73-
resolver: () => EmployeeTC.getResolver('findOne'),
62+
resolver: () => employeeFindOneResolver,
7463
prepareArgs: {
7564
filter: (source) => ({ employeeID: source.employeeID }),
7665
skip: null,
@@ -80,7 +69,7 @@ OrderTC.addRelation('employee', {
8069
});
8170

8271
OrderTC.addRelation('shipper', {
83-
resolver: () => ShipperTC.getResolver('findOne'),
72+
resolver: () => shipperFindOneResolver,
8473
prepareArgs: {
8574
filter: (source) => ({ shipperID: source.shipVia }),
8675
skip: null,
@@ -91,11 +80,32 @@ OrderTC.addRelation('shipper', {
9180

9281
const OrderDetailsTC = OrderTC.getFieldOTC('details');
9382
OrderDetailsTC.addRelation('product', {
94-
resolver: () => ProductTC.getResolver('findOne'),
83+
resolver: () => productFindOneResolver,
9584
prepareArgs: {
9685
filter: (source) => ({ productID: source.productID }),
9786
skip: null,
9887
sort: null,
9988
},
10089
projection: { productID: true },
10190
});
91+
92+
export const orderConnectionResolver = OrderTC.mongooseResolvers.connection();
93+
orderConnectionResolver.setExtensions({
94+
complexity: ({ args, childComplexity }) => childComplexity * (args.first || args.last || 20),
95+
});
96+
97+
export const orderPaginationResolver = OrderTC.mongooseResolvers.pagination();
98+
orderPaginationResolver.setExtensions({
99+
complexity: ({ args, childComplexity }) => childComplexity * (args.perPage || 20),
100+
});
101+
102+
export const orderFindManyResolver = OrderTC.mongooseResolvers.findMany();
103+
orderFindManyResolver.setExtensions({
104+
complexity: ({ args, childComplexity }) => childComplexity * (args.limit || 1000),
105+
});
106+
107+
export const orderFindOneResolver = OrderTC.mongooseResolvers.findOne();
108+
109+
export const orderCreateOneResolver = OrderTC.mongooseResolvers.createOne();
110+
export const orderUpdateByIdResolver = OrderTC.mongooseResolvers.updateById();
111+
export const orderRemoveOneResolver = OrderTC.mongooseResolvers.removeOne();

0 commit comments

Comments
 (0)