Merge pull request #1445 from omnivore-app/delete-rules-api
Add deleteRule api
This commit is contained in:
@ -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'),
|
||||
}
|
||||
|
||||
@ -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],
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
@ -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)
|
||||
})
|
||||
})
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user