84 lines
1.9 KiB
JavaScript
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
|