Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in
Toggle navigation
Menu
Open sidebar
co2ampel2
Web
Commits
12bd77d8
Commit
12bd77d8
authored
Jun 26, 2025
by
Patrick Ade
Browse files
Refactor API routes and add response schemas for sensor data endpoints
parent
0cfce44e
Changes
3
Hide whitespace changes
Inline
Side-by-side
backend/app/api.py
View file @
12bd77d8
...
@@ -4,5 +4,5 @@ from app.routes.sensor import sensor_router
...
@@ -4,5 +4,5 @@ from app.routes.sensor import sensor_router
api
=
NinjaAPI
()
api
=
NinjaAPI
()
api
.
add_router
(
"
/api
"
,
user_router
)
api
.
add_router
(
""
,
user_router
)
api
.
add_router
(
"
/api
"
,
sensor_router
)
api
.
add_router
(
""
,
sensor_router
)
backend/app/routes/sensor.py
View file @
12bd77d8
...
@@ -6,13 +6,27 @@ from utils.influx import InfluxDBHelper
...
@@ -6,13 +6,27 @@ from utils.influx import InfluxDBHelper
from
dotenv
import
load_dotenv
from
dotenv
import
load_dotenv
import
os
import
os
from
app.schemas.sensor
import
(
RoomDataRangeResponse
,
GetRoomsResponse
,
RoomDataCSVResponse
,
RoomDataCSVDownloadResponse
,
GetRoomsFromBuildingResponse
,
GetBauResponse
,
RoomAvailabilityResponse
,
SensorAvailabilityResponse
,
AllRoomsAvailabilityResponse
,
AllSensorsAvailabilityResponse
,
Error
,
)
sensor_router
=
Router
(
tags
=
[
"sensor"
])
sensor_router
=
Router
(
tags
=
[
"sensor"
])
@
sensor_router
.
get
(
"/room_data_range"
)
@
sensor_router
.
get
(
"/room_data_range"
,
response
=
RoomDataRangeResponse
)
def
room_data_range
(
request
,
room
:
str
,
start
:
str
=
"-30d"
,
stop
:
str
=
"now()"
):
def
room_data_range
(
request
,
room
:
str
,
start
:
str
=
"-30d"
,
stop
:
str
=
"now()"
):
if
not
room
:
if
not
room
:
return
JsonResponse
({
"e
rror
"
:
"Missing 'room' parameter"
},
status
=
400
)
return
400
,
E
rror
(
"Missing 'room' parameter"
)
load_dotenv
()
load_dotenv
()
client
=
InfluxDBHelper
(
client
=
InfluxDBHelper
(
...
@@ -38,7 +52,7 @@ def room_data_range(request, room: str, start: str = "-30d", stop: str = "now()"
...
@@ -38,7 +52,7 @@ def room_data_range(request, room: str, start: str = "-30d", stop: str = "now()"
return
{
"room"
:
room
,
"data"
:
data_by_time
}
return
{
"room"
:
room
,
"data"
:
data_by_time
}
@
sensor_router
.
get
(
"/get_rooms"
)
@
sensor_router
.
get
(
"/get_rooms"
,
response
=
GetRoomsResponse
)
def
get_rooms
(
request
):
def
get_rooms
(
request
):
client
=
InfluxDBHelper
(
client
=
InfluxDBHelper
(
url
=
os
.
getenv
(
"INFLUXDB_URL"
),
url
=
os
.
getenv
(
"INFLUXDB_URL"
),
...
@@ -56,7 +70,7 @@ def get_rooms(request):
...
@@ -56,7 +70,7 @@ def get_rooms(request):
return
{
"rooms"
:
sorted
(
rooms
)}
return
{
"rooms"
:
sorted
(
rooms
)}
@
sensor_router
.
get
(
"/room_data_csv"
)
@
sensor_router
.
get
(
"/room_data_csv"
,
response
=
RoomDataCSVResponse
)
def
room_data_csv_view
(
request
,
room
:
str
,
start
:
str
=
"-30d"
,
stop
:
str
=
"now()"
):
def
room_data_csv_view
(
request
,
room
:
str
,
start
:
str
=
"-30d"
,
stop
:
str
=
"now()"
):
if
not
room
:
if
not
room
:
return
JsonResponse
({
"error"
:
"Missing 'room' parameter"
},
status
=
400
)
return
JsonResponse
({
"error"
:
"Missing 'room' parameter"
},
status
=
400
)
...
@@ -84,7 +98,7 @@ def room_data_csv_view(request, room: str, start: str = "-30d", stop: str = "now
...
@@ -84,7 +98,7 @@ def room_data_csv_view(request, room: str, start: str = "-30d", stop: str = "now
return
{
"room"
:
room
,
"data"
:
results
}
return
{
"room"
:
room
,
"data"
:
results
}
@
sensor_router
.
get
(
"/room_data_csv_download"
)
@
sensor_router
.
get
(
"/room_data_csv_download"
,
response
=
RoomDataCSVDownloadResponse
)
def
room_data_csv_download
(
request
,
room
:
str
,
start
:
str
=
"-30d"
,
stop
:
str
=
"now()"
):
def
room_data_csv_download
(
request
,
room
:
str
,
start
:
str
=
"-30d"
,
stop
:
str
=
"now()"
):
if
not
room
:
if
not
room
:
return
JsonResponse
({
"error"
:
"Missing 'room' parameter"
},
status
=
400
)
return
JsonResponse
({
"error"
:
"Missing 'room' parameter"
},
status
=
400
)
...
@@ -103,7 +117,7 @@ def room_data_csv_download(request, room: str, start: str = "-30d", stop: str =
...
@@ -103,7 +117,7 @@ def room_data_csv_download(request, room: str, start: str = "-30d", stop: str =
return
response
return
response
@
sensor_router
.
get
(
"/get_rooms_from_building"
)
@
sensor_router
.
get
(
"/get_rooms_from_building"
,
response
=
GetRoomsFromBuildingResponse
)
def
get_rooms_from_building
(
request
,
building
:
str
):
def
get_rooms_from_building
(
request
,
building
:
str
):
if
not
building
:
if
not
building
:
return
JsonResponse
({
"error"
:
"Missing 'building' parameter"
},
status
=
400
)
return
JsonResponse
({
"error"
:
"Missing 'building' parameter"
},
status
=
400
)
...
@@ -127,7 +141,7 @@ def get_rooms_from_building(request, building: str):
...
@@ -127,7 +141,7 @@ def get_rooms_from_building(request, building: str):
return
{
"building"
:
building
,
"rooms"
:
sorted
(
rooms
)}
return
{
"building"
:
building
,
"rooms"
:
sorted
(
rooms
)}
@
sensor_router
.
get
(
"/get_bau"
)
@
sensor_router
.
get
(
"/get_bau"
,
response
=
GetBauResponse
)
def
get_bau
(
request
):
def
get_bau
(
request
):
client
=
InfluxDBHelper
(
client
=
InfluxDBHelper
(
url
=
os
.
getenv
(
"INFLUXDB_URL"
),
url
=
os
.
getenv
(
"INFLUXDB_URL"
),
...
@@ -149,7 +163,7 @@ def get_bau(request):
...
@@ -149,7 +163,7 @@ def get_bau(request):
return
{
"baus"
:
sorted
(
baus
)}
return
{
"baus"
:
sorted
(
baus
)}
@
sensor_router
.
get
(
"/room_availability"
)
@
sensor_router
.
get
(
"/room_availability"
,
response
=
RoomAvailabilityResponse
)
def
room_availability
(
request
,
room
:
str
,
start
:
str
=
"-30d"
,
stop
:
str
=
"now()"
):
def
room_availability
(
request
,
room
:
str
,
start
:
str
=
"-30d"
,
stop
:
str
=
"now()"
):
if
not
room
:
if
not
room
:
return
JsonResponse
({
"error"
:
"Missing 'room' parameter"
},
status
=
400
)
return
JsonResponse
({
"error"
:
"Missing 'room' parameter"
},
status
=
400
)
...
@@ -166,7 +180,7 @@ def room_availability(request, room: str, start: str = "-30d", stop: str = "now(
...
@@ -166,7 +180,7 @@ def room_availability(request, room: str, start: str = "-30d", stop: str = "now(
return
{
"room"
:
room
,
"available"
:
availability
}
return
{
"room"
:
room
,
"available"
:
availability
}
@
sensor_router
.
get
(
"/sensor_availability"
)
@
sensor_router
.
get
(
"/sensor_availability"
,
response
=
SensorAvailabilityResponse
)
def
sensor_availability
(
request
,
mac
:
str
,
start
:
str
=
"-30d"
,
stop
:
str
=
"now()"
):
def
sensor_availability
(
request
,
mac
:
str
,
start
:
str
=
"-30d"
,
stop
:
str
=
"now()"
):
if
not
mac
:
if
not
mac
:
return
JsonResponse
({
"error"
:
"Missing 'mac' parameter"
},
status
=
400
)
return
JsonResponse
({
"error"
:
"Missing 'mac' parameter"
},
status
=
400
)
...
@@ -183,7 +197,7 @@ def sensor_availability(request, mac: str, start: str = "-30d", stop: str = "now
...
@@ -183,7 +197,7 @@ def sensor_availability(request, mac: str, start: str = "-30d", stop: str = "now
return
{
"sensor_mac"
:
mac
,
"available"
:
availability
}
return
{
"sensor_mac"
:
mac
,
"available"
:
availability
}
@
sensor_router
.
get
(
"/all_rooms_availability"
)
@
sensor_router
.
get
(
"/all_rooms_availability"
,
response
=
AllRoomsAvailabilityResponse
)
def
all_rooms_availability
(
request
,
start
:
str
=
"-30d"
,
stop
:
str
=
"now()"
):
def
all_rooms_availability
(
request
,
start
:
str
=
"-30d"
,
stop
:
str
=
"now()"
):
client
=
InfluxDBHelper
(
client
=
InfluxDBHelper
(
url
=
os
.
getenv
(
"INFLUXDB_URL"
),
url
=
os
.
getenv
(
"INFLUXDB_URL"
),
...
@@ -197,7 +211,7 @@ def all_rooms_availability(request, start: str = "-30d", stop: str = "now()"):
...
@@ -197,7 +211,7 @@ def all_rooms_availability(request, start: str = "-30d", stop: str = "now()"):
return
{
"available_rooms"
:
rooms_available
}
return
{
"available_rooms"
:
rooms_available
}
@
sensor_router
.
get
(
"/all_sensors_availability"
)
@
sensor_router
.
get
(
"/all_sensors_availability"
,
response
=
AllSensorsAvailabilityResponse
)
def
all_sensors_availability
(
request
,
start
:
str
=
"-30d"
,
stop
:
str
=
"now()"
):
def
all_sensors_availability
(
request
,
start
:
str
=
"-30d"
,
stop
:
str
=
"now()"
):
client
=
InfluxDBHelper
(
client
=
InfluxDBHelper
(
url
=
os
.
getenv
(
"INFLUXDB_URL"
),
url
=
os
.
getenv
(
"INFLUXDB_URL"
),
...
...
backend/app/schemas/sensor.py
0 → 100644
View file @
12bd77d8
from
ninja
import
Schema
from
typing
import
List
,
Dict
,
Optional
class
RoomDataPoint
(
Schema
):
time
:
str
field
:
str
value
:
float
class
RoomDataRangeResponse
(
Schema
):
room
:
str
data
:
Dict
[
str
,
Dict
[
str
,
float
]]
class
GetRoomsResponse
(
Schema
):
rooms
:
List
[
str
]
class
RoomDataCSVResponse
(
Schema
):
room
:
str
data
:
List
[
RoomDataPoint
]
class
RoomDataCSVDownloadResponse
(
Schema
):
csv_data
:
str
class
GetRoomsFromBuildingResponse
(
Schema
):
building
:
str
rooms
:
List
[
str
]
class
GetBauResponse
(
Schema
):
baus
:
List
[
str
]
class
RoomAvailabilityResponse
(
Schema
):
room
:
str
available
:
bool
class
SensorAvailabilityResponse
(
Schema
):
sensor_mac
:
str
available
:
bool
class
AllRoomsAvailabilityResponse
(
Schema
):
available_rooms
:
List
[
str
]
class
AllSensorsAvailabilityResponse
(
Schema
):
available_sensors
:
List
[
str
]
class
Error
(
Schema
):
message
:
str
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment