69 lines
2.3 KiB
Python
69 lines
2.3 KiB
Python
"""This module handles CRUD operations for users in the database, based on pydanctic schemas."""
|
|
|
|
from datetime import datetime
|
|
|
|
from sqlalchemy.orm import Session
|
|
|
|
from backend.models import devices as devicemodel
|
|
from backend.models import users as usermodel
|
|
from backend.schemas import devices as deviceschema
|
|
from backend.exceptions import DataIntegrityException, NotFoundException
|
|
|
|
|
|
def create_device(db: Session, device: deviceschema.DeviceCreate) -> deviceschema.Device:
|
|
"""Creates the specified device in the database."""
|
|
|
|
db_user = db.query(usermodel.User).filter(usermodel.User.id == device.owner_id).first()
|
|
if not db_user:
|
|
raise NotFoundException("Attempted to create a device for a nonexistent user.")
|
|
if not db_user.patient:
|
|
raise DataIntegrityException("Attempted to create a device for a user who is not a patient.")
|
|
|
|
db_device = devicemodel.Device(
|
|
model_id=device.model_id,
|
|
owner_id=device.owner_id,
|
|
)
|
|
db.add(db_device)
|
|
db.commit()
|
|
db.refresh(db_device)
|
|
|
|
return deviceschema.Device.from_orm(db_device)
|
|
|
|
|
|
def read_device(db: Session, id: int) -> deviceschema.Device | None:
|
|
"""Queries the db for a device with the specified id and returns it."""
|
|
|
|
db_device = db.query(devicemodel.Device).filter(devicemodel.Device.id == id).first()
|
|
if not db_device:
|
|
raise NotFoundException(f"Device with id '{id}' was not found.")
|
|
|
|
return deviceschema.Device.from_orm(db_device)
|
|
|
|
|
|
def update_device(db: Session, device: deviceschema.DeviceUpdate, id: int) -> deviceschema.Device:
|
|
"""Updates the specified device's last seen time."""
|
|
|
|
db_device = db.query(devicemodel.Device).filter(devicemodel.Device.id == id).first()
|
|
if not db_device:
|
|
raise NotFoundException(f"Device with id '{id}' was not found.")
|
|
|
|
db_device.last_seen = device.last_seen
|
|
db.commit()
|
|
db.refresh(db_device)
|
|
|
|
return deviceschema.Device.from_orm(db_device)
|
|
|
|
|
|
def delete_device(db: Session, id: int) -> deviceschema.Device:
|
|
"""Deletes the user with the provided id from the db."""
|
|
|
|
db_device = db.query(devicemodel.Device).filter(devicemodel.Device.id == id).first()
|
|
if not db_device:
|
|
raise NotFoundException(f"Device with id '{id}' was not found.")
|
|
device_copy = deviceschema.Device.from_orm(db_device)
|
|
|
|
db.delete(db_device)
|
|
db.commit()
|
|
|
|
return device_copy
|