// import { AdditionalService } from './../../generated/prisma-client/index' import { schema } from 'nexus' // import OrderHelpers from '../../controllers/order/helpers' export const AdditionalService = schema.objectType({ name: 'AdditionalService', definition(t) { t.model.id() t.model.createdAt() t.model.updatedAt() t.model.status() t.model.subtotal() t.model.totalTax() t.model.total() t.model.description() t.model.isCharged() t.model.isRecurrent() t.model.creator() t.model.order() }, }) export const AdditionalServiceMutation = schema.extendType({ type: 'Mutation', definition: (t) => { t.crud.updateOneAdditionalService({ alias: 'updateAdditionalService' }) t.crud.createOneAdditionalService({ alias: 'createAdditionalService' }) t.crud.deleteOneAdditionalService({ alias: 'deleteAdditionalService' }) t.field('updateAdditionalService', { type: 'AdditionalService', args: { where: schema.arg({ type: 'AdditionalServiceWhereUniqueInput' }), data: schema.arg({ type: 'AdditionalServiceUpdateInput' }), }, async resolve(root, { data, where }, ctx: NexusContext) { // Get Old additional service // Update additional service // If additionalService is now CONFIRMED if (data.status === 'CONFIRMED') { try { // Charge customer } catch (e) { // Update additional service with old data for each fields found in data // If data.creator means creator has changed to so put the older one // Throw error } // Send notification } return ctx.prisma.additionalService.update({ data, where }) }, }) t.field('createAdditionalService', { type: 'AdditionalService', args: { data: schema.arg({ type: 'AdditionalServiceCreateInput' }) }, resolve: async (parent, { data }, ctx: NexusContext) => { // TO CONTINUE. SEND AN UPDATED ORDER EMAIL TO THE CUSTOMER SINCE THE ORDER HAS BEEN UPDATED // const createdAdditionalService = await ctx.prisma.createAdditionService({ data }) // .$fragment(`{ // id // order { // id // createdAt // customer { // email // } // } // }`) // OrderHelpers.sendOrderConfirmationTemplate({ // to: createdAdditionalService.order.customer.email, // orderId: createdAdditionalService.ordre.id, // subject: `UPDATED - Your ${moment(createdAdditionalService.order.createdAt).format( // 'dddd', // )} ${ // moment(createdAdditionalService.order.createdAt).hour() < 12 // ? 'morning' // : moment(createdAdditionalService.order.createdAt).hour() > 17 // ? 'evening' // : 'afternoon' // } service request with Walter`, // }) // If confirmed if (data.status === 'CONFIRMED') { try { // Charge customer } catch (e) { // Delete additional service // Throw error } // Send notification } return ctx.prisma.additionalService.create({ data }) }, }) }, }) export const AdditionalServiceQuery = schema.extendType({ type: 'Query', definition(t) { t.crud.additionalService() t.crud.additionalServices({ filtering: true, ordering: true }) }, })