Skip to content

Commit efa9411

Browse files
author
Boris
committed
feat: middleware for fc creating
1 parent bde9c38 commit efa9411

21 files changed

+133
-60
lines changed

example/src/schema.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ const { queryFields, mutationFields } = composeBull({
1010
name: 'fetch_metrics',
1111
prefix: 'bull.demo',
1212
},
13-
//redis: createBullConnection('queue'),
13+
redis: createBullConnection('queue'),
1414
});
1515

1616
schemaComposer.Query.addFields({

src/composeBull.ts

Lines changed: 36 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -23,11 +23,23 @@ import {
2323
createJobUpdateFC,
2424
createJobLogAddFC,
2525
} from './mutation';
26-
import { createMutationFC, wrapQueueArgs } from './helpers';
26+
import { wrapMutationFC, wrapQueueArgs } from './helpers';
2727

2828
export function composeBull(opts: Options & { schemaComposer?: SchemaComposer<any> }) {
2929
const sc = opts?.schemaComposer || schemaComposer;
3030

31+
type FC = ObjectTypeComposerFieldConfigAsObjectDefinition<any, any>;
32+
33+
type Middleare = (fc: FC, sc: SchemaComposer<any>, opts: Options) => FC;
34+
35+
type Creator = (sc: SchemaComposer<any>, opts: Options) => FC;
36+
37+
type Wrapper = (creator: Creator) => FC;
38+
39+
type ComposeFCResult = (...args: Middleare[]) => Wrapper;
40+
41+
type ComposeFC = (sc: SchemaComposer<any>, opts: Options) => ComposeFCResult;
42+
3143
/**
3244
* Compose several FC creator with middlewares
3345
* Eg. composeFC(sc, opts)(createQueueKeysFC, wrapQueueArgs, wrapOtherMiddleware)
@@ -37,18 +49,8 @@ export function composeBull(opts: Options & { schemaComposer?: SchemaComposer<an
3749
* fc = wrapOtherMiddleware(fc, sc, opts)
3850
* return fc;
3951
*/
40-
function composeFC(sc: SchemaComposer<any>, opts: Options) {
41-
return (
42-
creator: (
43-
sc: SchemaComposer<any>,
44-
opts: Options
45-
) => ObjectTypeComposerFieldConfigAsObjectDefinition<any, any>,
46-
...middlewares: ((
47-
fc: ObjectTypeComposerFieldConfigAsObjectDefinition<any, any>,
48-
sc: SchemaComposer<any>,
49-
opts: Options
50-
) => ObjectTypeComposerFieldConfigAsObjectDefinition<any, any>)[]
51-
): ObjectTypeComposerFieldConfigAsObjectDefinition<any, any> => {
52+
function composeFC(sc: SchemaComposer<any>, opts: Options): ComposeFCResult {
53+
return (...middlewares: Middleare[]): Wrapper => (creator: Creator): FC => {
5254
let fc = creator(sc, opts);
5355
for (let i = 0; i < middlewares.length; i++) {
5456
fc = middlewares[i](fc, sc, opts);
@@ -57,43 +59,34 @@ export function composeBull(opts: Options & { schemaComposer?: SchemaComposer<an
5759
};
5860
}
5961

60-
const wrap = composeFC(sc, opts);
62+
const wrapQuery = composeFC(sc, opts)(wrapQueueArgs);
63+
const wrapMutation = composeFC(sc, opts)(wrapMutationFC, wrapQueueArgs);
6164

6265
return {
6366
QueueTC: getQueueTC(sc, opts),
6467
JobTC: getJobTC(sc, opts),
6568
queryFields: {
66-
queueKeys: wrap(createQueueKeysFC, wrapQueueArgs),
67-
queues: predefineQueueArgs(createQueuesFC(sc, opts), opts),
68-
queue: predefineQueueArgs(createQueueFC(sc, opts), opts),
69-
job: predefineQueueArgs(createJobFC(sc, opts), opts),
69+
queueKeys: wrapQuery(createQueueKeysFC),
70+
queues: wrapQuery(createQueuesFC),
71+
queue: wrapQuery(createQueueFC),
72+
job: wrapQuery(createJobFC),
7073
},
7174
mutationFields: {
72-
queueClean: wrap(createQueueCleanFC, createMutationFC, predefineQueueArgs),
73-
// queueClean: predefineQueueArgs(createMutationFC(createQueueCleanFC, sc, opts), opts),
74-
queueDrain: predefineQueueArgs(createMutationFC(createQueueDrainFC, sc, opts), opts),
75-
queuePause: predefineQueueArgs(createMutationFC(createQueuePauseFC, sc, opts), opts),
76-
queueResume: predefineQueueArgs(createMutationFC(createQueueResumeFC, sc, opts), opts),
77-
queueRemoveRepeatable: predefineQueueArgs(
78-
createMutationFC(createRemoveRepeatableFC, sc, opts),
79-
opts
80-
),
81-
jobAdd: predefineQueueArgs(createMutationFC(createJobAddFC, sc, opts), opts),
82-
jobAddBulk: predefineQueueArgs(createMutationFC(createJobAddBulkFC, sc, opts), opts),
83-
jobAddRepeatableCron: predefineQueueArgs(
84-
createMutationFC(createJobAddCronFC, sc, opts),
85-
opts
86-
),
87-
jobAddRepeatableEvery: predefineQueueArgs(
88-
createMutationFC(createJobAddEveryFC, sc, opts),
89-
opts
90-
),
91-
jobDiscard: predefineQueueArgs(createMutationFC(createJobDiscardFC, sc, opts), opts),
92-
jobPromote: predefineQueueArgs(createMutationFC(createjobPromoteFC, sc, opts), opts),
93-
jobRemove: predefineQueueArgs(createMutationFC(createJobRremoveFC, sc, opts), opts),
94-
jobRetry: predefineQueueArgs(createMutationFC(createJobRetryFC, sc, opts), opts),
95-
jobUpdate: predefineQueueArgs(createMutationFC(createJobUpdateFC, sc, opts), opts),
96-
jobLogAdd: predefineQueueArgs(createMutationFC(createJobLogAddFC, sc, opts), opts),
75+
queueClean: wrapMutation(createQueueCleanFC),
76+
queueDrain: wrapMutation(createQueueDrainFC),
77+
queuePause: wrapMutation(createQueuePauseFC),
78+
queueResume: wrapMutation(createQueueResumeFC),
79+
queueRemoveRepeatable: wrapMutation(createRemoveRepeatableFC),
80+
jobAdd: wrapMutation(createJobAddFC),
81+
jobAddBulk: wrapMutation(createJobAddBulkFC),
82+
jobAddRepeatableCron: wrapMutation(createJobAddCronFC),
83+
jobAddRepeatableEvery: wrapMutation(createJobAddEveryFC),
84+
jobDiscard: wrapMutation(createJobDiscardFC),
85+
jobPromote: wrapMutation(createjobPromoteFC),
86+
jobRemove: wrapMutation(createJobRremoveFC),
87+
jobRetry: wrapMutation(createJobRetryFC),
88+
jobUpdate: wrapMutation(createJobUpdateFC),
89+
jobLogAdd: wrapMutation(createJobLogAddFC),
9790
},
9891
};
9992
}

src/helpers/wrapMutationFC.ts

Lines changed: 0 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -13,19 +13,6 @@ export enum MutationStatusEnum {
1313
ERROR = 'error',
1414
}
1515

16-
export type CreateFC = (
17-
sc: SchemaComposer<any>,
18-
opts: Options
19-
) => ObjectTypeComposerFieldConfigAsObjectDefinition<any, any>;
20-
21-
export function createMutationFC(
22-
createFC: CreateFC,
23-
schemaComposer: SchemaComposer<any>,
24-
opts: Options
25-
) {
26-
return wrapMutationFC(createFC(schemaComposer, opts), schemaComposer, opts);
27-
}
28-
2916
export function wrapMutationFC(
3017
fieldConfig: ObjectTypeComposerFieldConfigAsObjectDefinition<any, any>,
3118
schemaComposer: SchemaComposer<any>,

src/mutation/jobAdd.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,11 @@ export function createJobAddFC(
1818
},
1919
}),
2020
args: {
21+
prefix: {
22+
type: 'String!',
23+
defaultValue: 'bull',
24+
},
25+
queueName: 'String!',
2126
jobName: 'String!',
2227
data: {
2328
type: () => createJobDataITC(sc, opts),

src/mutation/jobAddBulk.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,11 @@ export function createJobAddBulkFC(
1717
},
1818
}),
1919
args: {
20+
prefix: {
21+
type: 'String!',
22+
defaultValue: 'bull',
23+
},
24+
queueName: 'String!',
2025
jobs: sc
2126
.createInputTC({
2227
name: `${typePrefix}JobAddInputBulk`,

src/mutation/jobAddCron.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,11 @@ export function createJobAddCronFC(
1717
},
1818
}),
1919
args: {
20+
prefix: {
21+
type: 'String!',
22+
defaultValue: 'bull',
23+
},
24+
queueName: 'String!',
2025
jobName: 'String!',
2126
data: 'JSON!',
2227
options: sc.createInputTC({

src/mutation/jobAddEvery.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,11 @@ export function createJobAddEveryFC(
1717
},
1818
}),
1919
args: {
20+
prefix: {
21+
type: 'String!',
22+
defaultValue: 'bull',
23+
},
24+
queueName: 'String!',
2025
jobName: 'String!',
2126
data: 'JSON!',
2227
options: sc.createInputTC({

src/mutation/jobDiscard.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,11 @@ export function createJobDiscardFC(
1919
},
2020
}),
2121
args: {
22+
prefix: {
23+
type: 'String!',
24+
defaultValue: 'bull',
25+
},
26+
queueName: 'String!',
2227
id: 'String!',
2328
},
2429
resolve: async (_, { prefix, queueName, id }) => {

src/mutation/jobLogAdd.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,11 @@ export function createJobLogAddFC(
1919
},
2020
}),
2121
args: {
22+
prefix: {
23+
type: 'String!',
24+
defaultValue: 'bull',
25+
},
26+
queueName: 'String!',
2227
id: 'String!',
2328
row: 'String!',
2429
},

src/mutation/jobMoveToCompleted.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,11 @@ export function jobMoveToCompletedFC(
1818
},
1919
}),
2020
args: {
21+
prefix: {
22+
type: 'String!',
23+
defaultValue: 'bull',
24+
},
25+
queueName: 'String!',
2126
id: 'String!',
2227
},
2328
resolve: async (_, { prefix, queueName, id }) => {

0 commit comments

Comments
 (0)