Skip to content

Commit d859113

Browse files
author
Boris
committed
feat: split add job mutation by repeatability
1 parent ac31c38 commit d859113

File tree

5 files changed

+96
-44
lines changed

5 files changed

+96
-44
lines changed

example/src/config.ts

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,8 @@
66
// password: process.env.REDIS_PASSWORD || '',
77
// };
88

9-
// const BULL_REDIS_URI = 'redis://127.0.0.1:6379';
10-
const BULL_REDIS_URI =
11-
'redis://:uut2tiew5waeli1aefup0Toecaikoque5eepahch5AowaiJ2@10.216.129.128:6379';
9+
const BULL_REDIS_URI = 'redis://127.0.0.1:6379';
10+
//const BULL_REDIS_URI ='redis://:uut2tiew5waeli1aefup0Toecaikoque5eepahch5AowaiJ2@10.216.129.128:6379';
1211

1312
const BULL_HOST_ID = 'maybe_uuid_and_mac';
1413

example/src/schema/mutation/index.ts

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,13 @@
1+
import { SchemaComposer } from 'graphql-compose';
12
import { createQueueCleanFC } from './queueClean';
23
import { createQueuePauseFC } from './queuePause';
34
import { createQueueResumeFC } from './queueResume';
45

56
import { createRemoveRepeatableFC } from './queueRemoveRepeatable';
67

78
import { createJobAddFC } from './jobAdd';
9+
import { createJobAddRepeatableCronFC } from './jobAdd';
10+
import { createJobAddRepeatableEveryFC } from './jobAdd';
811
import { createJobDiscardFC } from './jobDiscard';
912
import { createjobPromoteFC } from './jobPromote';
1013
import { createJobRremoveFC } from './jobRemove';
@@ -14,15 +17,23 @@ import { createJobLogAddFC } from './jobLogAdd';
1417

1518
import { createGenerateHelper } from './_helpers';
1619

17-
export function createMutationFields({ schemaComposer }): any {
20+
export function createMutationFields({
21+
schemaComposer,
22+
}: {
23+
schemaComposer: SchemaComposer<any>;
24+
}): any {
1825
const generateHelper = createGenerateHelper(schemaComposer);
1926
//TODO: пропустить через map это
2027
return {
2128
queueClean: generateHelper(createQueueCleanFC({ schemaComposer })),
2229
queuePause: generateHelper(createQueuePauseFC()),
2330
queueResume: generateHelper(createQueueResumeFC()),
2431
queueRemoveRepeatable: generateHelper(createRemoveRepeatableFC()),
32+
2533
jobAdd: generateHelper(createJobAddFC(schemaComposer)),
34+
jobAddRepeatableCron: generateHelper(createJobAddRepeatableCronFC(schemaComposer)),
35+
jobAddRepeatableEvery: generateHelper(createJobAddRepeatableEveryFC(schemaComposer)),
36+
2637
jobDiscard: generateHelper(createJobDiscardFC({ schemaComposer })),
2738
jobPromote: generateHelper(createjobPromoteFC({ schemaComposer })),
2839
jobRemove: generateHelper(createJobRremoveFC(schemaComposer)),
Lines changed: 82 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,74 @@
11
import { getQueue } from './_helpers';
2-
import { SchemaComposer } from 'graphql-compose';
3-
import { getJobTC, getJobOptionsInputTC } from '../types/job';
2+
import {
3+
SchemaComposer,
4+
InputTypeComposer,
5+
ObjectTypeComposerFieldConfigAsObjectDefinition,
6+
} from 'graphql-compose';
7+
import { getJobTC } from '../types/job';
48

5-
export function createJobAddFC(schemaComposer: SchemaComposer<any>) {
9+
function getPayloadTC(sc: SchemaComposer<any>) {
10+
return sc.getOrCreateOTC('JobAddPayload', (etc) => {
11+
etc.addFields({
12+
job: getJobTC(sc),
13+
});
14+
});
15+
}
16+
17+
export function createJobAddFC(sc: SchemaComposer<any>) {
18+
return composeJobAddFC(sc, createJobOptionsInputTC('JobOptionsInput', sc));
19+
}
20+
21+
export function createJobAddRepeatableCronFC(sc: SchemaComposer<any>) {
22+
return composeJobAddFC(
23+
sc,
24+
createJobOptionsInputTC('JobOptionsInputRepeatableCron', sc).addFields({
25+
repeat: sc
26+
.createInputTC({
27+
name: 'RepeatOptionsInputCron',
28+
fields: {
29+
tz: 'String',
30+
endDate: 'Date',
31+
limit: 'Int',
32+
cron: 'String!',
33+
startDate: 'Date',
34+
},
35+
})
36+
.getTypeNonNull(),
37+
})
38+
);
39+
}
40+
41+
export function createJobAddRepeatableEveryFC(sc: SchemaComposer<any>) {
42+
return composeJobAddFC(
43+
sc,
44+
createJobOptionsInputTC('JobOptionsInputRepeatableEvery', sc).addFields({
45+
repeat: sc
46+
.createInputTC({
47+
name: 'RepeatOptionsInputEvery',
48+
fields: {
49+
tz: 'String',
50+
endDate: 'Date',
51+
limit: 'Int',
52+
cron: 'String!',
53+
startDate: 'Date',
54+
},
55+
})
56+
.getTypeNonNull(),
57+
})
58+
);
59+
}
60+
61+
function composeJobAddFC(
62+
sc: SchemaComposer<any>,
63+
optionsTC: InputTypeComposer<any>
64+
): ObjectTypeComposerFieldConfigAsObjectDefinition<any, any> {
665
return {
7-
type: {
8-
name: 'JobAddPayload',
9-
fields: {
10-
job: getJobTC(schemaComposer),
11-
},
12-
},
66+
type: getPayloadTC(sc),
1367
args: {
1468
queueName: 'String!',
1569
jobName: 'String!',
1670
data: 'JSON!',
17-
options: getJobOptionsInputTC(schemaComposer),
71+
options: optionsTC,
1872
},
1973
resolve: async (_, { queueName, jobName, data, options }, context) => {
2074
const queue = getQueue(queueName, context);
@@ -25,3 +79,21 @@ export function createJobAddFC(schemaComposer: SchemaComposer<any>) {
2579
},
2680
};
2781
}
82+
83+
function createJobOptionsInputTC(name: string, sc: SchemaComposer<any>): InputTypeComposer<any> {
84+
return sc.createInputTC({
85+
name,
86+
fields: {
87+
priority: 'Int',
88+
delay: 'Int',
89+
attempts: 'Int',
90+
backoff: 'Int', // | TODO: BackoffOptions
91+
lifo: 'Boolean',
92+
timeout: 'Int',
93+
jobId: 'String',
94+
removeOnComplete: 'Boolean', //TODO: bool or int
95+
removeOnFail: 'Boolean', //TODO: bool or int
96+
stackTraceLimit: 'Int',
97+
},
98+
});
99+
}

example/src/schema/types/job/OptionsInput.ts

Lines changed: 0 additions & 28 deletions
This file was deleted.

example/src/schema/types/job/index.ts

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,6 @@ import { createStateFC } from './state';
33
import { createRepeatOptionsTC } from './RepeatOptionsInterface';
44
import { SchemaComposer } from 'graphql-compose';
55

6-
export { getJobOptionsInputTC } from './OptionsInput';
7-
86
export function getJobTC(sc: SchemaComposer<any>) {
97
return sc.getOrCreateOTC('Job', (etc) => {
108
etc.addFields({

0 commit comments

Comments
 (0)