-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathserver.ts
51 lines (42 loc) · 1.69 KB
/
server.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
import {Firestore} from "@google-cloud/firestore";
import * as express from 'express';
import cors = require('cors');
import {check, validationResult} from "express-validator/check";
import pricesForOutcode from "./src/outcode";
import pricesForPosition from "./position";
import {validateLatitude, validateLongitude} from "./src/validate";
import {requestLogger, sendErrorResponses} from "./src/middleware";
const server = express();
const port = process.env.PORT || 5100;
server.use(cors({origin: /mdowds\.com$/}));
const db = new Firestore({
projectId: process.env.GCLOUD_PROJECT_ID,
timestampsInSnapshots: true
});
if (process.env.GCLOUD_KEY_FILE) db.settings({keyFilename: process.env.GCLOUD_KEY_FILE});
if (process.env.GCLOUD_PROJECT_ID && process.env.GCLOUD_SA_KEY) db.settings({
credentials: {
client_email: process.env.GCLOUD_CLIENT_EMAIL,
private_key: JSON.parse(`"${process.env.GCLOUD_SA_KEY}"`)
}
});
server.use(requestLogger);
server.get('/prices/outcode/:outcode',
check('outcode').isPostalCode('GB'),
sendErrorResponses,
(req, res) => {
const errors = validationResult(req);
if (!errors.isEmpty()) {
return res.status(400).json({ errors: errors.array() });
}
pricesForOutcode(db, req.params.outcode).then(output => res.send(output));
}
);
server.get('/prices/position',
[check('lat').toFloat().custom(validateLatitude), check('long').toFloat().custom(validateLongitude)],
sendErrorResponses,
(req, res) => {
pricesForPosition(db, {lat: req.query.lat, long: req.query.long}).then(output => res.send(output));
}
);
server.listen(port, () => console.log(`Server listening on port ${port}`));