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}