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'));