Skip to content

Commit 8677f35

Browse files
committed
feat(northwind): add subscription to products
1 parent 89ac2ae commit 8677f35

File tree

1 file changed

+51
-29
lines changed

1 file changed

+51
-29
lines changed

examples/northwind/schema.ts

Lines changed: 51 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@ import {
1414
customerPaginationResolver,
1515
} from './models/customer';
1616
import {
17+
EmployeeTC,
18+
Employee,
1719
employeeFindOneResolver,
1820
employeeFindManyResolver,
1921
employeePaginationResolver,
@@ -30,6 +32,8 @@ import {
3032
orderRemoveOneResolver,
3133
} from './models/order';
3234
import {
35+
ProductTC,
36+
Product,
3337
productConnectionResolver,
3438
productCreateOneResolver,
3539
productFindManyResolver,
@@ -92,39 +96,28 @@ const fields = {
9296

9397
ViewerTC.addFields(fields);
9498

99+
function emitEventMW(eventName: string) {
100+
return async (next, s, a, c, i) => {
101+
const res = await next(s, a, c, i);
102+
const _id = res?.record?._id;
103+
if (_id) pubsub.publish(eventName, _id);
104+
return res;
105+
};
106+
}
107+
95108
schemaComposer.Mutation.addFields({
96109
// ...allowOnlyForLocalhost({
97110
...autoResetDataIn30min({
98111
...addQueryToPayload({
99-
createProduct: productCreateOneResolver,
100-
updateProduct: productUpdateByIdResolver,
101-
removeProduct: productRemoveOneResolver,
102-
103-
createOrder: orderCreateOneResolver.withMiddlewares([
104-
async (next, s, a, c, i) => {
105-
const res = await next(s, a, c, i);
106-
const _id = res?.record?._id;
107-
if (_id) pubsub.publish('ORDER_CREATED', _id);
108-
return res;
109-
},
110-
]),
111-
updateOrder: orderUpdateByIdResolver.withMiddlewares([
112-
async (next, s, a, c, i) => {
113-
const res = await next(s, a, c, i);
114-
const _id = res?.record?._id;
115-
if (_id) pubsub.publish('ORDER_UPDATED', _id);
116-
return res;
117-
},
118-
]),
119-
removeOrder: orderRemoveOneResolver.withMiddlewares([
120-
async (next, s, a, c, i) => {
121-
const res = await next(s, a, c, i);
122-
if (res?.record?._id) pubsub.publish('ORDER_REMOVED', res?.record?._id);
123-
return res;
124-
},
125-
]),
126-
127-
updateEmployee: employeeUpdateByIdResolver,
112+
createProduct: productCreateOneResolver.withMiddlewares([emitEventMW('PRODUCT_CREATED')]),
113+
updateProduct: productUpdateByIdResolver.withMiddlewares([emitEventMW('PRODUCT_UPDATED')]),
114+
removeProduct: productRemoveOneResolver.withMiddlewares([emitEventMW('PRODUCT_REMOVED')]),
115+
116+
createOrder: orderCreateOneResolver.withMiddlewares([emitEventMW('ORDER_CREATED')]),
117+
updateOrder: orderUpdateByIdResolver.withMiddlewares([emitEventMW('ORDER_UPDATED')]),
118+
removeOrder: orderRemoveOneResolver.withMiddlewares([emitEventMW('ORDER_REMOVED')]),
119+
120+
updateEmployee: employeeUpdateByIdResolver.withMiddlewares([emitEventMW('EMPLOYEE_UPDATED')]),
128121
}),
129122
}),
130123
resetData: {
@@ -166,6 +159,35 @@ schemaComposer.Subscription.addFields({
166159
resolve: (_id) => _id,
167160
subscribe: () => pubsub.asyncIterator(['ORDER_REMOVED']),
168161
},
162+
productCreated: {
163+
type: ProductTC,
164+
resolve: (product) => product,
165+
subscribe: () =>
166+
FunctifiedAsync.map(pubsub.asyncIterator(['PRODUCT_CREATED']), (_id) => {
167+
return Product.findById(_id);
168+
}),
169+
},
170+
productUpdated: {
171+
type: ProductTC,
172+
resolve: (product) => product,
173+
subscribe: () =>
174+
FunctifiedAsync.map(pubsub.asyncIterator(['PRODUCT_UPDATED']), (_id) => {
175+
return Product.findById(_id);
176+
}),
177+
},
178+
productRemoved: {
179+
type: 'MongoID',
180+
resolve: (_id) => _id,
181+
subscribe: () => pubsub.asyncIterator(['PRODUCT_REMOVED']),
182+
},
183+
employeeUpdated: {
184+
type: EmployeeTC,
185+
resolve: (employee) => employee,
186+
subscribe: () =>
187+
FunctifiedAsync.map(pubsub.asyncIterator(['EMPLOYEE_UPDATED']), (_id) => {
188+
return Employee.findById(_id);
189+
}),
190+
},
169191
});
170192

171193
export default schemaComposer.buildSchema();

0 commit comments

Comments
 (0)