42 lines
1.2 KiB
Python
42 lines
1.2 KiB
Python
from model.leitura import Leitura, LeituraNaoEncontrada
|
|
from dao.leitura_dao import LeituraDao
|
|
|
|
|
|
class LeituraService:
|
|
_instancia = None
|
|
|
|
@classmethod
|
|
def instancia(cls):
|
|
if cls._instancia is None:
|
|
cls._instancia = cls()
|
|
return cls._instancia
|
|
|
|
def __init__(self):
|
|
self.dao = LeituraDao.instancia()
|
|
|
|
def criar(self, dispositivo_id, payload):
|
|
leitura = Leitura(dispositivo_id=dispositivo_id, payload=payload)
|
|
return self.dao.criar(leitura)
|
|
|
|
def listar(self, dispositivo_id, desde=None, ate=None, limite=100):
|
|
return self.dao.listar_por_dispositivo(dispositivo_id, desde, ate, limite)
|
|
|
|
def estatisticas(self, dispositivo_id, campo):
|
|
leituras = self.dao.listar_por_dispositivo(dispositivo_id)
|
|
|
|
valores = [
|
|
l.payload[campo] for l in leituras
|
|
if campo in l.payload and isinstance(l.payload[campo], (int, float))
|
|
]
|
|
|
|
if not valores:
|
|
raise LeituraNaoEncontrada()
|
|
|
|
return {
|
|
"campo": campo,
|
|
"contagem": len(valores),
|
|
"minimo": min(valores),
|
|
"maximo": max(valores),
|
|
"media": round(sum(valores) / len(valores), 2)
|
|
}
|