From d5f0e04108b72d6544e3b1a304a1fc68c1f60cb6 Mon Sep 17 00:00:00 2001 From: Manoel Campos Date: Sat, 18 Jul 2020 11:05:59 -0300 Subject: [PATCH] Close #202 --- backend/controllers/localizacao.controller.js | 10 ++-------- database/postgres-estrutura.sql | 15 +++++++++++++++ 2 files changed, 17 insertions(+), 8 deletions(-) diff --git a/backend/controllers/localizacao.controller.js b/backend/controllers/localizacao.controller.js index cf3c2ea..15b99a3 100644 --- a/backend/controllers/localizacao.controller.js +++ b/backend/controllers/localizacao.controller.js @@ -35,14 +35,8 @@ exports.getUltimaLocalizacao = async (req, res) => { exports.getUltimaLocalizacaoTodos = async (req, res) => { const client = await db.connect(); try { - const seconds = 60 * 5; - const sql = - `select latitude, longitude - from localizacao_dispositivo l where l.id = - (select max(l2.id) from localizacao_dispositivo as l2 - where l2.uid = l.uid and - extract(epoch from (current_timestamp - l2.data_hora_ultima_atualizacao)) <= $1)`; - const resultado = await client.query(sql, [seconds]); + const sql = 'select latitude, longitude from vwUltimaLocalizacaoTodos'; + const resultado = await client.query(sql); res.status(200).send(resultado.rows); } catch (error) { diff --git a/database/postgres-estrutura.sql b/database/postgres-estrutura.sql index 69d191e..9d6c557 100644 --- a/database/postgres-estrutura.sql +++ b/database/postgres-estrutura.sql @@ -44,3 +44,18 @@ create table localizacao_dispositivo ( comment on column localizacao_dispositivo.latitude is 'Latitude em Graus Decimais'; comment on column localizacao_dispositivo.longitude is 'Longitude em Graus Decimais'; + + +create view vwUltimosDispositivosAtivos as +select uid, max(id) as id_localizacao from localizacao_dispositivo l +where extract(epoch from (current_timestamp - data_hora_ultima_atualizacao)) <= 300 +group by uid; + +comment on view vwUltimosDispositivosAtivos is 'Obtém os dispositivos que estiveram ativos nos últimos 5 minutos'; + +create view vwUltimaLocalizacaoTodos as +select latitude, longitude +from localizacao_dispositivo l +inner join vwUltimosDispositivosAtivos v on l.uid = v.uid and l.id = v.id_localizacao; + +comment on view vwUltimaLocalizacaoTodos is 'Obtém a localização dos dispositivos que estiveram ativos nos últimos 5 minutos';