Skip to content

Commit 8e01c53

Browse files
Add SMS notification when a reminder is already set.
1 parent 15352ea commit 8e01c53

File tree

4 files changed

+97
-26
lines changed

4 files changed

+97
-26
lines changed
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
@startuml
2+
skinparam sequenceMessageAlign center
3+
4+
User -> Server: 01-AB-23456
5+
Server -> User: We found case "01-AB-23456" on 7/28/2022 1:00 PM @ Family/Criminal Courtroom 2A Chittenden, VT.\nReply with YES if you would like a courtesy reminder the day before or reply with NO to start over.
6+
User -> Server: Yes
7+
Server -> User: A reminder to notify you on case "01-AB-23456" taking place on 7/28/2022 1:00 PM @ Family/Criminal\n Courtroom 2A Chittenden, VT has already been set.
8+
@enduml

docs/use-cases.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,9 @@
1616

1717
[![User finds a case but doesn't sign up for notification](https://tinyurl.com/2e5hkbzp)](https://tinyurl.com/2e5hkbzp)<!--![User finds a case but doesn't sign up for notification](./diagrams/case-found-no-reminder-set.puml)-->
1818

19+
## User signs up to receive a reminder the user has already signed up to receive a notification on
20+
[![User has already signed up to receive a reminder](https://tinyurl.com/2375cj3f)]<!--[![User has already signed up to receive a reminder](./diagrams/case-found-sign-up-for-reminder-reminder-already-set.puml)]-->
21+
1922
## User finds multiple cases
2023

2124
[![User finds multiple cases](https://tinyurl.com/2nab39j3)](https://tinyurl.com/2nab39j3)<!--![User finds multiple cases](./diagrams/multiple-cases.puml)-->

pages/api/sms/[instance]/index.ts

Lines changed: 79 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -135,23 +135,50 @@ const handleText = async (req:NextApiRequest, res:NextApiResponse, input:string,
135135
// let's check for a yes
136136
if (response.toLowerCase() === 'yes') {
137137
let c = cases[0];
138-
await ReminderDao.create({
138+
139+
// check if a reminder is already active
140+
const reminders = await ReminderDao.find({
141+
active: true,
139142
uid: c.uid,
140143
number: c.number,
141144
phone,
142-
});
145+
}).exec();
143146

144-
logger.info(`${phone} (${instance})[${state}]: reminder set`, { metadata: {
145-
service: `/api/sms/${instance}`,
146-
cookies,
147-
instance,
148-
input,
149-
phone,
150-
case: c,
151-
state,
152-
result: 'reminder set',
153-
}});
154-
res.send(smsResponse.reminderYes(c).toString());
147+
if (reminders.length === 0) {
148+
// create a new reminder document
149+
// if no 'active' reminder documents are found
150+
// matching the case uid, docket number, and phone number
151+
await ReminderDao.create({
152+
uid: c.uid,
153+
number: c.number,
154+
phone,
155+
});
156+
logger.info(`${phone} (${instance})[${state}]: reminder set`, { metadata: {
157+
service: `/api/sms/${instance}`,
158+
cookies,
159+
instance,
160+
input,
161+
phone,
162+
case: c,
163+
state,
164+
result: 'reminder set',
165+
}});
166+
res.send(smsResponse.reminderYes(c).toString());
167+
} else {
168+
// at least one reminder document in the collection already exists
169+
// for the phone number `phone` to be reminded about case docket `c.number`
170+
logger.info(`${phone} (${instance})[${state}]: reminder already set`, { metadata: {
171+
service: `/api/sms/${instance}`,
172+
cookies,
173+
instance,
174+
input,
175+
phone,
176+
case: c,
177+
state,
178+
result: 'reminder already set',
179+
}});
180+
res.send(smsResponse.reminderActive(c).toString(), instanceMethods.getTimezone());
181+
}
155182
}
156183
// send help due to unexpected response
157184
else {
@@ -179,23 +206,49 @@ const handleText = async (req:NextApiRequest, res:NextApiResponse, input:string,
179206
// if a number was given lets check to see if it maps to a case index
180207
if (response === parseInt(response).toString() && index >= 0 && index < cases.length) {
181208
let c = cases[index];
182-
await ReminderDao.create({
209+
// check if a reminder is already active
210+
const reminders = await ReminderDao.find({
211+
active: true,
183212
uid: c.uid,
184213
number: c.number,
185214
phone,
186-
});
215+
}).exec();
187216

188-
logger.info(`${phone} (${instance})[${state}]: reminder set`, { metadata: {
189-
service: `/api/sms/${instance}`,
190-
cookies,
191-
instance,
192-
input,
193-
phone,
194-
case: c,
195-
state,
196-
result: 'reminder set',
197-
}});
198-
res.send(smsResponse.reminderYes(c).toString());
217+
if (reminders.length === 0) {
218+
// create a new reminder document
219+
// if no 'active' reminder documents are found
220+
// matching the case uid, docket number, and phone number
221+
await ReminderDao.create({
222+
uid: c.uid,
223+
number: c.number,
224+
phone,
225+
});
226+
logger.info(`${phone} (${instance})[${state}]: reminder set`, { metadata: {
227+
service: `/api/sms/${instance}`,
228+
cookies,
229+
instance,
230+
input,
231+
phone,
232+
case: c,
233+
state,
234+
result: 'reminder set',
235+
}});
236+
res.send(smsResponse.reminderYes(c).toString());
237+
} else {
238+
// at least one reminder document in the collection already exists
239+
// for the phone number `phone` to be reminded about case docket `c.number`
240+
logger.info(`${phone} (${instance})[${state}]: reminder already set`, { metadata: {
241+
service: `/api/sms/${instance}`,
242+
cookies,
243+
instance,
244+
input,
245+
phone,
246+
case: c,
247+
state,
248+
result: 'reminder already set',
249+
}});
250+
res.send(smsResponse.reminderActive(c).toString(), instanceMethods.getTimezone());
251+
}
199252
}
200253
// send help due to unexpected response
201254
else {

utils/sms-response.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,11 +53,18 @@ const reminderNo = (website:string) => {
5353
return resp;
5454
};
5555

56+
const reminderActive = (c:Case, timezone = 'America/New_York')) => {
57+
var resp = new MessagingResponse();
58+
resp.message(`A reminder to notify you on case "${c.number}" taking place on ${moment(c.date).tz(timezone).format('l LT')} @ ${c.address} has already been set.`);
59+
return resp;
60+
}
61+
5662
export default {
5763
caseNotFound,
5864
caseFound,
5965
error,
6066
help,
67+
reminderActive,
6168
reminderNo,
6269
reminderYes,
6370
};

0 commit comments

Comments
 (0)