Adiciona funcionalidade de leitura com o dao e o service

This commit is contained in:
Fernanda
2026-04-15 13:36:29 -03:00
parent f53e36a4a4
commit 158b7c2025
3 changed files with 75 additions and 1 deletions
+7 -1
View File
@@ -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()
+27
View File
@@ -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()
+41
View File
@@ -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)
}