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>
113 lines
2.3 KiB
Python
113 lines
2.3 KiB
Python
from typing import Any, List, Optional
|
|
|
|
from pydantic import BaseModel
|
|
from datetime import datetime
|
|
|
|
|
|
class IotEntityBase(BaseModel):
|
|
bluetooth_mac: str
|
|
description: str
|
|
|
|
class UserBase(BaseModel):
|
|
email: str
|
|
username: str
|
|
|
|
class IotEntityCreate(IotEntityBase):
|
|
pass
|
|
|
|
|
|
class UserCreate(UserBase):
|
|
password: str
|
|
|
|
class IotEntity(IotEntityBase):
|
|
id: int
|
|
description: str
|
|
bluetooth_mac: str
|
|
#authorized_users: List[User] = []
|
|
open_request: bool # Flag to open
|
|
time_seconds: int
|
|
acces_list_counter: int
|
|
class Config:
|
|
orm_mode = True
|
|
|
|
class IotBluetoothMac(BaseModel):
|
|
bluetooth_mac : str
|
|
|
|
class User(UserBase):
|
|
id: int
|
|
is_active: bool
|
|
authorized_devices: List[IotEntity] = []
|
|
|
|
class Config:
|
|
orm_mode = True
|
|
|
|
|
|
class Token(BaseModel):
|
|
access_token : str
|
|
token_type : str
|
|
|
|
class TokenData(BaseModel):
|
|
username : str
|
|
# Token can conatin information. But we are already recording this in a database
|
|
# for scalability.
|
|
|
|
class UserAllowForIotEntityRequestByID(BaseModel):
|
|
user_id: int
|
|
iot_entity_id: int
|
|
|
|
class UserAllowForIotEntityRequestByUsername(BaseModel):
|
|
username: str
|
|
description: str
|
|
|
|
class OpenDoorRequestBase(BaseModel):
|
|
username: str
|
|
bluetooth_mac: str
|
|
|
|
class OpenDoorRequestTime(OpenDoorRequestBase):
|
|
time_seconds: int
|
|
|
|
# Device sends this periodcally
|
|
class IotDoorPollingRequest(BaseModel):
|
|
bluetooth_mac : str
|
|
token : str
|
|
class Config:
|
|
orm_mode = True
|
|
|
|
class IotDoorPollingResponse(BaseModel):
|
|
open_command : bool
|
|
acces_list_counter : int
|
|
time_seconds : int
|
|
|
|
class IotMonitorRoomInfo(BaseModel):
|
|
humidity : int
|
|
people : int
|
|
temperature : int
|
|
smoke_sensor_reading : int
|
|
token: str
|
|
class Config:
|
|
orm_mode = True
|
|
|
|
class IotMonitorRoomInfoTimestamped(IotMonitorRoomInfo):
|
|
time: datetime
|
|
class Config:
|
|
orm_mode = True
|
|
|
|
class DoorAccessLog(BaseModel):
|
|
user_id: int
|
|
door_bluetooth_mac: str
|
|
time: datetime
|
|
class Config:
|
|
orm_mode = True
|
|
|
|
class AccessLogRequest(BaseModel):
|
|
bluetooth_mac : str
|
|
|
|
class UserAccessLogRequestUsername(BaseModel):
|
|
username : str
|
|
|
|
class UserAccessLogRequestEmail(BaseModel):
|
|
email : str
|
|
|
|
class UserAccessLogRequestID(BaseModel):
|
|
id : int
|