import { schema } from 'nexus' import * as Auth from '../../utils/auth' export const SyncStatus = schema.objectType({ name: 'SyncStatus', definition(t) { t.model.id() t.model.status() t.model.overwriteWalterConfirmed() t.model.overwriteThirdPartyServiceConfirmed() t.model.dataToConfirm() t.model.lastSeenPrismaValue() t.model.mapping() t.model.project() t.model.mapping() t.model.addressesSyncAddress1() t.model.addressesSyncApartmentNumber() t.model.addressesSyncCity() t.model.addressesSyncCountry() t.model.addressesSyncCountryCode() t.model.addressesSyncProvinceCode() t.model.addressesSyncState() t.model.addressesSyncZip() t.model.usersCondoManagerCompteUserNumbersSynced() t.model.usersCondoManagerNoCompteReelsSynced() t.model.phonesCountryCodesSynced() t.model.usersEmailsSynced() t.model.phonesExtensionsSynced() t.model.usersFirstNamesSynced() t.model.usersIsResidentSynced() t.model.usersLastNamesSynced() t.model.phonesNationalFormatsSynced() t.model.phonesNumbersSynced() }, }) export const SyncStatusQueries = schema.extendType({ type: 'Query', definition(t) { t.crud.syncStatus() t.crud.syncStatuses({ filtering: true, ordering: true }) }, }) export const SyncStatusMutation = schema.extendType({ type: 'Mutation', definition: (t) => { t.crud.deleteOneSyncStatus({ alias: 'deleteSyncStatus' }) t.crud.updateOneSyncStatus({ alias: 'updateSyncStatus' }) t.crud.createOneSyncStatus({ alias: 'createSyncStatus' }) t.field('updateSyncStatusOfUser', { type: 'SyncStatus', args: { data: schema.arg({ type: 'SyncStatusUpdateInput' }), where: schema.arg({ type: 'SyncStatusWhereUniqueInput' }), userId: schema.stringArg(), }, resolve: async (parent, { where, userId, data }, ctx: NexusContext) => { // A value has been confirmed by a property manager if (data.overwriteWalterConfirmed && data.status === 'SYNCED' && userId) { const oldSyncStatus = await ctx.prisma.syncStatus.findOne({ where, select: { dataToConfirm: true, mapping: { select: { prismaSource: true, }, }, }, }) if (oldSyncStatus.mapping.prismaSource.includes('email')) { await ctx.prisma.user.update({ where: { id: userId }, data: { email: oldSyncStatus.dataToConfirm, }, }) } } return ctx.prisma.syncStatus.update({ where, data }) }, }) }, })