File size: 2,411 Bytes
8ed8485 fa3fd2e 8ed8485 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 |
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} |