Adiciona funcionalidade de leitura com o dao e o service
This commit is contained in:
@@ -3,6 +3,8 @@ from flask import Flask
|
||||
from database import db
|
||||
from controller.usuario_controller import usuario_bp
|
||||
from controller.dispositivo_controller import dispositivo_bp
|
||||
from controller.leitura_controller import leitura_bp
|
||||
import os
|
||||
|
||||
# Variaveis dinamicas que sao usadas para definir qual a porta do servidor e o host do mesmo
|
||||
host = str(os.environ.get("HOST", "localhost"))
|
||||
@@ -16,11 +18,15 @@ db_host = str(os.environ.get("POSTGRES_HOST_KEY", "127.0.0.1"))
|
||||
db_password = int(os.environ.get("POSTGRES_PASSWORD_KEY", 123456789))
|
||||
|
||||
app = Flask(__name__)
|
||||
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///graphics_analytics.db'
|
||||
app.config['SQLALCHEMY_DATABASE_URI'] = os.environ.get(
|
||||
'DATABASE_URL',
|
||||
'postgresql://postgres:postgres@localhost:5432/graphics_analytics'
|
||||
)
|
||||
|
||||
db.init_app(app)
|
||||
app.register_blueprint(usuario_bp)
|
||||
app.register_blueprint(dispositivo_bp)
|
||||
app.register_blueprint(leitura_bp)
|
||||
|
||||
with app.app_context():
|
||||
db.create_all()
|
||||
|
||||
@@ -0,0 +1,27 @@
|
||||
from model.leitura import Leitura
|
||||
from database import db
|
||||
|
||||
|
||||
class LeituraDao:
|
||||
_instancia = None
|
||||
|
||||
@classmethod
|
||||
def instancia(cls):
|
||||
if cls._instancia is None:
|
||||
cls._instancia = cls()
|
||||
return cls._instancia
|
||||
|
||||
def criar(self, leitura):
|
||||
db.session.add(leitura)
|
||||
db.session.commit()
|
||||
return leitura
|
||||
|
||||
def listar_por_dispositivo(self, dispositivo_id, desde=None, ate=None, limite=100):
|
||||
query = Leitura.query.filter_by(dispositivo_id=dispositivo_id)
|
||||
|
||||
if desde:
|
||||
query = query.filter(Leitura.criado_em >= desde)
|
||||
if ate:
|
||||
query = query.filter(Leitura.criado_em <= ate)
|
||||
|
||||
return query.order_by(Leitura.criado_em.desc()).limit(limite).all()
|
||||
@@ -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