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 database import db
|
||||||
from controller.usuario_controller import usuario_bp
|
from controller.usuario_controller import usuario_bp
|
||||||
from controller.dispositivo_controller import dispositivo_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
|
# Variaveis dinamicas que sao usadas para definir qual a porta do servidor e o host do mesmo
|
||||||
host = str(os.environ.get("HOST", "localhost"))
|
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))
|
db_password = int(os.environ.get("POSTGRES_PASSWORD_KEY", 123456789))
|
||||||
|
|
||||||
app = Flask(__name__)
|
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)
|
db.init_app(app)
|
||||||
app.register_blueprint(usuario_bp)
|
app.register_blueprint(usuario_bp)
|
||||||
app.register_blueprint(dispositivo_bp)
|
app.register_blueprint(dispositivo_bp)
|
||||||
|
app.register_blueprint(leitura_bp)
|
||||||
|
|
||||||
with app.app_context():
|
with app.app_context():
|
||||||
db.create_all()
|
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