fix: remove machine selector

This commit is contained in:
Sérgio Salgado 2021-08-25 16:56:07 +01:00
parent 30bc9c96da
commit ee8c46b51e
8 changed files with 32 additions and 132 deletions

View file

@ -8,21 +8,18 @@ const getCustomMessages = () => {
it => ({ it => ({
id: it.id, id: it.id,
event: _.camelCase(it.event), event: _.camelCase(it.event),
deviceId: it.device_id,
message: it.message message: it.message
}), res)) }), res))
} }
const createCustomMessage = (event, deviceId, message) => { const createCustomMessage = (event, message) => {
const machineId = deviceId === 'ALL_MACHINES' ? null : deviceId const sql = `INSERT INTO custom_messages (id, event, message) VALUES ($1, $2, $3)`
const sql = `INSERT INTO custom_messages (id, event, device_id, message) VALUES ($1, $2, $3, $4)` return db.none(sql, [uuid.v4(), _.snakeCase(event), message])
return db.none(sql, [uuid.v4(), _.snakeCase(event), machineId, message])
} }
const editCustomMessage = (id, event, deviceId, message) => { const editCustomMessage = (id, event, message) => {
const machineId = deviceId === 'ALL_MACHINES' ? null : deviceId const sql = `UPDATE custom_messages SET event=$2, message=$3 WHERE id=$1`
const sql = `UPDATE custom_messages SET event=$2, device_id=$3, message=$4 WHERE id=$1` return db.none(sql, [id, _.snakeCase(event), message])
return db.none(sql, [id, _.snakeCase(event), machineId, message])
} }
const deleteCustomMessage = id => { const deleteCustomMessage = id => {
@ -30,21 +27,15 @@ const deleteCustomMessage = id => {
return db.none(sql, [id]) return db.none(sql, [id])
} }
const getCommonCustomMessages = event => { const getCustomMessage = event => {
const sql = `SELECT * FROM custom_messages WHERE event=$1 AND device_id IS NULL LIMIT 1` const sql = `SELECT * FROM custom_messages WHERE event=$1 LIMIT 1`
return db.oneOrNone(sql, [event]) 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 = { module.exports = {
getCustomMessages, getCustomMessages,
createCustomMessage, createCustomMessage,
editCustomMessage, editCustomMessage,
deleteCustomMessage, deleteCustomMessage,
getCommonCustomMessages, getCustomMessage
getMachineCustomMessages
} }

View file

@ -5,8 +5,8 @@ const resolvers = {
customMessages: () => customSms.getCustomMessages() customMessages: () => customSms.getCustomMessages()
}, },
Mutation: { Mutation: {
createCustomMessage: (...[, { event, deviceId, message }]) => customSms.createCustomMessage(event, deviceId, message), createCustomMessage: (...[, { event, message }]) => customSms.createCustomMessage(event, message),
editCustomMessage: (...[, { id, event, deviceId, message }]) => customSms.editCustomMessage(id, event, deviceId, message), editCustomMessage: (...[, { id, event, message }]) => customSms.editCustomMessage(id, event, message),
deleteCustomMessage: (...[, { id }]) => customSms.deleteCustomMessage(id) deleteCustomMessage: (...[, { id }]) => customSms.deleteCustomMessage(id)
} }
} }

View file

@ -4,7 +4,6 @@ const typeDef = gql`
type CustomMessage { type CustomMessage {
id: ID! id: ID!
event: CustomMessageEvent! event: CustomMessageEvent!
deviceId: String
message: String! message: String!
} }
@ -18,8 +17,8 @@ const typeDef = gql`
} }
type Mutation { type Mutation {
createCustomMessage(event: CustomMessageEvent!, deviceId: String, message: String!): CustomMessage @auth createCustomMessage(event: CustomMessageEvent!, message: String!): CustomMessage @auth
editCustomMessage(id: ID!, event: CustomMessageEvent!, deviceId: String, message: String!): CustomMessage @auth editCustomMessage(id: ID!, event: CustomMessageEvent!, message: String!): CustomMessage @auth
deleteCustomMessage(id: ID!): CustomMessage @auth deleteCustomMessage(id: ID!): CustomMessage @auth
} }
` `

View file

@ -361,7 +361,7 @@ function plugins (settings, deviceId) {
const phone = tx.phone const phone = tx.phone
const timestamp = dateFormat(new Date(), 'UTC:HH:MM Z') const timestamp = dateFormat(new Date(), 'UTC:HH:MM Z')
return sms.getCashOutReadySms(deviceId, phone, timestamp) return sms.getCashOutReadySms(phone, timestamp)
.then(msg => { .then(msg => {
const rec = { const rec = {
sms: msg sms: msg
@ -723,7 +723,7 @@ function plugins (settings, deviceId) {
? '123' ? '123'
: randomCode() : randomCode()
return sms.getPhoneCodeSms(deviceId, phone, code) return sms.getPhoneCodeSms(phone, code)
.then(msg => { .then(msg => {
const rec = { const rec = {
sms: msg sms: msg

View file

@ -5,22 +5,11 @@ const _ = require('lodash/fp')
const customSms = require('./custom-sms') const customSms = require('./custom-sms')
function getPhoneCodeSms (deviceId, phone, code) { function getPhoneCodeSms (phone, code) {
return Promise.all([ return customSms.getCustomMessage('sms_code')
customSms.getCommonCustomMessages('sms_code'), .then(msg => {
customSms.getMachineCustomMessages('sms_code', deviceId) if (!_.isNil(msg)) {
]) const messageContent = _.replace('#code', code, msg.message)
.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)
return { return {
toNumber: phone, toNumber: phone,
body: messageContent body: messageContent
@ -34,22 +23,11 @@ function getPhoneCodeSms (deviceId, phone, code) {
}) })
} }
function getCashOutReadySms (deviceId, phone, timestamp) { function getCashOutReadySms (phone, timestamp) {
return Promise.all([ return customSms.getCustomMessage('cash_out_dispense_ready')
customSms.getCommonCustomMessages('cash_out_dispense_ready'), .then(msg => {
customSms.getMachineCustomMessages('cash_out_dispense_ready', deviceId) if (!_.isNil(msg)) {
]) const messageContent = _.replace('#timestamp', timestamp, msg.message)
.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)
return { return {
toNumber: phone, toNumber: phone,
body: messageContent body: messageContent

View file

@ -5,13 +5,10 @@ exports.up = function (next) {
`CREATE TYPE custom_message_event AS ENUM('sms_code', 'cash_out_dispense_ready')`, `CREATE TYPE custom_message_event AS ENUM('sms_code', 'cash_out_dispense_ready')`,
`CREATE TABLE custom_messages ( `CREATE TABLE custom_messages (
id UUID PRIMARY KEY, id UUID PRIMARY KEY,
event custom_message_event NOT NULL, event custom_message_event UNIQUE NOT NULL,
device_id TEXT REFERENCES devices(device_id),
message TEXT NOT NULL, message TEXT NOT NULL,
created TIMESTAMPTZ NOT NULL DEFAULT now() 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) db.multi(sql, next)

View file

@ -21,19 +21,14 @@ const GET_CUSTOM_MESSAGES = gql`
customMessages { customMessages {
id id
event event
deviceId
message message
} }
} }
` `
const CREATE_CUSTOM_MESSAGE = gql` const CREATE_CUSTOM_MESSAGE = gql`
mutation createCustomMessage( mutation createCustomMessage($event: CustomMessageEvent!, $message: String!) {
$event: CustomMessageEvent! createCustomMessage(event: $event, message: $message) {
$deviceId: String!
$message: String!
) {
createCustomMessage(event: $event, deviceId: $deviceId, message: $message) {
id id
} }
} }
@ -43,15 +38,9 @@ const EDIT_CUSTOM_MESSAGE = gql`
mutation editCustomMessage( mutation editCustomMessage(
$id: ID! $id: ID!
$event: CustomMessageEvent! $event: CustomMessageEvent!
$deviceId: String!
$message: String! $message: String!
) { ) {
editCustomMessage( editCustomMessage(id: $id, event: $event, message: $message) {
id: $id
event: $event
deviceId: $deviceId
message: $message
) {
id id
} }
} }
@ -65,15 +54,6 @@ const DELETE_CUSTOM_MESSAGE = gql`
} }
` `
const GET_MACHINES = gql`
{
machines {
name
deviceId
}
}
`
const EVENT_OPTIONS = [ const EVENT_OPTIONS = [
{ code: 'smsCode', display: 'On SMS confirmation code' }, { code: 'smsCode', display: 'On SMS confirmation code' },
{ code: 'cashOutDispenseReady', display: 'Cash out dispense ready' } { code: 'cashOutDispenseReady', display: 'Cash out dispense ready' }
@ -91,10 +71,6 @@ const CustomSMS = () => {
GET_CUSTOM_MESSAGES GET_CUSTOM_MESSAGES
) )
const { data: machinesData, loading: machinesLoading } = useQuery(
GET_MACHINES
)
const [createMessage] = useMutation(CREATE_CUSTOM_MESSAGE, { const [createMessage] = useMutation(CREATE_CUSTOM_MESSAGE, {
onError: ({ msg }) => setErrorMsg(msg), onError: ({ msg }) => setErrorMsg(msg),
refetchQueries: () => ['customMessages'] refetchQueries: () => ['customMessages']
@ -110,15 +86,7 @@ const CustomSMS = () => {
refetchQueries: () => ['customMessages'] refetchQueries: () => ['customMessages']
}) })
const loading = messagesLoading && machinesLoading const loading = messagesLoading
const machineOptions =
(machinesData &&
R.map(
it => ({ code: it.deviceId, display: it.name }),
R.path(['machines'])(machinesData)
)) ??
[]
const handleClose = () => { const handleClose = () => {
setSelectedSMS(null) setSelectedSMS(null)
@ -134,21 +102,12 @@ const CustomSMS = () => {
const elements = [ const elements = [
{ {
header: 'Event', header: 'Event',
width: 400, width: 600,
size: 'sm', size: 'sm',
textAlign: 'left', textAlign: 'left',
view: it => view: it =>
R.find(ite => R.propEq('event', ite.code, it), EVENT_OPTIONS).display 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', header: 'Edit',
width: 100, width: 100,
@ -195,7 +154,6 @@ const CustomSMS = () => {
<CustomSMSModal <CustomSMSModal
showModal={showModal} showModal={showModal}
onClose={handleClose} onClose={handleClose}
machineOptions={machineOptions}
eventOptions={EVENT_OPTIONS} eventOptions={EVENT_OPTIONS}
sms={selectedSMS} sms={selectedSMS}
creationError={errorMsg} creationError={errorMsg}

View file

@ -13,11 +13,6 @@ import styles from './CustomSMS.styles'
const useStyles = makeStyles(styles) const useStyles = makeStyles(styles)
const ALL_MACHINES = {
code: 'ALL_MACHINES',
display: 'All Machines'
}
const getErrorMsg = (formikErrors, formikTouched, mutationError) => { const getErrorMsg = (formikErrors, formikTouched, mutationError) => {
if (!formikErrors || !formikTouched) return null if (!formikErrors || !formikTouched) return null
if (mutationError) return 'Internal server error' if (mutationError) return 'Internal server error'
@ -67,7 +62,6 @@ const CustomSMSModal = ({
showModal, showModal,
onClose, onClose,
sms, sms,
machineOptions,
eventOptions, eventOptions,
creationError, creationError,
submit submit
@ -78,17 +72,11 @@ const CustomSMSModal = ({
const initialValues = { const initialValues = {
event: !R.isNil(sms) ? sms.event : '', event: !R.isNil(sms) ? sms.event : '',
device: !R.isNil(sms)
? !R.isNil(sms.deviceId)
? sms.deviceId
: 'ALL_MACHINES'
: '',
message: !R.isNil(sms) ? sms.message : '' message: !R.isNil(sms) ? sms.message : ''
} }
const validationSchema = Yup.object().shape({ const validationSchema = Yup.object().shape({
event: Yup.string().required('An event is required!'), event: Yup.string().required('An event is required!'),
device: Yup.string().required('A machine is required!'),
message: message:
prefill[selectedEvent]?.validator ?? prefill[selectedEvent]?.validator ??
Yup.string() Yup.string()
@ -102,14 +90,12 @@ const CustomSMSModal = ({
variables: { variables: {
id: sms.id, id: sms.id,
event: values.event, event: values.event,
deviceId: values.device,
message: values.message message: values.message
} }
}) })
: submit({ : submit({
variables: { variables: {
event: values.event, event: values.event,
deviceId: values.device,
message: values.message message: values.message
} }
}) })
@ -146,15 +132,6 @@ const CustomSMSModal = ({
valueProp="code" valueProp="code"
component={Autocomplete} component={Autocomplete}
/> />
<Field
name="device"
label="Machine"
fullWidth
options={[ALL_MACHINES].concat(machineOptions)}
labelProp="display"
valueProp="code"
component={Autocomplete}
/>
<Field <Field
name="message" name="message"
label="Message content" label="Message content"