Skip to content

Commit 6cc2484

Browse files
committed
Add: /camera/new
1 parent 804708f commit 6cc2484

3 files changed

Lines changed: 47 additions & 5 deletions

File tree

src/api/api.py

Lines changed: 26 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
from fastapi import FastAPI
1+
from fastapi import FastAPI, HTTPException, status
22
from pydantic import BaseModel
33
from fastapi.middleware.cors import CORSMiddleware
44

@@ -48,4 +48,28 @@ def get_version():
4848

4949
@self.app.post("/cameras/new")
5050
def create_new_camera(new_camera: CreateCamera):
51-
return {"Test"}
51+
try:
52+
if self.db_manager.camera_already_exists(new_camera.title):
53+
raise HTTPException(
54+
status_code=status.HTTP_409_CONFLICT,
55+
detail=f"Camera with title '{new_camera.title}' already exists"
56+
)
57+
58+
camera_id = self.db_manager.create_camera({
59+
"title": new_camera.title,
60+
"latitude": new_camera.latitude,
61+
"longitude": new_camera.longitude
62+
})
63+
64+
return {
65+
"status": "success",
66+
"message": "Camera created successfully",
67+
"camera_id": camera_id
68+
}
69+
except HTTPException:
70+
raise
71+
except Exception as e:
72+
raise HTTPException(
73+
status_code=status.HTTP_500_INTERNAL_SERVER_ERROR,
74+
detail=f"Internal server error: {str(e)}"
75+
)

src/api/models.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ def validate_latitude(cls, latitude):
2121

2222
@field_validator('longitude')
2323
@classmethod
24-
def validate_latitude(cls, longitude):
24+
def validate_longitude(cls, longitude):
2525
if longitude > 90 or longitude < -90:
2626
raise ValueError("Invalid longitude value")
2727
return longitude

src/db_manager/db_manager.py

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
from typing import Generator, Optional
66
import os
77

8-
from .models import Base
8+
from .models import Base, Camera
99

1010
class DBManager:
1111
def __init__(self, database_url: Optional[str] = None):
@@ -115,4 +115,22 @@ def execute_raw_sql(self, query: str, params: dict = None):
115115
"""Выполнить сырой SQL запрос"""
116116
with self.get_session() as session:
117117
result = session.execute(query, params or {})
118-
return result
118+
return result
119+
120+
def camera_already_exists(self, title) -> bool:
121+
with self.get_session() as session:
122+
return session.query(Camera).filter(Camera.title.ilike(title)).first is not None
123+
124+
def create_camera(self, camera):
125+
with self.get_session() as session:
126+
new_camera = Camera(
127+
title=camera['title'],
128+
latitude=camera['latitude'],
129+
longitude=camera['longitude']
130+
)
131+
132+
session.add(new_camera)
133+
134+
session.flush()
135+
136+
return new_camera.id

0 commit comments

Comments
 (0)