File tree Expand file tree Collapse file tree 9 files changed +116
-0
lines changed
Expand file tree Collapse file tree 9 files changed +116
-0
lines changed Original file line number Diff line number Diff line change 1+ import { AdminMutationResolvers } from '@/graphql/__generated__/types.generated'
2+
3+ import pauseGroup from './pause-group'
4+ import resumeGroup from './resume-group'
5+
6+ export default {
7+ pauseGroup,
8+ resumeGroup,
9+ } satisfies AdminMutationResolvers
Original file line number Diff line number Diff line change 1+ import { actionQueuesByName } from '@/queues/action'
2+
3+ import type { AdminMutationResolvers } from '../../__generated__/types.generated'
4+
5+ const pauseGroup : AdminMutationResolvers [ 'pauseGroup' ] = async (
6+ _parent ,
7+ params ,
8+ _context ,
9+ ) => {
10+ const {
11+ input : { groupId, appKey } ,
12+ } = params
13+
14+ const queueName = `{app-actions-${ appKey } }`
15+ const queue = actionQueuesByName [ queueName ]
16+
17+ if ( ! queue ) {
18+ throw new Error ( `Queue ${ queueName } not found` )
19+ }
20+
21+ return queue . pauseGroup ( groupId )
22+ }
23+
24+ export default pauseGroup
Original file line number Diff line number Diff line change 1+ import { actionQueuesByName } from '@/queues/action'
2+
3+ import type { AdminMutationResolvers } from '../../__generated__/types.generated'
4+
5+ const resumeGroup : AdminMutationResolvers [ 'resumeGroup' ] = async (
6+ _parent ,
7+ params ,
8+ _context ,
9+ ) => {
10+ const {
11+ input : { groupId, appKey } ,
12+ } = params
13+
14+ const queueName = `{app-actions-${ appKey } }`
15+ const queue = actionQueuesByName [ queueName ]
16+
17+ if ( ! queue ) {
18+ throw new Error ( `Queue ${ queueName } not found` )
19+ }
20+
21+ return queue . resumeGroup ( groupId )
22+ }
23+
24+ export default resumeGroup
Original file line number Diff line number Diff line change 1+ import { GroupStatus } from '@taskforcesh/bullmq-pro'
2+
3+ import { actionQueuesByName } from '@/queues/action'
4+
5+ import type { AdminQueryResolvers } from '../../__generated__/types.generated'
6+
7+ const getPausedGroups : AdminQueryResolvers [ 'getPausedGroups' ] = async (
8+ _parent ,
9+ params ,
10+ _context ,
11+ ) => {
12+ const { appKey } = params
13+ const queueName = `{app-actions-${ appKey } }`
14+ const queue = actionQueuesByName [ queueName ]
15+
16+ if ( ! queue ) {
17+ throw new Error ( `Queue ${ queueName } not found` )
18+ }
19+
20+ const pausedGroups = await queue . getGroupsByStatus ( GroupStatus . Paused )
21+ return pausedGroups . map ( ( group ) => group . id )
22+ }
23+
24+ export default getPausedGroups
Original file line number Diff line number Diff line change @@ -2,6 +2,7 @@ import type { AdminQueryResolvers } from '../../__generated__/types.generated'
22
33import getExecutionOwner from './get-execution-owner'
44import getFlowOwner from './get-flow-owner'
5+ import getPausedGroups from './get-paused-groups'
56import getTableOwner from './get-table-owner'
67import searchUsersByEmail from './search-users-by-email'
78
@@ -10,4 +11,5 @@ export default {
1011 getFlowOwner,
1112 getTableOwner,
1213 searchUsersByEmail,
14+ getPausedGroups,
1315} satisfies AdminQueryResolvers
Original file line number Diff line number Diff line change @@ -84,4 +84,9 @@ export default {
8484 deleteUploadedFile,
8585 generatePresignedUrl,
8686 ...tilesMutationResolvers ,
87+
88+ // This is a special stub that enables us to group all our admin-related
89+ // mutations into a special AdminMutation object; each "mutation" is handled by field
90+ // resolvers defined in @/graphql/admin/mutations.
91+ admin : ( ) => ( { } ) ,
8792} satisfies MutationResolvers
Original file line number Diff line number Diff line change 11import type { Resolvers } from './__generated__/types.generated'
2+ import adminMutationResolvers from './admin/mutations'
23import adminQueryResolvers from './admin/queries'
34import customResolvers from './custom-resolvers'
45import mutationResolvers from './mutation-resolvers'
@@ -8,5 +9,6 @@ export default {
89 Query : queryResolvers ,
910 Mutation : mutationResolvers ,
1011 AdminQuery : adminQueryResolvers ,
12+ AdminMutation : adminMutationResolvers ,
1113 ...customResolvers ,
1214} satisfies Resolvers
Original file line number Diff line number Diff line change @@ -60,8 +60,10 @@ type AdminQuery {
6060 getExecutionOwner (executionId : String ! ): User
6161 getTableOwner (tableId : String ! ): User
6262 searchUsersByEmail (query : String ! ): [User ! ]!
63+ getPausedGroups (appKey : String ! ): [String ! ]!
6364}
6465
66+
6567type Mutation {
6668 createConnection (input : CreateConnectionInput ): Connection
6769 generateAuthUrl (input : GenerateAuthUrlInput ): AuthLink
@@ -117,6 +119,14 @@ type Mutation {
117119 # Flow transfers
118120 createFlowTransfer (input : CreateFlowTransferInput ! ): FlowTransfer !
119121 updateFlowTransferStatus (input : UpdateFlowTransferStatusInput ): FlowTransfer !
122+ # Admin mutations
123+ admin : AdminMutation !
124+ }
125+
126+
127+ type AdminMutation {
128+ pauseGroup (input : PauseGroupInput ! ): Boolean
129+ resumeGroup (input : ResumeGroupInput ! ): Boolean
120130}
121131
122132"""
@@ -986,6 +996,20 @@ enum TemplateTagType {
986996
987997# End of template types
988998
999+ # Start of admin types
1000+
1001+ input PauseGroupInput {
1002+ groupId : String !
1003+ appKey : String !
1004+ }
1005+
1006+ input ResumeGroupInput {
1007+ groupId : String !
1008+ appKey : String !
1009+ }
1010+
1011+ # End of admin types
1012+
9891013schema {
9901014 query : Query
9911015 mutation : Mutation
Original file line number Diff line number Diff line change @@ -104,7 +104,9 @@ const authentication = shield(
104104 loginWithSgid : rateLimitRule ( { window : '1s' , max : 5 } ) ,
105105 loginWithSelectedSgid : rateLimitRule ( { window : '1s' , max : 5 } ) ,
106106 loginWithSso : rateLimitRule ( { window : '1s' , max : 5 } ) ,
107+ admin : isAdminOperation ,
107108 } ,
109+ AdminMutation : isAdminOperation ,
108110 } ,
109111 {
110112 allowExternalErrors : true ,
You can’t perform that action at this time.
0 commit comments