pulse-be / routers /sites.py
khawir's picture
updated get all sites return model
fa3fd2e
raw
history blame
2.41 kB
from datetime import datetime
from fastapi import Depends, APIRouter, HTTPException, Query
from models import Site, SiteCreate, SitePublic, SiteUpdate, SitePublicWith
from sqlmodel import Session, select
from core import crud, utils
router = APIRouter(
prefix="/sites",
tags=["sites"],
dependencies=[Depends(crud.get_current_super_user)]
)
@router.post("/", response_model=SitePublic)
def create_site(*,
session: Session = Depends(utils.get_session),
site: SiteCreate
):
crud.camera_exists(session, site)
extra_data = {"created_at": datetime.now(),
"updated_at": datetime.now()}
db_site = Site.model_validate(site, update=extra_data)
return crud.push_site(session, db_site)
@router.get("/", response_model=list[SitePublicWith])
def read_sites(*,
session: Session = Depends(utils.get_session),
offset: int = 0,
limit: int = Query(default=100, le=100),
):
sites = session.exec(select(Site).offset(offset).limit(limit)).all()
return sites
@router.get("/{site_id}", response_model=SitePublicWith)
def read_site(*,
session: Session = Depends(utils.get_session),
site_id: int
):
db_site = session.get(Site, site_id)
if not db_site:
raise HTTPException(status_code=404, detail="Site not found")
return db_site
@router.patch("/{site_id}", response_model=SitePublic)
def update_site(*,
session: Session = Depends(utils.get_session),
site_id: int,
site: SiteUpdate
):
crud.camera_exists(session, site)
db_site = session.get(Site, site_id)
if not db_site:
raise HTTPException(status_code=404, detail="Site not found")
site_data = site.model_dump(exclude_unset=True)
extra_data = {"updated_at": datetime.now()}
db_site.sqlmodel_update(site_data, update=extra_data)
return crud.push_site(session, db_site)
@router.delete("/{site_id}")
def delete_site(*,
session: Session = Depends(utils.get_session),
site_id: int
):
db_site = session.get(Site, site_id)
if not db_site:
raise HTTPException(status_code=404, detail="Site not found")
session.delete(db_site)
session.commit()
return {"ok": True}