import moment from 'moment' import * as UserController from '../../controllers/user' import { prismaClient as prisma } from '../../prismaClient' import { logger } from '../logger' export const handleSMSStatus = async (req, res) => { res.status(200).end() try { const { SmsStatus, To } = req.body const { itemId } = req.params if (SmsStatus === 'delivered' && itemId) { await prisma.notification.findOne({ where: { id: itemId } }).then((notification) => { if (notification) { prisma.notification.update({ where: { id: notification.id, }, data: { delivered: true, deliveredAt: moment().toDate(), hasBeenSeenAt: moment().toDate(), hasBeenSeen: true, deliveredBySMS: true, hasBeenSeenBySMS: true, deliveredBySMSAt: moment().toDate(), hasBeenSeenBySMSAt: moment().toDate(), }, }) } }) } if (SmsStatus === 'delivered') { const user = await UserController.querySingleUser({ phoneNumber: To, }) if (user?.cantDeliverSMS) { return prisma.user.update({ where: { id: user.id }, data: { cantDeliverSMS: false } }) } } // In case we can't deliver the SMS, tag the user so the manager can know that the user has an invalid phone number if (SmsStatus === 'undelivered') { const user = await UserController.querySingleUser({ phoneNumber: To, }) if (user) { await prisma.user.update({ where: { id: user.id, }, data: { cantDeliverSMS: true, }, }) if (itemId) { await prisma.notification.update({ where: { id: itemId, }, data: { deliveryErrorMessageSMS: `Couldn't be delivered because mobile phone number ${To} is invalid`, }, }) } } } } catch (error) { logger.error(error) } }