diff options
| -rw-r--r-- | .gitignore | 1 | ||||
| -rw-r--r-- | package-lock.json | 6 | ||||
| -rw-r--r-- | package.json | 1 | ||||
| -rw-r--r-- | src/app.js | 3 | ||||
| -rw-r--r-- | src/db.js | 30 |
5 files changed, 40 insertions, 1 deletions
@@ -1 +1,2 @@ node_modules +data.json
\ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 564139f..8dd377b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,6 +8,7 @@ "dependencies": { "body-parser": "^1.20.2", "express": "^4.18.3", + "fs": "^0.0.1-security", "twilio": "^4.23.0" }, "devDependencies": { @@ -543,6 +544,11 @@ "node": ">= 0.6" } }, + "node_modules/fs": { + "version": "0.0.1-security", + "resolved": "https://registry.npmjs.org/fs/-/fs-0.0.1-security.tgz", + "integrity": "sha512-3XY9e1pP0CVEUCdj5BmfIZxRBTSDycnbqhIOGec9QYtmVH2fbLpj86CFWkrNOkt/Fvty4KZG5lTglL9j/gJ87w==" + }, "node_modules/function-bind": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", diff --git a/package.json b/package.json index dbbdaae..5df1265 100644 --- a/package.json +++ b/package.json @@ -5,6 +5,7 @@ "dependencies": { "body-parser": "^1.20.2", "express": "^4.18.3", + "fs": "^0.0.1-security", "twilio": "^4.23.0" }, "devDependencies": { @@ -1,9 +1,10 @@ const bodyParser = require('body-parser'); const express = require('express'); -const { isSubscribed, getSubscriptions, getSubscriptionFromNumber, subscribe } = require('./db'); +const { isSubscribed, getSubscriptions, getSubscriptionFromNumber, subscribe, load: loadData } = require('./db'); const { sendTextMessage } = require('./sendTextMessage'); const { MessagingResponse } = require('twilio').twiml; +loadData(); const app = express(); app.use(bodyParser.urlencoded({ extended: false })); @@ -1,6 +1,8 @@ // Ideally, we should write to a file and read it at app start in case of crashes. // An actual SQL database would probably be overkill. +const { readFileSync, writeFile } = require("fs"); + /** @type Array<{ name: string, number: string }> */ const subscriptions = []; @@ -11,6 +13,7 @@ const subscriptions = []; function subscribe(number, name) { const subscription = { name, number }; subscriptions.push(subscription); + void save(); return subscription; } @@ -37,9 +40,36 @@ function getSubscriptionFromNumber(number) { return subscriptions.find(sub => sub.number === number); } +async function save() { + try { + await writeFile('../data.json', JSON.stringify({ subscriptions })); + } catch (err) { + if (typeof err === 'string') { + console.error(`Error writing data: ${err}`); + } else { + console.error(`Error writing data: ${JSON.stringify(err)}`); + } + } +} + +function load() { + try { + const data = JSON.parse(readFileSync('../data.json')); + while (subscriptions.pop()) {} + subscriptions.push(...data['subscriptions']); + } catch (err){ + if (typeof err === 'string') { + console.error(`Error reading data: ${err}`); + } else { + console.error(`Error reading data: ${JSON.stringify(err)}`); + } + } +} + module.exports = { subscribe, isSubscribed, getSubscriptions, getSubscriptionFromNumber, + load, };
\ No newline at end of file |
