141 lines
4.1 KiB
JavaScript
141 lines
4.1 KiB
JavaScript
const util = require('util');
|
|
const express = require('express');
|
|
const sqlite = require('sqlite3');
|
|
const request = require('sync-request');
|
|
|
|
const app = express();
|
|
|
|
const persona_db = new sqlite.Database('./counter_persona.db', (err) => {
|
|
if(err) {
|
|
console.log(err.message);
|
|
exit(1);
|
|
}
|
|
|
|
persona_db.exec(`
|
|
CREATE TABLE IF NOT EXISTS persona (
|
|
id unsigned int primary key not null,
|
|
first_name text not null,
|
|
last_name text not null,
|
|
interest_list text not null,
|
|
latitude real not null,
|
|
longitude real not null
|
|
);
|
|
`);
|
|
});
|
|
|
|
function on_err(err_str, err_code) {
|
|
console.log(err_str);
|
|
return {
|
|
"err": err_str,
|
|
"code": err_code,
|
|
};
|
|
};
|
|
|
|
function insert_update_persona(user_params) {
|
|
persona_db.get("SELECT * FROM persona WHERE id = ?", [user_params.persona_id], (err, row) => {
|
|
if(row == undefined) {
|
|
persona_db.run(`
|
|
insert into persona
|
|
(id, first_name, last_name, interest_list, latitude, longitude)
|
|
values (?, ?, ?, ?, ?, ?)
|
|
`, [
|
|
user_params.persona_id,
|
|
user_params.first_name,
|
|
user_params.last_name,
|
|
user_params.interest_list,
|
|
user_params.lat,
|
|
user_params.lon
|
|
], (err) => {
|
|
if(err) {
|
|
console.log(err.message);
|
|
}
|
|
});
|
|
} else {
|
|
persona_db.run(`
|
|
UPDATE persona SET
|
|
first_name = ?,
|
|
last_name = ?,
|
|
interest_list = ?,
|
|
latitude = ?,
|
|
longitude = ?
|
|
WHERE id = ?
|
|
`, [
|
|
user_params.first_name,
|
|
user_params.last_name,
|
|
user_params.interest_list,
|
|
user_params.lat,
|
|
user_params.lon,
|
|
user_params.persona_id
|
|
], (err) => {
|
|
if(err) {
|
|
console.log(err.message);
|
|
}
|
|
});
|
|
}
|
|
});
|
|
};
|
|
|
|
function get_weather(user_params) {
|
|
my_headers = {headers: {'user-agent': "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.60 Safari/537.36"}};
|
|
weather_url = util.format("https://api.weather.gov/points/%d,%d", user_params.latitude, user_params.longitude);
|
|
|
|
data = request('GET', weather_url, my_headers);
|
|
|
|
data = JSON.parse(data.getBody());
|
|
|
|
user_params.city = data.properties.relativeLocation.properties.city;
|
|
user_params.state = data.properties.relativeLocation.properties.state;
|
|
|
|
data = request('GET', data.properties.forecast, my_headers);
|
|
|
|
data = JSON.parse(data.getBody());
|
|
|
|
user_params.temperature = data.properties.periods[0].temperature;
|
|
|
|
return user_params;
|
|
};
|
|
|
|
app.get('/get_persona', function(req, res) {
|
|
// Gather params
|
|
user_params = {
|
|
persona_id: Number(req.query.persona_id),
|
|
};
|
|
|
|
persona_db.get("SELECT * FROM persona WHERE id = ?", [user_params.persona_id], (err, row) => {
|
|
if(err) {
|
|
console.error(err.message);
|
|
}
|
|
user_params = row;
|
|
user_params = get_weather(user_params);
|
|
console.log(user_params);
|
|
res.send(user_params);
|
|
});
|
|
});
|
|
|
|
app.get('/set_persona', function(req, res) {
|
|
// Gather params
|
|
user_params = {
|
|
persona_id: parseInt(req.query.persona_id),
|
|
first_name: req.query.first_name,
|
|
last_name: req.query.last_name,
|
|
interest_list: req.query.interest_list,
|
|
lat: Number(req.query.lat),
|
|
lon: Number(req.query.lon),
|
|
};
|
|
|
|
// Verify params
|
|
for(const key in user_params) {
|
|
if(user_params[key] == undefined) {
|
|
res.send(on_err(util.format('%s must be defined', key), 1));
|
|
return;
|
|
}
|
|
}
|
|
|
|
insert_update_persona(user_params);
|
|
|
|
res.send(user_params);
|
|
});
|
|
|
|
app.listen(3000, () => console.log('Server ready'));
|
|
|