Adiciona funcionalidade de leitura com o dao e o service
This commit is contained in:
@@ -0,0 +1,41 @@
|
||||
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)
|
||||
}
|
||||
Reference in New Issue
Block a user