36 lines
1.6 KiB
Python
36 lines
1.6 KiB
Python
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)
|