SwapStation_WebApp/backend/models.py

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)