colouring-montreal/apiserver/app.js
2018-08-08 09:07:55 +01:00

84 lines
1.9 KiB
JavaScript

/**
* Express app
*/
const express = require('express')
// db connection pool
const db = require('./db')
// set up app
const app = express()
// building geometry by lat/lon - TODO join geometry against buildings
app.get('/buildings', function(req, res){
const { lng, lat } = req.query
db.query(
`SELECT
b.building_id as id,
b.building_doc as doc,
g.geometry_id as geometry_id
FROM buildings as b, geometries as g
WHERE
b.geometry_id = g.geometry_id
AND
ST_Intersects(
ST_Transform(
ST_SetSRID(ST_Point($1, $2), 4326),
3857
),
g.geometry_geom
)
LIMIT 1
`,
[lng, lat]
).then(function(data){
const rows = data.rows
if (rows.length){
const id = rows[0].id
const doc = rows[0].doc
const geometry_id = rows[0].geometry_id
console.log(lng, lat, id)
doc.id = id
doc.geometry_id = geometry_id
res.send(doc)
} else {
console.log(lng, lat, undefined)
res.status(404).send({error:'Not Found'})
}
}).catch(function(error){
console.error('Error:', error)
res.status(500).send({error:'Database error'})
})
})
app.post('/user', function(req, res){
db.query(
`INSERT
INTO users (
user_id,
username,
email,
pass
) VALUES (
gen_random_uuid(),
%s,
%s,
crypt(%s, gen_salt('bf')); -- hash (max password input length is 72)
)
`
)
})
app.get('/user', function(req, res){
db.query(
`SELECT
(
hash = crypt(%s, pass)
) AS authenticated
FROM;
`
)
})
module.exports = app