diff options
| author | Matheus <matheus.guedes.mg.m@gmail.com> | 2025-10-28 21:08:46 -0300 |
|---|---|---|
| committer | Matheus <matheus.guedes.mg.m@gmail.com> | 2025-10-28 21:08:46 -0300 |
| commit | b4187a0c9a5eb2542c40918481698d02d3cbd099 (patch) | |
| tree | 8f3ff397dd3d9603d0590e5725d8d2f5386dbbcd | |
| parent | 0c5b080efac82b1d196e3dde00e5950c97ecbb68 (diff) | |
| parent | ba527291e59f1c4cc28b68e4fe119c44a95ab3f6 (diff) | |
Merge branch 'master' of github.com:Simplesmente-O-Grupo/iot-monitoring
| -rw-r--r-- | api/Dockerfile (renamed from mqtt_client/crud.py) | 0 | ||||
| -rw-r--r-- | api/__init__.py (renamed from mqtt_client/schemas.py) | 0 | ||||
| -rw-r--r-- | api/database.py | 10 | ||||
| -rw-r--r-- | api/main.py | 0 | ||||
| -rw-r--r-- | api/models.py | 81 | ||||
| -rw-r--r-- | api/requirements.txt | 0 | ||||
| -rw-r--r-- | api/routes/__init__.py | 0 | ||||
| -rw-r--r-- | api/routes/locations.py | 0 | ||||
| -rw-r--r-- | api/routes/measures.py | 0 | ||||
| -rw-r--r-- | api/routes/readings.py | 0 | ||||
| -rw-r--r-- | api/routes/sensors.py | 0 | ||||
| -rw-r--r-- | api/routes/stations.py | 0 | ||||
| -rw-r--r-- | api/schemas/__init__.py | 0 | ||||
| -rw-r--r-- | api/schemas/location.py | 0 | ||||
| -rw-r--r-- | api/schemas/measures.py | 0 | ||||
| -rw-r--r-- | api/schemas/reading.py | 0 | ||||
| -rw-r--r-- | api/schemas/sensor.py | 0 | ||||
| -rw-r--r-- | api/schemas/station.py | 0 | ||||
| -rw-r--r-- | api/services/__init__.py | 0 |
19 files changed, 91 insertions, 0 deletions
diff --git a/mqtt_client/crud.py b/api/Dockerfile index e69de29..e69de29 100644 --- a/mqtt_client/crud.py +++ b/api/Dockerfile diff --git a/mqtt_client/schemas.py b/api/__init__.py index e69de29..e69de29 100644 --- a/mqtt_client/schemas.py +++ b/api/__init__.py diff --git a/api/database.py b/api/database.py new file mode 100644 index 0000000..c0691a1 --- /dev/null +++ b/api/database.py @@ -0,0 +1,10 @@ +from sqlalchemy import create_engine +from sqlalchemy.ext.declarative import declarative_base +from sqlalchemy.orm import sessionmaker +import os + +DATABASE_URL = os.getenv("DATABASE_URL", "postgresql://root:public@postgres:5432/control_station") + +engine = create_engine(DATABASE_URL) +SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine) +Base = declarative_base() diff --git a/api/main.py b/api/main.py new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/api/main.py diff --git a/api/models.py b/api/models.py new file mode 100644 index 0000000..d6bd2ba --- /dev/null +++ b/api/models.py @@ -0,0 +1,81 @@ +from sqlalchemy import Column, Integer, String, Float, DateTime, ForeignKey, Boolean +from sqlalchemy.orm import relationship +from sqlalchemy.sql import func +from database import Base + +# ---------------------------- +# Location +# ---------------------------- +class Location(Base): + __tablename__ = "locations" + + id = Column(Integer, primary_key=True, index=True) + street = Column(String(200), nullable=True, index=True) + avenue = Column(String(200), nullable=True, index=True) + zip_code = Column(String(20), nullable=True, index=True) + + # Relationship: One location to many stations + stations = relationship("Station", back_populates="location") + + +# ---------------------------- +# Station +# ---------------------------- +class Station(Base): + __tablename__ = "stations" + + id = Column(Integer, primary_key=True, index=True) + name = Column(String(100), nullable=False, index=True) + location_id = Column(Integer, ForeignKey("locations.id"), nullable=True, index=True) + installation_date = Column(DateTime, server_default=func.now()) + is_active = Column(Boolean, default=True) + + # Relationships + location = relationship("Location", back_populates="stations") + sensor_devices = relationship("SensorDevice", back_populates="station") + + +# ---------------------------- +# SensorDevice +# ---------------------------- +class SensorDevice(Base): + __tablename__ = "sensor_devices" + + id = Column(Integer, primary_key=True, index=True) + name = Column(String(100), nullable=True, index=True) + installation_date = Column(DateTime, server_default=func.now()) + station_id = Column(Integer, ForeignKey("stations.id"), nullable=True, index=True) + is_active = Column(Boolean, default=True) + + # Relationships + station = relationship("Station", back_populates="sensor_devices") + readings = relationship("Reading", back_populates="sensor_device") + + +# ---------------------------- +# Measure +# ---------------------------- +class Measure(Base): + __tablename__ = "measures" + + id = Column(Integer, primary_key=True, index=True) + name = Column(String(50), nullable=True, index=True) + + # Relationships + readings = relationship("Reading", back_populates="measure") + + +# ---------------------------- +# Reading +# ---------------------------- +class Reading(Base): + __tablename__ = "readings" + + id = Column(Integer, primary_key=True, index=True) + sensor_device_id = Column(Integer, ForeignKey("sensor_devices.id"), nullable=True, index=True) + measure_id = Column(Integer, ForeignKey("measures.id"), nullable=True, index=True) + value = Column(Float, nullable=True) + + # Relationships + sensor_device = relationship("SensorDevice", back_populates="readings") + measure = relationship("Measure", back_populates="readings") diff --git a/api/requirements.txt b/api/requirements.txt new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/api/requirements.txt diff --git a/api/routes/__init__.py b/api/routes/__init__.py new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/api/routes/__init__.py diff --git a/api/routes/locations.py b/api/routes/locations.py new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/api/routes/locations.py diff --git a/api/routes/measures.py b/api/routes/measures.py new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/api/routes/measures.py diff --git a/api/routes/readings.py b/api/routes/readings.py new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/api/routes/readings.py diff --git a/api/routes/sensors.py b/api/routes/sensors.py new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/api/routes/sensors.py diff --git a/api/routes/stations.py b/api/routes/stations.py new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/api/routes/stations.py diff --git a/api/schemas/__init__.py b/api/schemas/__init__.py new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/api/schemas/__init__.py diff --git a/api/schemas/location.py b/api/schemas/location.py new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/api/schemas/location.py diff --git a/api/schemas/measures.py b/api/schemas/measures.py new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/api/schemas/measures.py diff --git a/api/schemas/reading.py b/api/schemas/reading.py new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/api/schemas/reading.py diff --git a/api/schemas/sensor.py b/api/schemas/sensor.py new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/api/schemas/sensor.py diff --git a/api/schemas/station.py b/api/schemas/station.py new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/api/schemas/station.py diff --git a/api/services/__init__.py b/api/services/__init__.py new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/api/services/__init__.py |
