Skip to content

Commit aa63fb7

Browse files
committed
feat(cameras): add route to patch location
1 parent f7c1d37 commit aa63fb7

File tree

3 files changed

+27
-13
lines changed

3 files changed

+27
-13
lines changed

src/app/api/api_v1/endpoints/cameras.py

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
from app.core.security import create_access_token
1414
from app.crud import CameraCRUD
1515
from app.models import Camera, Role, UserRole
16-
from app.schemas.cameras import CameraCreate, LastActive, LastImage
16+
from app.schemas.cameras import CameraCreate, CameraEdit, LastActive, LastImage
1717
from app.schemas.login import Token, TokenPayload
1818
from app.services.storage import s3_service, upload_file
1919
from app.services.telemetry import telemetry_client
@@ -97,6 +97,17 @@ async def create_camera_token(
9797
return Token(access_token=token, token_type="bearer") # noqa S106
9898

9999

100+
@router.patch("/{camera_id}/location", status_code=status.HTTP_200_OK, summary="Update the location of a camera")
101+
async def update_camera_location(
102+
payload: CameraEdit,
103+
camera_id: int = Path(..., gt=0),
104+
cameras: CameraCRUD = Depends(get_camera_crud),
105+
token_payload: TokenPayload = Security(get_jwt, scopes=[UserRole.ADMIN]),
106+
) -> Camera:
107+
telemetry_client.capture(token_payload.sub, event="cameras-update-location", properties={"camera_id": camera_id})
108+
return await cameras.update(camera_id, payload)
109+
110+
100111
@router.delete("/{camera_id}", status_code=status.HTTP_200_OK, summary="Delete a camera")
101112
async def delete_camera(
102113
camera_id: int = Path(..., gt=0),

src/app/crud/crud_camera.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,11 @@
77

88
from app.crud.base import BaseCRUD
99
from app.models import Camera
10-
from app.schemas.cameras import CameraCreate, LastActive
10+
from app.schemas.cameras import CameraCreate, CameraEdit, LastActive
1111

1212
__all__ = ["CameraCRUD"]
1313

1414

15-
class CameraCRUD(BaseCRUD[Camera, CameraCreate, LastActive]):
15+
class CameraCRUD(BaseCRUD[Camera, CameraCreate, LastActive | CameraEdit]):
1616
def __init__(self, session: AsyncSession) -> None:
1717
super().__init__(session, Camera)

src/app/schemas/cameras.py

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,19 @@ class LastImage(LastActive):
2121
last_image: str
2222

2323

24-
class CameraCreate(BaseModel):
24+
class CameraEdit(BaseModel):
25+
elevation: float = Field(
26+
...,
27+
gt=0,
28+
lt=10000,
29+
description="number of meters from sea level",
30+
json_schema_extra={"examples": [1582]},
31+
)
32+
lat: float = Field(..., gt=-90, lt=90, description="latitude", json_schema_extra={"examples": [44.765181]})
33+
lon: float = Field(..., gt=-180, lt=180, description="longitude", json_schema_extra={"examples": [4.514880]})
34+
35+
36+
class CameraCreate(CameraEdit):
2537
organization_id: int = Field(..., gt=0)
2638
name: str = Field(
2739
...,
@@ -37,13 +49,4 @@ class CameraCreate(BaseModel):
3749
description="angle between left and right camera view",
3850
json_schema_extra={"examples": [120.0]},
3951
)
40-
elevation: float = Field(
41-
...,
42-
gt=0,
43-
lt=10000,
44-
description="number of meters from sea level",
45-
json_schema_extra={"examples": [1582]},
46-
)
47-
lat: float = Field(..., gt=-90, lt=90, description="latitude", json_schema_extra={"examples": [44.765181]})
48-
lon: float = Field(..., gt=-180, lt=180, description="longitude", json_schema_extra={"examples": [4.514880]})
4952
is_trustable: bool = Field(True, description="whether the detection from this camera can be trusted")

0 commit comments

Comments
 (0)