from flask_sqlalchemy import SQLAlchemy from sqlalchemy.dialects.postgresql import JSONB # Create a SQLAlchemy instance. This will be linked to the Flask app in main.py. db = SQLAlchemy() class User(db.Model): """Represents a user in the database.""" id = db.Column(db.Integer, primary_key=True) username = db.Column(db.String(80), unique=True, nullable=False) password_hash = db.Column(db.String(120), nullable=False) class Station(db.Model): id = db.Column(db.Integer, primary_key=True) station_id = db.Column(db.String(120), unique=True, nullable=False) name = db.Column(db.String(120), nullable=True) location = db.Column(db.String(200), nullable=True) # --- ADD THESE NEW FIELDS --- mqtt_broker = db.Column(db.String(255), nullable=False) mqtt_port = db.Column(db.Integer, nullable=False) mqtt_user = db.Column(db.String(120), nullable=True) mqtt_password = db.Column(db.String(120), nullable=True) # --- Table for MQTT Logs (without raw payload) --- class MqttLog(db.Model): """Represents a single MQTT message payload for historical logging.""" id = db.Column(db.Integer, primary_key=True) timestamp = db.Column(db.DateTime, server_default=db.func.now()) station_id = db.Column(db.String(120), nullable=False, index=True) topic = db.Column(db.String(255), nullable=False) # --- NEW: Added topic_type for efficient filtering --- topic_type = db.Column(db.String(50), nullable=False, index=True) # JSONB is a highly efficient way to store JSON data in PostgreSQL payload = db.Column(JSONB)