import { schema } from 'nexus' import { send as sendNotifications } from '../../utils/notification' import { logger } from '../../utils/logger' export const Rule = schema.objectType({ name: 'Rule', definition(t) { t.model.id() t.model.createdAt() t.model.updatedAt() t.model.title() t.model.description() t.model.category() t.model.isDeleted() t.model.project() t.model.offenses() t.model.attachments() t.model.projects() t.model.seenBy() }, }) export const RuleQueries = schema.extendType({ type: 'Query', definition(t) { t.crud.rule() t.crud.rules({ filtering: true, ordering: true }) }, }) export const RuleMutation = schema.extendType({ type: 'Mutation', definition: (t) => { t.crud.updateOneRule({ alias: 'updateRule' }) t.crud.deleteOneRule({ alias: 'deleteRule' }) t.crud.createOneRule({ alias: 'createRule' }) t.field('createRule', { type: 'Rule', args: { data: schema.arg({ type: 'RuleCreateInput' }), }, resolve: async (parent, { data }, ctx: NexusContext) => { const createdRule = await ctx.prisma.rule.create({ data: { ...data }, select: { id: true, title: true, description: true, project: { select: { id: true, name: true, users: { select: { id: true, hasInstalledApp: true, role: true, email: true, appNotificationsBadgesNumber: true, notificationToken: true, phone: { select: { number: true, }, }, currentProject: { select: { name: true, }, }, }, }, }, }, }, }) // Send notification for the app try { sendNotifications({ noSMS: true, noEmail: true, users: createdRule.project.users, title: 'New rule', message: createdRule.title, projectId: createdRule.project.id, type: 'NEW_RULE', data: { id: createdRule.id, }, }) } catch (e) { logger.error(e) } return ctx.prisma.rule.findOne({ where: { id: createdRule.id } }) }, }) }, })