diff --git a/lib/custom-sms.js b/lib/custom-sms.js index f02b0dc8..8cb8546a 100644 --- a/lib/custom-sms.js +++ b/lib/custom-sms.js @@ -8,21 +8,18 @@ const getCustomMessages = () => { it => ({ id: it.id, event: _.camelCase(it.event), - deviceId: it.device_id, message: it.message }), res)) } -const createCustomMessage = (event, deviceId, message) => { - const machineId = deviceId === 'ALL_MACHINES' ? null : deviceId - const sql = `INSERT INTO custom_messages (id, event, device_id, message) VALUES ($1, $2, $3, $4)` - return db.none(sql, [uuid.v4(), _.snakeCase(event), machineId, message]) +const createCustomMessage = (event, message) => { + const sql = `INSERT INTO custom_messages (id, event, message) VALUES ($1, $2, $3)` + return db.none(sql, [uuid.v4(), _.snakeCase(event), message]) } -const editCustomMessage = (id, event, deviceId, message) => { - const machineId = deviceId === 'ALL_MACHINES' ? null : deviceId - const sql = `UPDATE custom_messages SET event=$2, device_id=$3, message=$4 WHERE id=$1` - return db.none(sql, [id, _.snakeCase(event), machineId, message]) +const editCustomMessage = (id, event, message) => { + const sql = `UPDATE custom_messages SET event=$2, message=$3 WHERE id=$1` + return db.none(sql, [id, _.snakeCase(event), message]) } const deleteCustomMessage = id => { @@ -30,21 +27,15 @@ const deleteCustomMessage = id => { return db.none(sql, [id]) } -const getCommonCustomMessages = event => { - const sql = `SELECT * FROM custom_messages WHERE event=$1 AND device_id IS NULL LIMIT 1` +const getCustomMessage = event => { + const sql = `SELECT * FROM custom_messages WHERE event=$1 LIMIT 1` return db.oneOrNone(sql, [event]) } -const getMachineCustomMessages = (event, deviceId) => { - const sql = `SELECT * FROM custom_messages WHERE event=$1 AND device_id=$2 LIMIT 1` - return db.oneOrNone(sql, [event, deviceId]) -} - module.exports = { getCustomMessages, createCustomMessage, editCustomMessage, deleteCustomMessage, - getCommonCustomMessages, - getMachineCustomMessages + getCustomMessage } diff --git a/lib/new-admin/graphql/resolvers/sms.resolver.js b/lib/new-admin/graphql/resolvers/sms.resolver.js index a9c2ba5e..f159c8c4 100644 --- a/lib/new-admin/graphql/resolvers/sms.resolver.js +++ b/lib/new-admin/graphql/resolvers/sms.resolver.js @@ -5,8 +5,8 @@ const resolvers = { customMessages: () => customSms.getCustomMessages() }, Mutation: { - createCustomMessage: (...[, { event, deviceId, message }]) => customSms.createCustomMessage(event, deviceId, message), - editCustomMessage: (...[, { id, event, deviceId, message }]) => customSms.editCustomMessage(id, event, deviceId, message), + createCustomMessage: (...[, { event, message }]) => customSms.createCustomMessage(event, message), + editCustomMessage: (...[, { id, event, message }]) => customSms.editCustomMessage(id, event, message), deleteCustomMessage: (...[, { id }]) => customSms.deleteCustomMessage(id) } } diff --git a/lib/new-admin/graphql/types/sms.type.js b/lib/new-admin/graphql/types/sms.type.js index 2eb1c62e..a86947b7 100644 --- a/lib/new-admin/graphql/types/sms.type.js +++ b/lib/new-admin/graphql/types/sms.type.js @@ -4,7 +4,6 @@ const typeDef = gql` type CustomMessage { id: ID! event: CustomMessageEvent! - deviceId: String message: String! } @@ -18,8 +17,8 @@ const typeDef = gql` } type Mutation { - createCustomMessage(event: CustomMessageEvent!, deviceId: String, message: String!): CustomMessage @auth - editCustomMessage(id: ID!, event: CustomMessageEvent!, deviceId: String, message: String!): CustomMessage @auth + createCustomMessage(event: CustomMessageEvent!, message: String!): CustomMessage @auth + editCustomMessage(id: ID!, event: CustomMessageEvent!, message: String!): CustomMessage @auth deleteCustomMessage(id: ID!): CustomMessage @auth } ` diff --git a/lib/plugins.js b/lib/plugins.js index a3898d4d..8c59b218 100644 --- a/lib/plugins.js +++ b/lib/plugins.js @@ -361,7 +361,7 @@ function plugins (settings, deviceId) { const phone = tx.phone const timestamp = dateFormat(new Date(), 'UTC:HH:MM Z') - return sms.getCashOutReadySms(deviceId, phone, timestamp) + return sms.getCashOutReadySms(phone, timestamp) .then(msg => { const rec = { sms: msg @@ -723,7 +723,7 @@ function plugins (settings, deviceId) { ? '123' : randomCode() - return sms.getPhoneCodeSms(deviceId, phone, code) + return sms.getPhoneCodeSms(phone, code) .then(msg => { const rec = { sms: msg diff --git a/lib/sms.js b/lib/sms.js index c1cbd08c..9d6e66cd 100644 --- a/lib/sms.js +++ b/lib/sms.js @@ -5,22 +5,11 @@ const _ = require('lodash/fp') const customSms = require('./custom-sms') -function getPhoneCodeSms (deviceId, phone, code) { - return Promise.all([ - customSms.getCommonCustomMessages('sms_code'), - customSms.getMachineCustomMessages('sms_code', deviceId) - ]) - .then(([commonMsg, machineMsg]) => { - if (!_.isNil(machineMsg)) { - const messageContent = _.replace('#code', code, machineMsg.message) - return { - toNumber: phone, - body: messageContent - } - } - - if (!_.isNil(commonMsg)) { - const messageContent = _.replace('#code', code, commonMsg.message) +function getPhoneCodeSms (phone, code) { + return customSms.getCustomMessage('sms_code') + .then(msg => { + if (!_.isNil(msg)) { + const messageContent = _.replace('#code', code, msg.message) return { toNumber: phone, body: messageContent @@ -34,22 +23,11 @@ function getPhoneCodeSms (deviceId, phone, code) { }) } -function getCashOutReadySms (deviceId, phone, timestamp) { - return Promise.all([ - customSms.getCommonCustomMessages('cash_out_dispense_ready'), - customSms.getMachineCustomMessages('cash_out_dispense_ready', deviceId) - ]) - .then(([commonMsg, machineMsg]) => { - if (!_.isNil(machineMsg)) { - const messageContent = _.replace('#timestamp', timestamp, machineMsg.message) - return { - toNumber: phone, - body: messageContent - } - } - - if (!_.isNil(commonMsg)) { - const messageContent = _.replace('#timestamp', timestamp, commonMsg.message) +function getCashOutReadySms (phone, timestamp) { + return customSms.getCustomMessage('cash_out_dispense_ready') + .then(msg => { + if (!_.isNil(msg)) { + const messageContent = _.replace('#timestamp', timestamp, msg.message) return { toNumber: phone, body: messageContent diff --git a/migrations/1627518944902-custom-sms.js b/migrations/1627518944902-custom-sms.js index 95395d31..74b82999 100644 --- a/migrations/1627518944902-custom-sms.js +++ b/migrations/1627518944902-custom-sms.js @@ -5,13 +5,10 @@ exports.up = function (next) { `CREATE TYPE custom_message_event AS ENUM('sms_code', 'cash_out_dispense_ready')`, `CREATE TABLE custom_messages ( id UUID PRIMARY KEY, - event custom_message_event NOT NULL, - device_id TEXT REFERENCES devices(device_id), + event custom_message_event UNIQUE NOT NULL, message TEXT NOT NULL, created TIMESTAMPTZ NOT NULL DEFAULT now() - )`, - `CREATE UNIQUE INDEX uq_custom_message_per_device ON custom_messages (event, device_id) WHERE device_id IS NOT NULL`, - `CREATE UNIQUE INDEX uq_custom_message_all_devices ON custom_messages (event) WHERE device_id IS NULL` + )` ] db.multi(sql, next) diff --git a/new-lamassu-admin/src/pages/OperatorInfo/CustomSMS/CustomSMS.js b/new-lamassu-admin/src/pages/OperatorInfo/CustomSMS/CustomSMS.js index 44bcf845..b1d3dac0 100644 --- a/new-lamassu-admin/src/pages/OperatorInfo/CustomSMS/CustomSMS.js +++ b/new-lamassu-admin/src/pages/OperatorInfo/CustomSMS/CustomSMS.js @@ -21,19 +21,14 @@ const GET_CUSTOM_MESSAGES = gql` customMessages { id event - deviceId message } } ` const CREATE_CUSTOM_MESSAGE = gql` - mutation createCustomMessage( - $event: CustomMessageEvent! - $deviceId: String! - $message: String! - ) { - createCustomMessage(event: $event, deviceId: $deviceId, message: $message) { + mutation createCustomMessage($event: CustomMessageEvent!, $message: String!) { + createCustomMessage(event: $event, message: $message) { id } } @@ -43,15 +38,9 @@ const EDIT_CUSTOM_MESSAGE = gql` mutation editCustomMessage( $id: ID! $event: CustomMessageEvent! - $deviceId: String! $message: String! ) { - editCustomMessage( - id: $id - event: $event - deviceId: $deviceId - message: $message - ) { + editCustomMessage(id: $id, event: $event, message: $message) { id } } @@ -65,15 +54,6 @@ const DELETE_CUSTOM_MESSAGE = gql` } ` -const GET_MACHINES = gql` - { - machines { - name - deviceId - } - } -` - const EVENT_OPTIONS = [ { code: 'smsCode', display: 'On SMS confirmation code' }, { code: 'cashOutDispenseReady', display: 'Cash out dispense ready' } @@ -91,10 +71,6 @@ const CustomSMS = () => { GET_CUSTOM_MESSAGES ) - const { data: machinesData, loading: machinesLoading } = useQuery( - GET_MACHINES - ) - const [createMessage] = useMutation(CREATE_CUSTOM_MESSAGE, { onError: ({ msg }) => setErrorMsg(msg), refetchQueries: () => ['customMessages'] @@ -110,15 +86,7 @@ const CustomSMS = () => { refetchQueries: () => ['customMessages'] }) - const loading = messagesLoading && machinesLoading - - const machineOptions = - (machinesData && - R.map( - it => ({ code: it.deviceId, display: it.name }), - R.path(['machines'])(machinesData) - )) ?? - [] + const loading = messagesLoading const handleClose = () => { setSelectedSMS(null) @@ -134,21 +102,12 @@ const CustomSMS = () => { const elements = [ { header: 'Event', - width: 400, + width: 600, size: 'sm', textAlign: 'left', view: it => R.find(ite => R.propEq('event', ite.code, it), EVENT_OPTIONS).display }, - { - header: 'Machine', - width: 200, - size: 'sm', - textAlign: 'left', - view: it => - R.find(ite => R.propEq('deviceId', ite.code, it), machineOptions) - ?.display ?? `All Machines` - }, { header: 'Edit', width: 100, @@ -195,7 +154,6 @@ const CustomSMS = () => { { if (!formikErrors || !formikTouched) return null if (mutationError) return 'Internal server error' @@ -67,7 +62,6 @@ const CustomSMSModal = ({ showModal, onClose, sms, - machineOptions, eventOptions, creationError, submit @@ -78,17 +72,11 @@ const CustomSMSModal = ({ const initialValues = { event: !R.isNil(sms) ? sms.event : '', - device: !R.isNil(sms) - ? !R.isNil(sms.deviceId) - ? sms.deviceId - : 'ALL_MACHINES' - : '', message: !R.isNil(sms) ? sms.message : '' } const validationSchema = Yup.object().shape({ event: Yup.string().required('An event is required!'), - device: Yup.string().required('A machine is required!'), message: prefill[selectedEvent]?.validator ?? Yup.string() @@ -102,14 +90,12 @@ const CustomSMSModal = ({ variables: { id: sms.id, event: values.event, - deviceId: values.device, message: values.message } }) : submit({ variables: { event: values.event, - deviceId: values.device, message: values.message } }) @@ -146,15 +132,6 @@ const CustomSMSModal = ({ valueProp="code" component={Autocomplete} /> -