Add deleteRule api

This commit is contained in:
Hongbo Wu
2022-11-23 09:52:15 +08:00
parent d9cd0ee6a4
commit f473c18939
3 changed files with 92 additions and 0 deletions

View File

@ -36,6 +36,7 @@ import {
deleteLabelResolver,
deleteNewsletterEmailResolver,
deleteReminderResolver,
deleteRuleResolver,
deleteWebhookResolver,
deviceTokensResolver,
generateApiKeyResolver,
@ -177,6 +178,7 @@ export const functionResolvers = {
deleteIntegration: deleteIntegrationResolver,
optInFeature: optInFeatureResolver,
setRule: setRuleResolver,
deleteRule: deleteRuleResolver,
},
Query: {
me: getMeUserResolver,
@ -619,4 +621,5 @@ export const functionResolvers = {
...resultResolveTypeResolver('SetRule'),
...resultResolveTypeResolver('Rules'),
...resultResolveTypeResolver('DeviceTokens'),
...resultResolveTypeResolver('DeleteRule'),
}

View File

@ -1,5 +1,9 @@
import { authorized } from '../../utils/helpers'
import {
DeleteRuleError,
DeleteRuleErrorCode,
DeleteRuleSuccess,
MutationDeleteRuleArgs,
MutationSetRuleArgs,
QueryRulesArgs,
RulesError,
@ -105,3 +109,51 @@ export const rulesResolver = authorized<
}
}
})
export const deleteRuleResolver = authorized<
DeleteRuleSuccess,
DeleteRuleError,
MutationDeleteRuleArgs
>(async (_, { id }, { claims, log }) => {
log.info('Deleting rule', {
id,
labels: {
source: 'resolver',
resolver: 'deleteRuleResolver',
uid: claims.uid,
},
})
try {
const rule = await getRepository(Rule).findOneBy({
id,
user: { id: claims.uid },
})
if (!rule) {
return {
errorCodes: [DeleteRuleErrorCode.NotFound],
}
}
await getRepository(Rule).delete({
id: rule.id,
})
return {
rule,
}
} catch (error) {
log.error('Error deleting rule', {
error,
labels: {
source: 'resolver',
resolver: 'deleteRuleResolver',
uid: claims.uid,
},
})
return {
errorCodes: [DeleteRuleErrorCode.BadRequest],
}
}
})

View File

@ -130,4 +130,41 @@ describe('Rules Resolver', () => {
expect(res.body.data.rules.rules.length).to.equal(1)
})
})
describe('delete rules', () => {
let rule: Rule
before(async () => {
rule = await getRepository(Rule).save({
user: { id: user.id },
name: 'test rule',
filter: 'test filter',
actions: [{ type: RuleActionType.SendNotification, params: [] }],
enabled: true,
})
})
const deleteRulesQuery = (id: string) => `
mutation {
deleteRule(id: "${id}") {
... on DeleteRuleSuccess {
rule {
id
}
}
... on DeleteRuleError {
errorCodes
}
}
}
`
it('should delete rules', async () => {
const res = await graphqlRequest(
deleteRulesQuery(rule.id),
authToken
).expect(200)
expect(res.body.data.deleteRule.rule.id).to.equal(rule.id)
})
})
})