HeshamTB
2b4d3bf7f5
A counter is associated with every Iot Device. The counter is always increment when a user is allowed or disallowed to use the device, hence, ensuring coherency. It is also now exposed in the IotDoorPollingRequest schema, enabling the Iot Device to fetch the new access list. Signed-off-by: HeshamTB <hishaminv@gmail.com>
58 lines
2.1 KiB
Python
58 lines
2.1 KiB
Python
from sqlalchemy import Boolean, Column, ForeignKey, Integer, String, DateTime
|
|
from sqlalchemy.orm import relationship
|
|
|
|
from .database import Base
|
|
|
|
|
|
class User(Base):
|
|
__tablename__ = "user_accounts"
|
|
|
|
id = Column(Integer, primary_key=True, index=True)
|
|
email = Column(String, unique=True, index=True, nullable=False)
|
|
username = Column(String, unique=True, index=True, nullable=False)
|
|
hashed_password = Column(String, nullable=False)
|
|
passwd_salt = Column(String, nullable=False)
|
|
is_active = Column(Boolean, default=True, nullable=False)
|
|
last_token = Column(String, nullable=True)
|
|
|
|
authorized_devices = relationship("IotEntity", secondary="user_iot_link", back_populates="authorized_users")
|
|
|
|
|
|
class IotEntity(Base):
|
|
__tablename__ = "iot_entities"
|
|
|
|
id = Column(Integer, primary_key=True, index=True)
|
|
bluetooth_mac = Column(String(512))
|
|
description = Column(String(512))
|
|
open_request = Column(Boolean, default=False)
|
|
time_seconds = Column(Integer, default=10)
|
|
acces_list_counter = Column(Integer, default=0)
|
|
authorized_users = relationship("User", secondary="user_iot_link", back_populates="authorized_devices")
|
|
|
|
class UserAuthToIoTDev(Base):
|
|
__tablename__ = "user_iot_link"
|
|
|
|
user_id = Column(Integer, ForeignKey("user_accounts.id"), primary_key=True)
|
|
iot_id = Column(Integer, ForeignKey("iot_entities.id"), primary_key=True)
|
|
timestamp = Column(DateTime)
|
|
|
|
class DoorAccessLog(Base):
|
|
__tablename__ = "door_access_log"
|
|
|
|
entry_id = Column(Integer, primary_key=True, index=True)
|
|
user_id = Column(Integer, ForeignKey('user_accounts.id'))
|
|
iot_dev_bluetooth_mac = Column(Integer, ForeignKey('iot_entities.id'))
|
|
timestamp = Column(DateTime)
|
|
|
|
class RoomSensorData(Base):
|
|
__tablename__ = "room_sensor_data"
|
|
|
|
# Data is now not related to a room. We should have a construct for rooms
|
|
reading_id = Column(Integer, primary_key=True, index=True)
|
|
humidity = Column(Integer)
|
|
people = Column(Integer)
|
|
temperature = Column(Integer)
|
|
smoke_sensor_reading = Column(Integer)
|
|
timestamp = Column(DateTime)
|
|
|
|
# TODO: Add table to store active sessions. May periodically clear. |