BOD-14 Baseline server-side send,receive,status APIs created

This commit is contained in:
Patrick Fic
2020-03-25 16:49:42 -07:00
parent 84a5820d8d
commit 546d2d82b7
25 changed files with 547 additions and 12 deletions

View File

@@ -54,7 +54,10 @@ export function ChatConversationComponent({
}}
size='small'>
{conversation.open ? (
<ChatConversationOpenComponent messages={messages} />
<ChatConversationOpenComponent
messages={messages}
conversation={conversation}
/>
) : (
<ChatConversationClosedComponent conversation={conversation} />
)}

View File

@@ -16,14 +16,13 @@ const mapDispatchToProps = dispatch => ({
function ChatSendMessageComponent({ conversation, bodyshop, sendMessage }) {
const [message, setMessage] = useState("");
const { t } = useTranslation();
console.log("message", message);
const handleEnter = () => {
console.log("Sending that message ");
sendMessage({
to: conversation.phone,
body: message,
messagingServiceSid: bodyshop.messagingservicesid
messagingServiceSid: bodyshop.messagingservicesid,
conversationid: conversation.id
});
};

View File

@@ -6,7 +6,8 @@ import axios from "axios";
export function* onSendMessage() {
yield takeLatest(MessagingActionTypes.SEND_MESSAGE, sendMessage);
}
export function* sendMessage(payload) {
export function* sendMessage({ payload }) {
console.log("In the saga.");
try {
console.log("Message Contents", payload);
axios.post("/sms/send", payload).then(response => {

View File

@@ -0,0 +1,39 @@
- args:
role: user
table:
name: messages
schema: public
type: drop_insert_permission
- args:
permission:
check:
conversation:
bodyshop:
associations:
_and:
- user:
authid:
_eq: X-Hasura-User-Id
- active:
_eq: true
columns:
- id
- created_at
- updated_at
- msid
- conversationid
- text
- image
- image_path
- sent
- delivered
- isoutbound
localPresets:
- key: ""
value: ""
set: {}
role: user
table:
name: messages
schema: public
type: create_insert_permission

View File

@@ -0,0 +1,37 @@
- args:
role: user
table:
name: messages
schema: public
type: drop_insert_permission
- args:
permission:
check:
conversation:
bodyshop:
associations:
_and:
- user:
authid:
_eq: X-Hasura-User-Id
- active:
_eq: true
columns:
- conversationid
- created_at
- id
- image
- image_path
- isoutbound
- msid
- text
- updated_at
localPresets:
- key: ""
value: ""
set: {}
role: user
table:
name: messages
schema: public
type: create_insert_permission

View File

@@ -0,0 +1,37 @@
- args:
role: user
table:
name: messages
schema: public
type: drop_select_permission
- args:
permission:
allow_aggregations: false
columns:
- delivered
- image
- isoutbound
- sent
- image_path
- msid
- text
- created_at
- updated_at
- conversationid
- id
computed_fields: []
filter:
conversation:
bodyshop:
associations:
_and:
- user:
authid:
_eq: X-Hasura-User-Id
- active:
_eq: true
role: user
table:
name: messages
schema: public
type: create_select_permission

View File

@@ -0,0 +1,35 @@
- args:
role: user
table:
name: messages
schema: public
type: drop_select_permission
- args:
permission:
allow_aggregations: false
columns:
- conversationid
- created_at
- id
- image
- image_path
- isoutbound
- msid
- text
- updated_at
computed_fields: []
filter:
conversation:
bodyshop:
associations:
_and:
- user:
authid:
_eq: X-Hasura-User-Id
- active:
_eq: true
role: user
table:
name: messages
schema: public
type: create_select_permission

View File

@@ -0,0 +1,39 @@
- args:
role: user
table:
name: messages
schema: public
type: drop_update_permission
- args:
permission:
columns:
- delivered
- image
- isoutbound
- sent
- image_path
- msid
- text
- created_at
- updated_at
- conversationid
- id
filter:
conversation:
bodyshop:
associations:
_and:
- user:
authid:
_eq: X-Hasura-User-Id
- active:
_eq: true
localPresets:
- key: ""
value: ""
set: {}
role: user
table:
name: messages
schema: public
type: create_update_permission

View File

@@ -0,0 +1,37 @@
- args:
role: user
table:
name: messages
schema: public
type: drop_update_permission
- args:
permission:
columns:
- conversationid
- created_at
- id
- image
- image_path
- isoutbound
- msid
- text
- updated_at
filter:
conversation:
bodyshop:
associations:
_and:
- user:
authid:
_eq: X-Hasura-User-Id
- active:
_eq: true
localPresets:
- key: ""
value: ""
set: {}
role: user
table:
name: messages
schema: public
type: create_update_permission

View File

@@ -0,0 +1,15 @@
- args:
cascade: false
read_only: false
sql: ALTER TABLE "public"."messages" ADD COLUMN "delivered" bool;
type: run_sql
- args:
cascade: false
read_only: false
sql: ALTER TABLE "public"."messages" ALTER COLUMN "delivered" DROP NOT NULL;
type: run_sql
- args:
cascade: false
read_only: false
sql: ALTER TABLE "public"."messages" ALTER COLUMN "delivered" SET DEFAULT false;
type: run_sql

View File

@@ -0,0 +1,5 @@
- args:
cascade: false
read_only: false
sql: ALTER TABLE "public"."messages" DROP COLUMN "delivered" CASCADE;
type: run_sql

View File

@@ -0,0 +1,15 @@
- args:
cascade: false
read_only: false
sql: ALTER TABLE "public"."messages" ADD COLUMN "sent" bool;
type: run_sql
- args:
cascade: false
read_only: false
sql: ALTER TABLE "public"."messages" ALTER COLUMN "sent" DROP NOT NULL;
type: run_sql
- args:
cascade: false
read_only: false
sql: ALTER TABLE "public"."messages" ALTER COLUMN "sent" SET DEFAULT false;
type: run_sql

View File

@@ -0,0 +1,5 @@
- args:
cascade: false
read_only: false
sql: ALTER TABLE "public"."messages" DROP COLUMN "sent" CASCADE;
type: run_sql

View File

@@ -0,0 +1,5 @@
- args:
cascade: false
read_only: false
sql: ALTER TABLE "public"."messages" DROP COLUMN "status";
type: run_sql

View File

@@ -0,0 +1,6 @@
- args:
cascade: false
read_only: false
sql: ALTER TABLE "public"."messages" ADD COLUMN "status" text NOT NULL DEFAULT
'posted';
type: run_sql

View File

@@ -0,0 +1,37 @@
- args:
role: user
table:
name: messages
schema: public
type: drop_insert_permission
- args:
permission:
check:
conversation:
bodyshop:
associations:
_and:
- user:
authid:
_eq: X-Hasura-User-Id
- active:
_eq: true
columns:
- conversationid
- created_at
- id
- image
- image_path
- isoutbound
- msid
- text
- updated_at
localPresets:
- key: ""
value: ""
set: {}
role: user
table:
name: messages
schema: public
type: create_insert_permission

View File

@@ -0,0 +1,38 @@
- args:
role: user
table:
name: messages
schema: public
type: drop_insert_permission
- args:
permission:
check:
conversation:
bodyshop:
associations:
_and:
- user:
authid:
_eq: X-Hasura-User-Id
- active:
_eq: true
columns:
- id
- created_at
- updated_at
- msid
- conversationid
- text
- image
- image_path
- isoutbound
- status
localPresets:
- key: ""
value: ""
set: {}
role: user
table:
name: messages
schema: public
type: create_insert_permission

View File

@@ -0,0 +1,35 @@
- args:
role: user
table:
name: messages
schema: public
type: drop_select_permission
- args:
permission:
allow_aggregations: false
columns:
- conversationid
- created_at
- id
- image
- image_path
- isoutbound
- msid
- text
- updated_at
computed_fields: []
filter:
conversation:
bodyshop:
associations:
_and:
- user:
authid:
_eq: X-Hasura-User-Id
- active:
_eq: true
role: user
table:
name: messages
schema: public
type: create_select_permission

View File

@@ -0,0 +1,36 @@
- args:
role: user
table:
name: messages
schema: public
type: drop_select_permission
- args:
permission:
allow_aggregations: false
columns:
- conversationid
- created_at
- id
- image
- image_path
- isoutbound
- msid
- status
- text
- updated_at
computed_fields: []
filter:
conversation:
bodyshop:
associations:
_and:
- user:
authid:
_eq: X-Hasura-User-Id
- active:
_eq: true
role: user
table:
name: messages
schema: public
type: create_select_permission

View File

@@ -0,0 +1,37 @@
- args:
role: user
table:
name: messages
schema: public
type: drop_update_permission
- args:
permission:
columns:
- conversationid
- created_at
- id
- image
- image_path
- isoutbound
- msid
- text
- updated_at
filter:
conversation:
bodyshop:
associations:
_and:
- user:
authid:
_eq: X-Hasura-User-Id
- active:
_eq: true
localPresets:
- key: ""
value: ""
set: {}
role: user
table:
name: messages
schema: public
type: create_update_permission

View File

@@ -0,0 +1,38 @@
- args:
role: user
table:
name: messages
schema: public
type: drop_update_permission
- args:
permission:
columns:
- image
- isoutbound
- image_path
- msid
- status
- text
- created_at
- updated_at
- conversationid
- id
filter:
conversation:
bodyshop:
associations:
_and:
- user:
authid:
_eq: X-Hasura-User-Id
- active:
_eq: true
localPresets:
- key: ""
value: ""
set: {}
role: user
table:
name: messages
schema: public
type: create_update_permission

View File

@@ -40,7 +40,11 @@ app.post(
var smsSend = require("./server/sms/send");
app.post("/sms/send", smsSend.send);
var smsStatus = require("./server/sms/status");
app.post("/sms/status", smsStatus.status);
app.post(
"/sms/status",
twilio.webhook({ validate: process.env.NODE_ENV === "PRODUCTION" }),
smsStatus.status
);
var downloadImages = require("./download-images");
app.get("/downloadImages", downloadImages.downloadImages);

View File

@@ -21,3 +21,13 @@ mutation INSERT_MESSAGE($msg: [messages_insert_input!]!) {
}
}
`;
exports.UPDATE_MESSAGE_STATUS = `
mutation UPDATE_MESSAGE($msid: String!, $fields: messages_set_input!) {
update_messages(where: { msid: { _eq: $msid } }, _set: $fields) {
returning {
id
}
}
}
`;

View File

@@ -1,16 +1,24 @@
require("dotenv").config();
const twilio = require("twilio");
const phone = require("phone");
const queries = require("../graphql-client/queries");
const client = twilio(
process.env.TWILIO_AUTH_TOKEN,
process.env.TWILIO_AUTH_KEY
);
const gqlClient = require("../graphql-client/graphql-client").client;
exports.send = (req, res) => {
console.log("Sending an SMS!");
const { to, messagingServiceSid, body, conversationid } = req.body;
console.log(
"to, messagingServiceSid, body, conversationid",
to,
messagingServiceSid,
body,
conversationid
);
if (!!to && !!messagingServiceSid && !!body && !!conversationid) {
client.messages
.create({
@@ -25,16 +33,20 @@ exports.send = (req, res) => {
conversationid,
isoutbound: true
};
client
gqlClient
.request(queries.INSERT_MESSAGE, { msg: newMessage })
.then(r2 => {
res.sendStatus(200);
})
.catch(e2 => {
res.json({ success: false, message: e2 });
console.log("e2", e2);
//res.json({ success: false, message: e2 });
});
})
.catch(error => res.json({ success: false, message: error }));
.catch(e1 => {
//res.json({ success: false, message: error });
console.log("e1", e1);
});
} else {
res.json({ success: false, message: "Missing required parameter(s)." });
}

View File

@@ -4,8 +4,18 @@ const queries = require("../graphql-client/queries");
const phone = require("phone");
exports.status = (req, res) => {
//Perform request validation
console.log("Inbound Status Update: ", JSON.stringify(req.body));
const { SmsSid, SmsStatus } = req.body;
client
.request(queries.UPDATE_MESSAGE_STATUS, {
msid: SmsSid,
fields: { status: SmsStatus }
})
.then(response => {
console.log("Message Updated");
})
.catch(error => {
console.log("Error updating message status", error);
});
res.sendStatus(200);
};